| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
- Kotlin
- docker
- DL
- frontend
- 배포
- OS
- architecture
- inflearn
- GCP
- VUE
- DB
- CS
- react
- Spring
- Network
- springboot
- Design
- Studying
- Algorithm
- cloud
- Android
- blockchain
- TypeScript
- spring boot
- java
- SQL
- http
- AI
- Python
- Database
- Today
- Total
소소한 지식 저장소
[STUDYING] 5 - 2. The Illustrated Transformer 본문
원문·이미지 라이선스
https://jalammar.github.io/illustrated-transformer/
이 노트는 원문의 학습 흐름을 바탕으로 재구성한 참고 노트다. 아래 도식은 원문의 핵심 시각 자료이며, Jay Alammar, CC BY-NC-SA 4.0으로 출처를 밝힌다. 원문은 이해를 돕기 위한 직관적 설명이므로, 세부 구현·최신 Transformer 변형은 원 논문과 공식 구현으로 교차 확인한다.
1. 큰 그림: 번역 모델에서 Encoder–Decoder로
Transformer는 입력 문장을 받아 출력 문장을 생성하는 encoder–decoder 구조다. 원 논문 예시는 기계번역이지만, 핵심은 입력 토큰을 문맥화하고 목표 토큰을 순차 생성하는 과정이다.

- Encoder는 입력 시퀀스를 여러 층으로 처리해 문맥 표현을 만든다.
- Decoder는 이전에 생성한 출력과 encoder의 표현을 참고해 다음 토큰을 예측한다.
- 원 논문은 encoder·decoder를 각각 6층 쌓았지만, 층 수는 고정 규칙이 아닌 설계 선택이다.
2. Encoder 블록: 토큰 간 관계와 위치별 변환
각 encoder 층은 Self-Attention과 position-wise Feed-Forward Network로 구성된다. Self-Attention은 현재 토큰을 인코딩할 때 다른 입력 토큰을 참고하게 하고, FFN은 각 토큰 위치에 독립적으로 동일한 비선형 변환을 적용한다.

입력 토큰은 먼저 임베딩 벡터가 된다. 최하위 encoder는 token embedding을 받지만, 그 위 층들은 바로 아래 encoder의 출력을 입력으로 받는다.
3. Self-Attention: 현재 토큰을 문맥으로 다시 표현하기
Self-Attention은 한 토큰이 같은 문장 안의 어떤 토큰을 얼마나 참고할지 계산한다. 예를 들어 대명사 it을 처리할 때 관련 명사를 더 강하게 참고할 수 있다. 이는 단어 자체를 고정 벡터로 보지 않고, 주변 문맥이 반영된 벡터로 바꾸는 과정이다.

Q, K, V와 계산 흐름
입력 행렬 X를 서로 다른 학습 가중치로 변환해 Q, K, V를 만든다.

- QKᵀ: Query와 Key의 내적으로 토큰 쌍의 관련성 점수를 만든다.
- /√d_k: 차원이 클 때 score가 과도하게 커지는 문제를 완화한다.
- softmax: 각 Query가 모든 Key를 참고하는 비중을 정규화한다.
- ×V: 비중에 따라 Value를 가중합해 새 문맥 벡터를 만든다.

4. Multi-Head Attention: 하나의 관계만 보지 않기
여러 head는 서로 다른 W_Q, W_K, W_V로 입력을 각기 다른 표현 공간에 투영한 뒤 attention을 병렬 계산한다. 각 head의 출력 Z_i를 이어 붙이고 W_O로 투영해 하나의 출력으로 합친다.

여러 head는 문법적 연결·의미적 유사성·장거리 의존성 등 서로 다른 관계를 포착할 수 있는 표현 용량을 준다. 다만 특정 head 하나에 사람이 읽을 수 있는 역할이 항상 고정된다고 단정해서는 안 된다.
5. Positional Encoding: 병렬 처리에 순서를 다시 넣기
Self-Attention은 입력을 병렬로 보므로 토큰 위치를 자동으로 알지 못한다. Transformer는 token embedding에 positional encoding을 더해 순서·상대 거리 단서를 제공한다.

원 논문 방식은 각 위치·차원에 사인·코사인 함수를 사용한다. 값의 범위가 제한되고, 차원별 주기가 달라 서로 다른 위치를 구분할 수 있다. 최신 모델에는 학습형 위치 임베딩·RoPE 등 다른 방식도 있다.
6. Residual Connection과 Layer Normalization
각 Self-Attention·FFN sub-layer는 residual connection으로 입력을 더하고 LayerNorm을 적용한다.

Residual connection은 원래 표현과 gradient 흐름을 보존하고, LayerNorm은 학습을 안정화한다.
7. Decoder: 미래를 보지 않고 다음 토큰 생성하기
Decoder는 이전 출력 토큰을 임베딩·위치 인코딩한 뒤 masked self-attention을 적용한다. 미래 위치의 score를 softmax 전 차단해 현재 위치가 아직 생성되지 않은 정답 토큰을 볼 수 없게 한다. 이어 encoder–decoder attention이 encoder의 K·V를 참고하고, FFN이 다음 표현을 만든다.

마지막 선형층과 softmax는 decoder 표현을 vocabulary 전체의 다음 토큰 확률분포로 바꾼다. 학습에서는 정답 토큰과 예측 분포를 비교하는 loss를 최소화하고, 추론에서는 이전에 생성한 토큰을 다음 단계 입력으로 사용한다.
'STUDYING' 카테고리의 다른 글
| [STUDYING] 5 - 1. Transformer: Self-Attention부터 생성 구조까지 (1) | 2026.07.21 |
|---|---|
| [STUDYING] 4. 회귀실습 - UCI Bike Sharing Dataset의 일별 자료 (0) | 2026.07.21 |
| [STUDYING] 3. 데이터 분석의 출발점: 데이터 읽기와 기초통계 (0) | 2026.07.21 |
| [STUDYING] 2. Prompt 설계 및 Context Engineering (0) | 2026.07.21 |
| [STUDYING] 1. Git 협업 흐름과 AI 코딩 환경 (0) | 2026.07.21 |
