The Annotated Transformer - 구현으로 읽는 Transformer
기본 정보
- 원문: The Annotated Transformer
- 원 작성: Sasha Rush
- 2022 버전: Austin Huang, Suraj Subramanian, Jonathan Sum, Khalid Almubarak, Stella Biderman 등
- 30papers 페이지: The Annotated Transformer
- 지도 안의 위치: Transformer 구현 해설, 논문과 코드 사이의 다리
한 줄 요약
The Annotated Transformer는 Attention Is All You Need를 줄 단위 코드와 주석으로 다시 구현해, Transformer 논문을 실제 작동하는 구조로 이해하게 해주는 자료다.
먼저 볼 그림
이 자료는 원논문을 “더 쉽게 요약”하는 글이라기보다, 논문 속 구조를 실행 가능한 코드로 번역하는 문서다. 따라서 처음에는 코드 전체를 따라 치기보다, 논문 개념과 코드 부품의 대응을 보는 것이 좋다.
이 자료가 답하는 질문
Transformer 논문에 나온 구조는 실제 코드에서는 어떻게 생겼을까?
원논문은 구조와 수식을 설명하지만, 비전공자나 입문 개발자에게는 여전히 멀다. The Annotated Transformer는 이 간극을 줄인다. 논문 내용을 재배열하고 일부를 생략하면서, PyTorch 코드와 설명을 함께 제공한다.
핵심 아이디어
이 자료는 논문을 해설하는 글이면서 동시에 실행 가능한 구현이다. 주요 구성은 다음과 같다.
- Encoder-Decoder 구조
- Encoder stack과 Decoder stack
- Multi-head attention
- Position-wise feed-forward network
- Embedding과 positional encoding
- Masking
- Training loop
- Greedy decoding
- 실제 번역 예시와 attention visualization
원문에서 먼저 볼 이미지/부분
- Model Architecture 섹션.
- Encoder and Decoder Stacks 섹션.
- Attention 관련 코드와 설명.
- Positional Encoding 그래프.
- Attention Visualization 섹션.
원문 순서대로 따라 읽기 — 상세 의역과 해설
저작권상 원문 전체와 코드를 그대로 옮긴 번역본이 아니라, 원문 섹션 순서를 따라가는 상세 의역·주석이다. 원문/노트북을 옆에 열어두고 개념과 코드의 대응을 따라가는 용도다.
Prelims / Background
- 의역: 문서는 필요한 라이브러리와 실행 환경을 준비한 뒤, Transformer가 등장한 배경을 짚는다. 핵심은
Attention Is All You Need의 구조를 실제 PyTorch 코드로 구현해 보겠다는 것이다. - 해석/요약: 이 글은 논문 해설이라기보다 번역기다. 자연어 논문을 코드라는 다른 언어로 옮긴다.
Part 1: Model Architecture
- 의역: 모델 전체는 encoder-decoder 구조로 구성된다. 입력 문장은 encoder를 거쳐 표현으로 바뀌고, decoder는 그 표현과 이전 출력 토큰을 이용해 다음 토큰을 예측한다. 코드에서는
EncoderDecoder같은 상위 클래스로 이 관계를 묶는다. - 해석/요약: 처음부터 모든 코드를 이해하려 하지 말고, 클래스들이 논문 Figure 1의 어느 상자에 해당하는지 표시하면서 보면 된다.
Encoder and Decoder Stacks
- 의역: Encoder는 같은 층을 N번 복제해 쌓는다. 각 층은 self-attention과 feed-forward network를 포함한다. Decoder도 층을 쌓지만, self-attention에 mask를 적용하고 encoder-decoder attention을 추가한다. 코드에서는 layer 복제, sublayer connection, normalization이 반복 패턴으로 구현된다.
- 해석/요약: Transformer의 복잡함은 사실 반복에서 온다. 하나의 층을 이해하면, 나머지는 거의 같은 구조가 깊이 방향으로 쌓인 것이다.
Attention / Multi-Head Attention
- 의역: Attention 함수는 Query, Key, Value를 받아 score를 만들고, mask가 있으면 일부 위치를 가린 뒤 softmax로 가중치를 만들고 Value를 섞는다. Multi-head attention은 이 계산을 여러 head로 나눠 병렬 수행하고 다시 합친다.
- 해석/요약: 코드로 보면 attention은 신비한 집중력이 아니라 행렬곱, mask, softmax, 다시 행렬곱이다. 환상은 사라지지만, 바로 그 지점에서 이해가 시작된다.
Position-wise Feed-Forward / Embeddings / Positional Encoding
- 의역: 각 위치에는 같은 feed-forward network가 적용된다. 단어는 embedding으로 바뀌고, Transformer에는 순서를 알려주기 위해 positional encoding이 더해진다. 문서는 sinusoidal positional encoding을 코드와 그래프로 보여준다.
- 해석/요약: 위치 인코딩은 Transformer가 순서를 모른다는 약점을 보완한다. 순서대로 읽지는 않지만, 순서의 흔적은 입력에 새긴다.
Full Model / Inference
- 의역: 앞서 정의한 부품들을 조립해 전체 모델을 만든다. 추론 단계에서는 encoder가 입력을 처리하고, decoder가 이전 출력과 encoder memory를 보면서 다음 토큰을 선택한다. 간단한 greedy decoding 예시도 제공된다.
- 해석/요약: 모델 조립부는 가장 지루해 보이지만 중요하다. 논문 속 추상 부품들이 실제 실행 경로로 연결되는 순간이기 때문이다.
Part 2: Model Training
- 의역: 학습 부분은 batch, mask, training loop, optimizer, learning rate schedule, label smoothing을 설명한다. 논문 성능은 구조만으로 나온 것이 아니라, mask 처리와 최적화 설정까지 포함한 훈련 체계에서 나온다.
- 해석/요약: 초심자가 흔히 놓치는 부분이다. 모델 구조를 이해해도 mask를 잘못 만들면 결과는 망가진다. 이 글은 바로 그 실무적 함정을 보여준다.
A First Example / Synthetic Data
- 의역: 문서는 간단한 synthetic copy task로 모델이 입력을 그대로 출력하는 문제를 학습시킨다. 작은 예제로 전체 학습 루프와 decoding이 실제로 작동하는지 확인한다.
- 해석/요약: 이 부분은 장난감이지만 무시하면 안 된다. 복잡한 번역으로 가기 전에 작은 세계에서 모델이 숨을 쉬는지 확인하는 단계다.
Part 3: A Real World Example / Results
- 의역: 실제 번역 데이터 로딩, iterator 구성, 학습 실행, 결과 확인으로 넘어간다. 이후 BLEU 결과와 attention visualization을 제시해 모델이 어떤 단어 관계에 집중하는지 보여준다.
- 해석/요약: 마지막 시각화는 모델 내부를 완전히 설명하지는 못한다. 다만 attention head들이 문장 안의 관계를 나눠 보는 듯한 장면을 제공한다. 해석 가능성의 약속이면서 동시에 유혹이다.
Conclusion
- 의역: 문서는 Transformer 구현의 주요 부품을 정리하고, 독자가 논문과 코드를 함께 읽을 수 있도록 마무리한다.
- 해석/요약: 이 자료의 가치는 쉬운 요약이 아니라 대응표다. 논문 문장 하나가 코드 어느 줄의 책임이 되는지 연결해 주는 데 있다.
원문 도식/이미지 해설
출처: Sasha Rush 외, The Annotated Transformer. 원문 페이지가 일부 이미지를 별도 URL 없이 base64로 내장하므로, Obsidian/Quartz 표시를 위해
AI/Assets/Original/에 추출해 보존했다.
원문 내장 이미지 1 - Transformer architecture

