한 줄 정의

트랜스포머(Transformer)의 인코더가 입력 문장 처리를 완료한 후 생성하는, 디코더가 참조하는 불변의 인코더 출력 행렬 .

핵심 요지

  • 불변성: 인코더의 마지막 레이어를 거친 소스 문장의 토큰 벡터들이 행렬 를 형성하며, 이는 변하지 않는 고정된 상태로 디코더의 입력(Key 및 Value) 역할을 수행한다.
  • 연산 효율성: 디코더가 다음 토큰을 하나씩 생성(Autoregressive Generation)할 때마다 인코더를 매번 처음부터 다시 실행할 필요가 없으므로 추론 속도가 크게 향상된다.
  • 모듈화: 하나의 인코더 출력 행렬 를 다양한 목적의 디코더(예: 번역 디코더, 요약 디코더, 정렬 시각화 도구 등)에 연결하여 재사용할 수 있다.
  • 역전파 제약: 디코더에서 인코더로의 그래디언트(Gradient) 역전파는 오직 학습(Training) 과정에서만 발생하며, 실제 추론(Inference) 시점에는 인코더 연산과 그래디언트 흐름이 완전히 고정(Freeze)된다.

상세

인코더에 입력된 소스 문장의 모든 토큰은 여러 층의 셀프 어텐션(Self-Attention) 레이어를 통과하며 문맥 정보가 풍부하게 담긴 고도의 정보 데이터(Context-rich intelligence)로 변환된다. 최종 레이어를 통과한 512차원(기본 트랜스포머 기준)의 각 토큰 벡터 는 단어의 본래 의미, 문장 내 위치, 구문적 역할(주어, 동사, 목적어 등), 다른 단어들과의 관계 정보 등을 모두 흡수하고 있다.

이렇게 생성된 행렬 는 디코더의 모든 레이어에 위치한 교차 어텐션(Cross-Attention 또는 Encoder-Decoder Attention) 블록에 입력되어 디코더가 문장을 생성할 때 참고하는 일종의 **룩업 테이블(Lookup Table)**처럼 작동한다.

인코더-디코더 연결 파이프의 이점

  1. 추론 속도 최적화: 디코더는 출력 토큰을 순차적으로 예측한다. 만약 인코더가 고정되지 않는다면 매번 디코더가 새 단어를 만들 때마다 인코더 연산을 재실행해야 하므로 심각한 병목이 생긴다. 인코더의 출력을 고정함으로써 1회만 계산하고 지속적으로 재사용한다.
  2. 독자적인 시각의 어텐션: 디코더의 각 레이어(통상 6개 레이어)는 동일한 고정 메모리 뱅크 를 가져와 독자적인 가중치 행렬을 통해 쿼리(Query)와 연산(Cross-Attention)함으로써 상황에 맞는 소스 문장의 정보를 다각도로 추출한다.

예시

영어 문장 "I am a student."를 한국어로 번역하는 경우를 가정해 본다.

  1. 인코더 연산: "I", "am", "a", "student", "."이 인코더에 들어가 연산을 마친 뒤, 고정된 메모리 뱅크 행렬 를 형성한다.
  2. 디코더의 순차 생성:
    • 디코더가 첫 단어 "<SOS>"(시작 토큰)을 입력으로 받아 "나는"을 예측할 때, 를 참조한다.
    • 다음 단어 "학생"을 예측할 때, 디코더는 이전 출력 "나는"과 함께 다시 를 룩업하여 적절한 단어 의미를 결합한다.
    • 이 과정에서 "I am a student."에 대한 인코더 계산은 단 1회만 수행되며, 이후의 모든 디코더 스텝(추론)은 고정된 의 값을 Key와 Value로 삼아 질의(Query)만을 수행한다.

충돌

  • 메모리 뱅크의 용량 한계: 문장의 길이가 수만 토큰 이상으로 극도로 길어지는 롱 콘텍스트(Long Context) 상황에서는 단일 행렬 에 모든 문맥적 세부사항을 고정하여 보존하는 것이 정보 병목을 일으킬 수 있다는 지적이 있다. 이에 대응하여 선별적으로 인코더 출력을 압축하거나 세그먼트 단위로 메모리를 갱신하는 연구들이 대안으로 제시된다.

관련 노트