OverView
https://arxiv.org/abs/1706.03762
- 기존의 RNN이나 CNN 구조 없이 오직 attention 매커니즘만으로 시퀀스 간의 의존성을 학습하는 transformer 모델을 제안한 논문
- Self-Attention을 통해 문장 내 단어 간의 관계를 한 번에 파악함으로써 장기 의존성 문제를 효과적으로 해결한 것이 핵심 아이디어
Abstract
기존 시퀀스 변환 모델
- 인코더와 디코더를 포함하는 복잡한 순환신경망(RNN) 기반
- 합성곱 신경망 기반
- [SOTA] 어텐션 메커니즘을 통해 인코더와 디코더를 연결하기도 함
성능
- WMT 2014 영어-독일어 번역 작업
- 28.4 BLEU 달성 (기존 + 2BLEU)
- 8개의 GPU에서 3.5일동안 훈련한 후 41.8의 새로운 단일 모델 최고 수준의 BLEU 점수 확립
- 다른 작업에도 잘 일반화 됨(constituency parsing)
1. Introduction
기존의 모델과 한계점
- 순환 신경망 RNN, LSTM, GRU
→ 언어 모델링 및 기계 번역과 같은 시퀀스 모델링 및 변환 문제에서 최첨단 접근 방식으로 확고히 자리 잡음
- 순차적인 특성으로 인해 훈련 예제 내 병렬화 불가능
→ [P] 시퀀스 길이가 길어질수록 메모리 제약 조건으로 인해 예제 간의 배칭(batch size) 제한
→ [S] factorization tricks + condition computation을 통해 계산 효율성 및 성능 향상
- 하지만, 여전히 순차적 계산의 근본적인 제약은 여전히 남아 있음
Attention 매커니즘의 등장
- 입출력 시퀀스에서 거리에 무관하게 종속성 모델링 가능
→ 다양한 시퀀스 작업에 필수적인 구성요소
- 대부분, RNN과 함께 사용 됨
- 순환을 완전히 제거하고 어텐션만으로 ‘입력 - 출력’ 간 전역 종속성을 학습하는 transformer
- 병렬화에 유리 + 8개의 P100 GPU에서 12시간 학습만에 기계 번역에서의 SOTA 달성
2. Background
CNN기반의 시퀀스 모델
Extended Neural GPU, ByteNet, ConvS2S : RNN의 순차 연산을 줄이기 위해 CNN을 기본블록으로!
- 입력/출력 위치 전체에 대해 병렬로 hidden representation 계산 가능 BUT, 두 위치 사이 거리가 멀수록 신호 연결에 필요한 연산 수 증가
- ConvS2S: 선형적 증가 (입력이 증가하는 비율과 결과가 증가하는 비율이 일정한 “직선적인” 성장)
- ByteNet: 로그 증가 (입력이 증가하더라도 결과의 증가 속도가 점점 느려지는 “증가율 둔화”)
- 일정한 수의 연산으로 줄어듦 but, 어텐션 가중치가 적용된 위치의 평균화로 (P)유효 해상도 감소
→ 3.2절 Multi-Head Attention으로 상쇄
Self-Attention
- 한 시퀀스 내 서로 다른 위치를 연결해 표현을 계산하는 매커니즘
- 독해, 요약, 텍스트 함의, 문장 표현 학습 등 다양한 작업에서 성과 입증
- End-to-End memory networks
- 시퀀스 정렬된 RNN 대신, self-attention 메커니즘 기반
- 간단한 언어 질의 응답 및 언어 모델링 작업에서 우수한 성능
즉, Transformer는 RNN, CNN에 전혀 의존하지 않고, self-attention만으로 입출력 표현을 학습한 최초의 모델
3. Model Architecture
기존 신경 시퀀스 변환 모델
- 대부분 인코더-디코더(encoder-decoder)구조 채택
- 인코더: 입력 심볼 시퀀스 (x1, ,,, , xn) → 연속 표현 시퀀스 (z1, ,,, zn)로 변환
- 디코더: 인코더의 표현 z를 바탕으로 출력 심볼 시퀀스 (y1, ,,, ym) 하나씩 순차적으로 생성
- 새로운 심볼 생성할 때, 이미 생성된 심볼들을 추가 입력으로 활용
- 인코더-디코더 전체 구조는 동일하게 유지