- 해설: 원논문 Figure 1에 해당하는 encoder-decoder 구조다. 왼쪽 encoder는 self-attention과 feed-forward를 반복하고, 오른쪽 decoder는 masked attention까지 포함한다. 논문 그림과 코드 클래스가 어떻게 연결되는지 보는 것이 핵심이다.
원문 내장 이미지 2 - Scaled dot-product attention

- 해설: Query와 Key의 행렬곱, scale, optional mask, softmax, Value와의 행렬곱으로 이어지는 attention의 계산 순서를 보여준다. 이 그림은 “어디를 볼 것인가”가 사실 매우 기계적인 행렬 연산으로 구현된다는 점을 드러낸다.
원문 내장 이미지 3 - Multi-head attention

- 해설: 여러 개의 scaled dot-product attention을 병렬로 수행한 뒤 concat하고 linear layer로 합치는 구조다. 한 번의 시선이 아니라 여러 관점의 시선을 병렬로 만든다는 뜻이다.
원문 내장 이미지 4 - BLEU 결과 표

- 해설: Transformer가 당시 번역 과제에서 기존 모델보다 높은 BLEU를 낮은 학습 비용으로 달성했다는 결과 표다. 구조가 우아하다는 것만으로는 충분하지 않고, 결국 실험 결과라는 큰 타자의 승인 도장을 받아야 한다.
비전공자용 독해 포인트
개발 경험이 많지 않다면 전체 코드를 완전히 이해하려 하지 않아도 된다. 먼저 다음 대응만 보면 된다.
논문 개념 → 코드 부품
self-attention → attention 함수
multi-head attention → 여러 attention head를 병렬 계산하는 모듈
positional encoding → 위치 정보를 embedding에 더하는 부분
encoder/decoder stack → 같은 층을 여러 번 쌓은 구조코드를 읽을 때는 “정확히 실행할 수 있느냐”보다 “논문 속 개념이 어느 코드 덩어리에 대응하는가”를 보는 편이 좋다.
다음에 연결되는 항목
- Attention Is All You Need - Transformer 출발점: 이 자료가 해설하는 원논문.
- Scaling Laws for Neural Language Models - 스케일링 법칙: Transformer류 모델이 커질 때 나타나는 성능 변화의 경험 법칙.
공개용 판단
이 노트는 원문 전체나 코드를 복제하지 않고, 공개 출처 링크·원문 이미지 참조·자체 설명용 도식 및 비전공자용 독해 가이드를 정리한다.