Part 7 · Transformer Architecture - Following the Entire Transformer Pipeline

입력 문장이 출력 문장이 되기까지

지금까지 Transformer의 각 구성 요소를 하나씩 살펴보았습니다. 이제 입력 문장이 토큰으로 변환되고, 임베딩과 위치 정보를 거쳐 Encoder와 Decoder를 통과한 뒤 최종적으로 다음 토큰을 생성하기까지의 전체 흐름을 하나의 과정으로 연결해 보겠습니다.

One Sentence, One Journey

이번에는 구조가 아니라 데이터의 이동을 따라간다

→
앞 장에서는 Encoder와 Decoder가 어떻게 협력하는지 살펴봤습니다. 이번 장에서는 하나의 문장이 실제로 어떤 모습으로 바뀌며 이동하는지 따라갑니다.

입력

I love this book
→

출력

나는 이 책을 좋아한다
이 페이지의 질문은 하나입니다. 입력 문장이 어떤 중간 데이터를 거쳐 출력 문장으로 바뀌는가?
Data Transformation

문장의 모습은 단계마다 달라진다

1
문자열
I love this book
2
토큰
I love this book
3
Token ID
41 872 56 391
4
임베딩 벡터
e₁ e₂ e₃ e₄
5
위치 정보가 더해진 벡터
e₁ + p₁ e₂ + p₂ e₃ + p₃ e₄ + p₄
6
Encoder 문맥 벡터
h₁ h₂ h₃ h₄
7
다음 토큰 확률
나는 0.68 내가 0.14 저는 0.08
8
선택된 출력 토큰
나는
위 숫자는 이해를 위한 예시입니다. 실제 Token ID, 벡터 값, 확률은 사용하는 Tokenizer와 모델에 따라 달라집니다.
Interactive Data States

같은 문장이 어떻게 변하는지 단계별로 보기

1단계 · 문자열 Text

Transformer에 들어가기 전

I love this book

이 단계를 지난 뒤

아직 사람이 읽는 문자 형태입니다.
컴퓨터가 계산하려면 문자를 숫자 데이터로 바꾸는 과정이 필요합니다.
What the Encoder Changes

Encoder를 지나면 벡터에 문맥이 들어간다

Encoder에 들어가기 전

토큰의 의미와 위치 정보가 들어 있는 벡터

e₁+p₁, e₂+p₂, e₃+p₃, e₄+p₄
→

Encoder를 지난 뒤

다른 토큰과의 관계까지 반영된 문맥 벡터

h₁, h₂, h₃, h₄
예를 들어 love의 최종 벡터에는 단순한 단어 의미뿐 아니라 주어가 I이고 대상이 this book이라는 문맥도 반영됩니다.
Two Inputs to the Decoder

Decoder는 매번 두 종류의 정보를 받는다

① 지금까지 생성한 출력

첫 단계에서는 시작 토큰만 있고, 이후에는 “나는”, “나는 이”처럼 출력이 점점 길어집니다.

② Encoder의 문맥 벡터

입력 문장 “I love this book”을 이해한 결과를 Cross-Attention으로 계속 참고합니다.

Decoder는 지금까지 무엇을 생성했는지와 입력 문장이 무엇을 뜻하는지를 함께 보고 다음 토큰을 정합니다.
From Vector to Token

Decoder의 마지막 벡터는 어떻게 단어가 될까?

Decoder의 출력 벡터를 Vocabulary 크기의 점수로 바꾸고, Softmax를 적용하면 각 토큰의 확률을 얻을 수 있습니다.

첫 번째 출력 토큰 후보
나는
68%
내가
14%
저는
8%
기타
10%
항상 가장 높은 확률의 토큰만 고르는 것은 아닙니다. 생성 설정에 따라 확률을 이용해 다른 후보를 선택할 수도 있습니다.
Token by Token

한 토큰을 만든 뒤 같은 과정을 반복한다

생성 단계 Decoder가 지금까지 본 출력 새로 선택한 토큰
1 <시작> 나는
2 <시작> 나는 이
3 <시작> 나는 이 책을
4 <시작> 나는 이 책을 좋아한다
5 <시작> 나는 이 책을 좋아한다 <끝>
1

이전 출력 입력

지금까지 생성한 토큰을 Decoder에 넣습니다.

2

문맥 계산

Masked Self-Attention과 Cross-Attention을 수행합니다.

3

확률 계산

Vocabulary의 모든 후보 토큰 점수를 계산합니다.

4

토큰 추가

선택한 토큰을 뒤에 붙이고 다시 반복합니다.

Summary

입력 문장에서 출력 문장까지

  • 문장은 Tokenizer를 거쳐 토큰과 Token ID로 바뀝니다.
  • Token ID로 Embedding Table에서 토큰 벡터를 찾습니다.
  • 토큰 벡터에 위치 정보를 더해 순서를 표현합니다.
  • Encoder는 토큰 관계를 계산해 문맥 벡터를 만듭니다.
  • Decoder는 이전 출력과 Encoder 문맥을 함께 참고합니다.
  • Decoder의 최종 벡터를 Vocabulary 확률로 바꿔 다음 토큰을 선택합니다.
  • 선택한 토큰을 다시 입력하면서 종료 토큰까지 반복합니다.