- 단 인코더, 디코더 내부 구성 요소를 self-attention + position-wise feed-forward layer로 대체
⇒ 관계 학습(self-attention) + 개별 토큰 변환(FFN) 두 층을 교차로 쌓음
3.1 Encoder and Decoder Stacks
인코더
- 구성: 동일한 레이어 6개 (stack)
- 각 레이어 (2개의 sub-layer)
- Multi-Head Self-Attention
- Position-wise Feed-Forward Network
- Residual Connection + Layer Normalization
- 각 sub-layer 출력: LayerNorm(x+Sublayer(x))
- sub-layer 결과와 입력을 더한 뒤 정규화
- 출력 차원: 모든 sub-layer 및 embedding layer는 d_model = 512
→ residual connection을 용이하기 위함
디코더
- 구성: 동일한 레이어 6개(stack)
- 각 레이어
- Masked Multi-Head Self-Attention - 미래 토큰 참조 금지
- Encoder-Decoder Multi Head Attention - 인코더 출력 참조
- Position-wise Feed Forward Network
- Residual Connection + Layer Normalization: 인코더와 동일하게 적용
- Masking
- 시점 i에서 예측은 반드시 이전 위치 (<i) 출력에만 의존
- auto-regressive 성질을 보장
3.2 Attention
Attention function
3.2.1 Scaled Dot-Product Attention
입력
- 쿼리 Q: 차원 dk
- 내 목적이 뭔지? - 문장구조를 보고 싶어! 에 맞는 걸 하겟다고 하면
- 키 K: 차원 dk
- 문장구조 특징이 담겨있는 벡터로 표현되어 있는거고
- 그걸 내적하면 문장 구조에 대한 목적을 가지고 있는 단어들 간의 유사도를 뽑아냄
- 값 V: 차원 dv
- value는 목적과 관계없이 단어가 임베딩상의 위치
계산과정
1) 쿼리와 모든 키의 내적(dot product) 계산 → 유사도 점수
2) 내적 값을 sqrt(dk)로 나눔 (스케일링): dk 가 커질수록 내적 값이 커져 softmax가 매우 작은 기울기를 갖게 되므로 학습이 어려워짐 → 안정화 필요
3) softmax 적용 → 가중치(확률 분포) 획득
4) 그 가중치로 값 V들의 가중합 → 최종 출력
Attention Fuction
- additive attention

- 단일 hidden layer를 가진 feed-forward network를 사용하여 호환성 함수 계산
- dot-product (multiplicative) attention

- 1/sqrt(dk)의 스케일링 인자를 제외하고 알고리즘 동일 ⇒ additive attention과 dot-product attention 이론적인 복잡성은 유사하지만, dot-product attention은 최적화된 행렬 곱셈 코드를 사용하여 구현 가능 → 빠르고 공간 효율적
성능차이
- dk가 작을 때: additive와 dot-product 성능 비슷
- dk가 클 때: 스케일링 없는 dot-product는 성능 저하 → additive가 더 유리
⇒ Transformer는 스케일링 factor 1/sqrt(dk)를 넣어 안정적으로 학습
3.2.2 Multi-Head Attention
- 단일 어텐션은 입력(Query, Key, Value)을 d_model 차원에서 직접 계산
- 이렇게 하면 표현력은 제한되고, dot-product(내적) 크기가 커지는 문제 발생 → dk,dk,dv 차원으로 서로 다른 학습된 선형 투영을 통해 h번 선형적으로 투영하는 것이 유용하다는 것을 발견
차원축소와 병렬화
- Q, K, V를 각각 서로 다르게 학습된 선형 변환 행렬(WiQ,WiK,WiV)
- 투영 차원 d_k = d_v = d_model / h
- Base 모델: d_model = 512, h = 8 → d_k = d_v =64
⇒ 전체 벡터를 여러 “부분 공간(subspace)”로 쪼개 병렬로 attention 수행
병렬 Attention후 결합
- 각 head에서 어텐션 결과(출력값, 차원d_v)를 구한 뒤 Concat(head_1, ... , head_h) - → 최종 출력
⇒ Q, K, V를 여러 부분 공간으로 선형 변환해 병렬 어텐션을 수행하고, 이를 합쳐 최종 출력으로 만드는 방식

3.2.3 Applications of Attention in our Model
1) Encoder-Decoder Attention
- Query: 이전 디코더 레이어 출력
- Key, Value: 인코더 출력(memory)
- 기능: 디코더가 출력 단어를 생성할 때 입력 시퀀스 전체를 참고할 수있도록 함
- 기존의 seq2seq 모델의 encoder-decoder attention 계승
2) Encoder Self-Attention
- Query, Key, Value: 모두 인코더 이전 레이어 출력
- 기능: 입력 시퀀스의 각 위치가 다른 모든 위치와 상호작용 할 수 있음 → 입력 문장 내 단어 간 전역 문맥 학습
3) Decoder Self-Attention
- Query, Key, Value: 모두 디코더의 이전 레이어 출력
- 기능: 디코더 각 위치가 자신 포함 모든 이전 위치를 참고할 수 있음
- masking: 미래 단어로 정보가 흘러가면 안됨
- softmax 입력에서 불법 연결에 해당하는 값을 -무한대로 설정
- auto-regressive 성질 유지
3.3 Position-wise Feed-Forward Networks
구조
- Attention sub-layer 외에, 인코더와 디코더의 각 레이어는 FFN 포함
Feed-Forward sub-layer / Encoder-Decoder Attention sub-layer
- 각 토큰 위치별로 독립적이지만 동일한 방식으로 적용

