인공지능/트랜스포머 이해

TR-06. 트랜스포머 디코더(Decoder)

FedTensor 2025. 10. 23. 23:14

트랜스포머의 인코더(Encoder)가 입력 문장 전체를 읽고 문맥적 의미를 풍부하게 담은 '표현(representation)'을 생성하는 역할이라면, 디코더(Decoder)는 이 표현을 참조하여 우리가 원하는 출력 문장을 한 단어씩 순차적으로 생성하는 '생성기' 역할을 합니다.

 

디코더 역시 인코더와 마찬가지로 동일한 구조의 여러 개 레이어(논문에서는 6개)를 쌓아 올린 형태입니다. 하나의 디코더 레이어는 크게 세 부분으로 구성됩니다.

1. 디코더 레이어의 핵심 구성 요소

각 디코더 레이어는 다음과 같은 세 개의 하위 레이어(sub-layer)로 이루어져 있습니다.

  1. 마스크드 멀티-헤드 어텐션 (Masked Multi-Head Attention)
    • 역할: 디코더가 '지금까지 생성한' 출력 단어들 간의 관계를 파악합니다.
    • 특징 (Masking): 이것이 디코더의 가장 핵심적인 특징입니다. 디코더는 미래의 단어를 예측해야 하는데, 훈련 과정에서 정답(미래의 단어들)을 미리 봐버리면 안 됩니다.
    • "마스킹(Masking)"이란?'
      • Look-Ahead Mask'라고도 부릅니다.
      • 예를 들어, "I am a student"라는 문장을 생성할 때, "am"이라는 단어를 예측하는 시점(time step 2)에서는 "I"라는 단어만 볼 수 있고, "a"나 "student"는 볼 수 없게 가려버리는(masking) 기술입니다.
      • 즉, 어텐션 계산 시 현재 위치보다 뒤에 있는 단어들은 무시하도록 강제합니다.
    • 동작: 인코더의 셀프 어텐션(Self-Attention)과 기본적으로 동일하지만, 이 '미래 가리기' 마스크가 적용된다는 점만 다릅니다.
  2. 인코더-디코더 어텐션 (Encoder-Decoder Attention)
    • 역할: 디코더가 인코더의 출력(입력 문장의 정보)을 참조하게 만드는 다리입니다.
    • 동작 (Q, K, V):
      • Query (Q): 디코더의 '마스크드 멀티-헤드 어텐션' 레이어를 통과한 결과값이 Q가 됩니다. (즉, "내가 지금까지 이런 단어들을 생성했는데, 이제 입력 문장의 어떤 부분을 참고해야 할까?"라는 질문)
      • Key (K) & Value (V): 인코더 스택의 최종 출력이 K와 V가 됩니다. (즉, 입력 문장 전체의 풍부한 문맥 정보)
    • 이 과정을 통해 디코더는 출력 단어를 생성할 때, 입력 문장의 어떤 단어에 더 집중(attention)해야 할지 결정합니다. 예를 들어, 번역 시 'I'를 '나는'으로 번역할 때, 입력 문장의 'I'에 높은 어텐션 점수를 부여합니다.
  3. 피드 포워드 신경망 (Feed-Forward Network)
    • 인코더에 있는 것과 완전히 동일한 구조입니다.
    • 어텐션을 통해 얻은 문맥 정보를 바탕으로 더 복잡한 비선형 변환을 수행하여, 예측에 필요한 정보를 추출하고 정제합니다.

2. 디코더의 전체 동작 방식 (순차적 생성)

디코더는 '자기회귀(Auto-Regressive)' 방식으로 동작합니다. 즉, 이전에 자기가 생성한 단어를 다음 단어 생성의 입력으로 다시 사용합니다.

  1. 시작 (Step 1):
    • 번역을 시작하기 위해, 디코더는 먼저 <SOS> (Start of Sequence)라는 특수 토큰을 입력으로 받습니다.
    • 이 <SOS> 토큰은 '마스크드 멀티-헤드 어텐션'을 거칩니다.
  2. 정보 참조 (Step 2):
    • 이 결과값(Q)이 '인코더-디코더 어텐션'으로 들어가 인코더의 출력(K, V)을 참조합니다. "번역을 시작하려는데, 입력 문장의 어떤 정보가 가장 중요하지?"
  3. 단어 예측 (Step 3):
    • '피드 포워드 신경망'을 거친 최종 결과값은 'Linear' 레이어와 'Softmax' 함수를 통과합니다.
    • Softmax는 수만 개의 단어(Vocabulary) 각각에 대해 '다음 단어가 될 확률'을 계산합니다.
    • 가장 확률이 높은 단어 (예: "나는")가 첫 번째 출력 단어로 선택됩니다.
  4. 반복 (Step 4):
    • 디코더는 방금 생성한 "나는"이라는 단어를 다음 입력으로 받습니다. (입력: <SOS>, "나는")
    • 이 두 단어는 '마스크드 멀티-헤드 어텐션'을 거칩니다. ("나는"을 예측할 땐 <SOS>만 보고, 다음 단어를 예측할 땐 <SOS>와 "나는"을 봅니다.)
    • 다시 '인코더-디코더 어텐션'이 인코더의 출력을 참조합니다.
    • Softmax가 다음 단어 (예: "학생")를 예측합니다.
  5. 종료 (Step 5):
    • 이 과정이 계속 반복되다가, 디코더가 <EOS> (End of Sequence)라는 문장 끝 토큰을 생성하면 번역이 완료됩니다.