한 줄 정의
트랜스포머 아키텍처에서 인코더의 최종 출력 벡터(메모리 뱅크)와 디코더의 쿼리(Query)를 결합하여, 생성 단계에서 입력 문맥 정보를 반영할 수 있도록 연결해주는 교차 어텐션(Cross-Attention) 매커니즘.
핵심 요지
- 고정된 메모리 뱅크: 인코더의 마지막 레이어를 거쳐 나온 출력 벡터()는 문맥, 구문, 위치, 관계 정보가 풍부하게 포함된 512차원의 고정된 룩업 테이블(Frozen memory bank) 역할을 한다.
- 일방향 정보 흐름: 디코더는 메모리 뱅크에서 정보를 읽기(Query)만 할 뿐, 디코더의 정보가 인코더로 거꾸로 역전파되거나 전달되지 않는다.
- 효율성과 모듈성: 인코더의 출력을 고정함으로써 추론(Inference) 단계에서 매번 인코더를 재실행하지 않아도 되어 연산이 효율적이고, 동일한 인코더 출력값을 바탕으로 다양한 태스크의 디코더와 모듈식으로 연동할 수.있다.
- 다중 수행: 교차 어텐션은 디코더 레이어마다 한 번씩(통상 6번) 독립적으로 일어나며, 각 레이어는 인코더의 출력을 독자적인 시각으로 재해석해 가져간다.
상세
작동 메커니즘
인코더-디코더 어텐션에서는 입력 데이터를 처리하는 주체가 인코더와 디코더로 나뉘어 다음과 같이 어텐션 요소가 구성된다.
- 쿼리(Query, Q): 디코더의 이전 레이어 출력(현재 생성 중인 타깃 시퀀스의 문맥 벡터).
- 키(Key, K) & 값(Value, V): 인코더의 마지막 레이어 출력인 고정 메모리 뱅크 .
디코더는 자신이 생성해야 할 단어의 힌트(Q)를 가지고 인코더가 제공하는 정보의 키(K)와 대조(내적 연산 및 소프트맥스)하여 유사도를 구한다. 이후 그 유사도 가중치를 값(V)에 곱해 최종적으로 입력 문장 맥락이 반영된 정보를 획득한다.
인코더 출력의 고정 이유와 효과
- 효율성: 디코더가 다음 토큰을 하나씩 생성할 때마다 인코더를 매번 처음부터 다시 가동하지 않는다.
- 모듈성: 동일한 인코더 표현을 다른 언어 번역용 디코더나 요약용 디코더 등에 연결하여 사용할 수 있다.
예시
영어 문장 "The dog sat ."을 한국어로 번역하는 경우:
- 인코더는 입력 문장 전체를 처리하여
"dog"벡터에"sat"의 의미적 힌트 등을 결합한 풍부한 맥락의 512차원 표현 벡터들을 생성하고 이를 고정 메모리 뱅크로 삼는다. - 디코더가 첫 단어
"개"를 생성한 후 다음 단어"가"또는"앉았다"를 생성하려 할 때, 디코더는 이전 출력인"개"에 대한 쿼리(Q)를 던져 인코더의 메모리 뱅크에서 가장 연관성이 높은 단어인"dog"와"sat"정보를 매칭하여 문맥에 딱 맞는 번역을 지속한다.
충돌 및 오해
- 추론 시 그래디언트의 역전파:
- 오해: 추론 시 매 단계마다 디코더에서 인코더로 그래디언트가 역전파되어야 한다.
- 사실: 그래디언트 역전파는 오직 학습(Training) 중에만 흐른다. 실제 텍스트를 생성하는 추론(Inference) 시점에는 인코더가 고정(Freeze)되어 메모리 역할만 수행한다.
- 교차 어텐션의 수행 빈도:
- 오해: 교차 어텐션은 인코더와 디코더 전체를 통틀어 단 한 번만 수행된다.
- 사실: 디코더의 각 레이어마다 개별적으로 한 번씩(통상 6번) 수행되며, 각 레이어가 독자적인 시각으로 인코더 출력을 재해석해 가져간다.