Part 7 · Transformer Architecture - Inside a Decoder

Decoder는 문장을 어떻게 만들어 갈까

Encoder가 입력 문장을 이해하는 역할이라면 Decoder는 그 정보를 바탕으로 새로운 문장을 생성하는 역할을 합니다. Decoder는 지금까지 생성한 단어와 Encoder의 정보를 함께 참고하면서 다음 토큰을 하나씩 예측해 문장을 완성합니다.

From Understanding to Generation

문장을 이해한 다음에는 무엇을 해야 할까?

D
“Encoder가 입력 문장의 의미를 정리했습니다. 이제 그 정보를 바탕으로 번역문이나 답변을 실제로 만들어야 합니다.”

Encoder는 입력 문장 속 단어 관계를 계산합니다. 하지만 Encoder만으로는 새로운 문장을 한 단어씩 만들어 내지 않습니다. 이때 생성 작업을 맡는 부분이 Decoder입니다.

Decoder의 핵심 역할은 지금까지 생성된 토큰과 Encoder의 정보를 함께 참고하여 다음에 올 토큰을 예측하는 것입니다.
The Big Picture

Decoder는 다음 토큰을 하나씩 예측한다

입력 문장 I love this book
→
Encoder 입력 의미를 정리
→
Decoder 다음 토큰을 예측
→
출력 문장 나는 이 책을 좋아한다
실제 생성 과정에서는 완성된 문장이 한 번에 나오는 것이 아닙니다. Decoder가 토큰 하나를 예측하고, 그 결과를 다시 입력으로 사용하며 문장을 차례로 이어 갑니다.
Two Sources of Information

Decoder는 두 종류의 정보를 함께 사용한다

② Encoder가 만든 출력 벡터 입력 문장의 어떤 내용에 집중해야 하는지 판단하기 위해 Encoder의 결과도 함께 참고합니다.
Decoder는 자기 앞에 이미 생성된 내용만 보는 것이 아니라, 입력 문장의 의미와 지금까지 만든 출력을 함께 살펴봅니다.
Inside One Decoder Layer

Decoder 한 층 안에서는 어떤 일이 일어날까?

일반적인 Transformer 구조도처럼 그림은 아래의 입력에서 시작해 위의 출력으로 진행합니다. 각 블록을 누르면 역할을 확인할 수 있습니다.

Decoder Layer
출력 벡터
↑
Residual Connection + Layer Normalization
↑
Feed Forward Network
↑
Residual Connection + Layer Normalization
↑
Cross-Attention
Encoder 출력 벡터가 이곳으로 들어옴 →
↑
Residual Connection + Layer Normalization
↑
Masked Multi-Head Self-Attention
↑
지금까지 생성한 토큰의 벡터
1단계

아직 생성하지 않은 미래는 보지 않는다

Masked Self-Attention은 현재 위치보다 뒤에 있는 토큰을 가립니다. 따라서 Decoder는 이미 생성된 토큰만 보고 다음 토큰을 예측합니다.

이번 페이지에서는 Decoder의 전체 조립 구조만 확인합니다. Masked Self-Attention과 Cross-Attention의 자세한 원리는 다음 페이지에서 각각 살펴봅니다.
Autoregressive Generation

Decoder는 어떻게 문장을 한 토큰씩 이어 갈까?

아래 버튼을 누르면 Decoder가 이전 결과를 다시 입력으로 사용하며 문장을 만드는 과정을 볼 수 있습니다.

<시작>
시작 토큰을 보고 첫 번째 토큰을 예측할 준비를 합니다.
새로 생성된 토큰은 다음 단계의 입력에 포함됩니다. 이처럼 자신의 출력을 다시 이용해 다음 출력을 만드는 방식을 자기회귀적 생성(Autoregressive Generation)이라고 합니다.
Encoder vs Decoder

Encoder와 Decoder는 무엇이 다를까?

Encoder

  • 입력 문장의 모든 토큰을 함께 살펴봅니다.
  • 단어 사이의 관계와 문맥을 계산합니다.
  • 각 입력 토큰에 대응하는 문맥 벡터를 만듭니다.

Decoder

  • 지금까지 생성한 토큰만 살펴봅니다.
  • Encoder의 출력도 함께 참고합니다.
  • 다음에 올 토큰을 하나씩 예측합니다.
Encoder가 입력을 이해하는 쪽이라면, Decoder는 그 이해를 바탕으로 출력을 만드는 쪽입니다.
Summary

핵심 정리

  • Decoder는 다음 토큰을 예측하며 출력 문장을 생성합니다.
  • 지금까지 생성된 토큰과 Encoder의 출력 벡터를 함께 사용합니다.
  • Masked Self-Attention은 아직 생성되지 않은 미래 토큰을 보지 못하게 합니다.
  • Cross-Attention은 Decoder가 Encoder의 정보를 참고하게 합니다.
  • Feed Forward Network는 각 토큰 표현을 다시 변환합니다.
  • 생성한 토큰을 다시 입력에 넣으며 문장을 한 토큰씩 완성합니다.