- 2개의 선형 변환 + ReLU 활성화
- x는 어텐션 결과값, w1을 곱하고 b1 을 더해줌
특징
⇒ 커널크기 1인 2개의 convolution으로 설명
⇒ 입력 및 출력 차원 d_model = 512, inner-layer 차원: d_ff = 2048
→ 즉 512 차원을 2048차원으로 확장했다가 다시 512로 압축 (표현력 강화 목적)
3.4 Embedding and Softmax
1) 입력/출력 임베딩
- 다른 시퀀스 변환 모델과 마찬가지로 입력/출력 토큰을 학습된 embedding layer로 변환
2) 출력 예측
- 디코더의 출력을 학습된 선형 변환 + softmax를 통해 다음 토큰 확률 분포로 변환
3) 가중치 공유
- 입력 임베딩, 출력 임베딩, softmax 직전 선형 변환의 가중치 행렬 공유
4) 스케일링
- Embedding 벡터에 sqrt(d_model)을 곱해 스케일 조정
- 초기화시 임베딩 벡터 크기가 너무 작아지는 것을 방지하고 안정적 학습 유도하기 위함
3.5 Positional Encoding
P
- Transformer는 RNN이나 CNN처럼 순차 구조가 없음
→ 토큰 순서 정보가 사라질 수 있어서 “위치정보” 주입해야함
S
- 인코더와 디코더 스택 하단의 입력 임베딩에 “positional encodings” 추가
- 임베딩과 동일한 차원인 d_model을 가져서 두 값 합산 가능
- 구현 방법: 1) 학습형 2) 고정형 2가지 有
- 서로 다른 주파수의 사인 및 코사인 함수 사용
4. Why Self-Attention
- Self-Attention vs RNN/CNN 비교정리
- 계산 복잡도
- 필요한 최소 순차 연산 수로 측정되는 병렬화할 수 있는 계산량
- 네트워크에서 장거리 의존성 간의 경로 길이(주요과제)
- 순방향 및 역방향 신호가 통과해야하는 경로 길이
- 길이가 짧을 수록 학습에 쉬움

5. Training
5.1 Training Data and Batching
- 영어-독일어
- WMT 2014 데이터셋 (약 450만 문장 쌍)
- Byte-Pair Encoding, 공유 어휘 37,000개 사용
- 영어-불어
- WMT 2014 데이터셋 (약 3600만 문장 쌍)
- WordPiece, 어휘 크기 32,000 사용
- Batch 구성
- 문장 길이를 기준으로 대략 정렬 후 배치
- 각 배치: 약 25000 source 토큰 + 25000 target 토큰
5.2 Hardware and Schedule
- 하드웨어: NVIDA P100 GPU x 8
- Base 모델
- Step당 약 0.4초
- 100,000 steps 약 12시간 학습
- Big 모델
- step당 약 1초
- 300,000 steps 약 3.5일 학습
5.3 Optimizer
- Adam optimizer
- 베타1 = 0.9, 베타2 = 0.98, 에러 = 10^(-9)
- 학습률

- 초반 warmup 단계(4000 steps): 선형 증가
- 이후: 단계수의 역제곱 비율로 감소
5.4 Regularization
- Residual Dropout
- 각 sub-layer 출력에 dropout 적용 후, sub-layer에 입력 추가 및 정규화
- 인코더, 디코더의 임베딩 + positional encoding 합에도 dropout 적용
- Base 모델 P_drop = 0.1
- Label Smoothing
- els = 0.1
- 모델이 과도하게 확신하지 않도록 → perplexity(복잡)는 다소 높아지지만 정확도 BLEU 향상
6. Result
6.1 Machine Translation

6.2 Model Variations

6.3 English Constituency Parsing
![업로드중..]()
7. Conclusion
- Transformer는 인코더-디코더 아키텍쳐에서 RNN을 완전히 제거하고 multi-head self-attention만으로 구성된 최초의 sequence transduction 모델 제안
- Transformer를 텍스트 말고 modality에 확장해고 싶고, 대규모 입출력을 효율적으로 할 수 있도록 하고 싶으며, 더 병렬적으로 하고 싶다
- 본 논문은 단순히 새로운 모델을 제안한 것을 넘어 복잡한 구조보다 "관계(attention)"가 더 중요하다는 패러다임의 전환을 보여줬다.
- 데이터 간의 연결성과 맥락 이해의 중요성을 강조한 점이 인상적이었던 것 같다.