Part 7 · Transformer Architecture - How Encoder and Decoder Work Together

Encoder와 Decoder는 어떻게 협력할까

Transformer는 Encoder와 Decoder가 서로 독립적으로 동작하는 모델이 아닙니다. Encoder는 입력을 이해하고, Decoder는 그 결과를 참고하여 출력을 생성합니다. 두 구조가 계속 정보를 주고받으면서 하나의 완전한 Transformer가 만들어집니다.

Two Different Jobs

한쪽은 이해하고, 다른 한쪽은 만든다

E+D
“Encoder가 입력 문장을 읽고 의미를 정리합니다. Decoder는 그 정보를 참고하면서 출력 문장을 한 토큰씩 만들어 갑니다.”

Encoder와 Decoder는 같은 Transformer 안에 있지만 역할은 다릅니다. 둘은 따로 움직이는 것이 아니라, Encoder가 만든 정보를 Decoder가 계속 참고하면서 함께 작동합니다.

전체 구조를 한 문장으로 정리하면 입력을 이해한 결과를 바탕으로 출력을 생성하는 과정입니다.
The Big Picture

전체 흐름을 먼저 살펴보자

입력 문장 I love this book
→
Encoder 입력 토큰의 관계와 문맥을 계산
→
Decoder Encoder 정보를 참고해 출력 토큰 생성
Encoder는 입력을 한 번 처리해 문맥 벡터를 만들고, Decoder는 그 벡터를 참고하며 출력을 여러 단계에 걸쳐 생성합니다.
Division of Labor

Encoder와 Decoder의 역할은 어떻게 나뉠까?

E

Encoder의 역할

입력 문장의 모든 토큰을 함께 살펴보고, 각 토큰이 문맥 속에서 무엇을 의미하는지 벡터로 정리합니다.

D

Decoder의 역할

지금까지 생성한 토큰과 Encoder의 출력 벡터를 함께 참고하여 다음 토큰을 예측합니다.

Encoder는 입력 문장을 다시 읽을 필요가 없도록 의미 정보를 벡터로 정리합니다. Decoder는 생성 단계마다 이 정리된 정보를 Cross-Attention으로 가져옵니다.
Connected Architecture

두 구조는 Cross-Attention으로 연결된다

Encoder Stack

Encoder Layer N
⋮
Encoder Layer 2
Encoder Layer 1
입력 임베딩 + 위치 정보

Decoder Stack

출력 예측
Decoder Layer N
⋮
Decoder Layer 2
Decoder Layer 1
이전 출력 임베딩 + 위치 정보
Encoder의 최종 출력은 Decoder의 각 층에 있는 Cross-Attention 블록으로 전달됩니다.
Step by Step

Encoder와 Decoder가 함께 일하는 순서

1

입력 문장을 토큰과 벡터로 바꾼다

Tokenizer, Embedding, Positional Encoding을 거쳐 Encoder가 사용할 입력을 준비합니다.

2

Encoder가 입력 문맥을 계산한다

Self-Attention을 통해 입력 토큰들이 서로 어떤 관계인지 파악합니다.

3

Decoder가 지금까지 생성한 내용을 살펴본다

Masked Self-Attention으로 미래 토큰을 가리고 앞쪽 출력만 참고합니다.

4

Cross-Attention으로 입력 정보를 가져온다

Decoder의 Query가 Encoder의 Key와 Value를 참고합니다.

5

다음 토큰을 예측한다

Decoder의 최종 벡터를 Vocabulary 점수로 바꾸고 다음 토큰을 선택합니다.

6

생성한 토큰을 다시 Decoder에 넣는다

종료 토큰이 나올 때까지 같은 과정을 반복합니다.

Interactive Flow

번역 과정에서 두 구조가 어떻게 협력할까?

단계 버튼을 누르면 Encoder와 Decoder에서 어떤 정보가 사용되는지 확인할 수 있습니다.

1단계 · Encoder가 입력 문장 전체를 읽습니다.

Encoder 쪽

I love this book

Decoder 쪽

<시작>
Encoder는 입력 토큰 사이의 관계를 계산해 문맥 벡터를 만듭니다.
What Stays, What Grows

Encoder 정보는 유지되고, Decoder 출력은 늘어난다

Encoder 출력

입력 문장을 처리한 결과는 생성 과정 동안 참고할 수 있도록 유지됩니다.

I · love · this · book의 문맥 벡터
→

Decoder 출력

새 토큰을 하나씩 생성할 때마다 앞부분이 계속 길어집니다.

나는 → 나는 이 → 나는 이 책을 → …
입력에 대한 Encoder 표현은 기준 정보로 유지되고, Decoder가 만든 출력 시퀀스는 생성 단계마다 하나씩 늘어납니다.
Generation Loop

Decoder의 생성 반복 과정

1

이전 출력 확인

Masked Self-Attention으로 지금까지 생성한 토큰을 살펴봅니다.

2

입력 정보 확인

Cross-Attention으로 Encoder 출력에서 필요한 내용을 가져옵니다.

3

다음 토큰 선택

후보 토큰의 점수를 계산해 하나를 선택합니다.

4

다시 입력

선택한 토큰을 Decoder 입력에 붙이고 과정을 반복합니다.

실제 구현에서는 Encoder 출력의 Key와 Value를 생성 단계마다 다시 계산하지 않고 재사용할 수 있습니다. 이 페이지에서는 구조적 흐름에 집중합니다.
Summary

핵심 정리

  • Encoder는 입력 문장의 모든 토큰을 읽고 문맥 벡터를 만듭니다.
  • Decoder는 지금까지 생성한 출력과 Encoder 정보를 함께 사용합니다.
  • Masked Self-Attention은 Decoder의 앞쪽 출력 문맥을 계산합니다.
  • Cross-Attention은 Decoder와 Encoder 출력을 연결합니다.
  • Decoder는 다음 토큰을 선택하고 그 토큰을 다시 입력에 추가합니다.
  • 이 과정을 종료 토큰이 나올 때까지 반복해 최종 문장을 완성합니다.