Attention Is All You Need 논문 리뷰

송정근·4일 전
post-thumbnail

원 논문: Vaswani, A. et al. (2017).
Attention Is All You Need. NeurIPS 2017.

목차

  1. Introduction
  2. Transformer: 무엇이 달라졌는가
  3. Scaled Dot-Product Attention
  4. Multi-Head Attention과 인코더-디코더
  5. Positional Encoding: 순서는 어떻게 알까
  6. Why Self-Attention
  7. Experiments: 실제로 더 좋았는가
  8. Discussion
  9. Conclusion

1. Introduction: 왜 RNN만으로는 부족했을까

2017년 이전의 기계번역은 RNN, LSTM, GRU 같은 순환 구조가 중심이었다. 이 모델들은 이전 시점의 은닉 상태를 받아 다음 시점의 상태를 계산한다.

ht=f(ht−1,xt)h_t = f(h_{t-1}, x_t)

따라서 t번째 단어를 처리하려면 반드시 t-1번째 계산이 끝나야 한다. 문장 전체를 한 번에 계산할 수 없다는 뜻이다. 시퀀스가 길어질수록 학습 속도와 메모리 사용량 모두에서 불리해진다.

또 하나의 문제는 장거리 의존성이다. 예를 들어 문장 앞부분의 주어와 뒤쪽 동사의 관계를 이해하려면, 정보가 많은 은닉 상태를 거쳐 전달되어야 한다. 이 경로가 길수록 필요한 정보를 잃거나 학습하기 어려워질 수 있다.

기존에도 attention은 사용됐다. 하지만 대부분 RNN 인코더-디코더 위에 붙는 보조 장치였다. 이 논문의 질문은 한 단계 더 나아간다.

RNN을 아예 없애고, attention만으로 시퀀스를 처리할 수 있을까?

저자들의 답이 Transformer다. Transformer는 입력의 모든 토큰 관계를 동시에 계산한다. 따라서 학습 단계에서는 병렬화가 가능하고, 멀리 떨어진 두 토큰도 한 번의 attention으로 직접 연결된다.

RNN
단어 1 → 단어 2 → 단어 3 → ... → 단어 n
          순서대로 계산해야 함

Transformer
단어 1, 단어 2, 단어 3, ... , 단어 n
          서로의 관계를 동시에 계산

필기에 적은 “RNN은 앞 단계가 끝나야 다음 단계를 계산하므로 긴 문장에서 병렬 학습이 어렵다”는 문장이 바로 이 논문의 출발점이다.


2. Transformer: 무엇이 달라졌는가

Transformer는 여전히 인코더-디코더 구조를 사용한다. 차이는 내부 계산 방식이다. RNN을 쌓는 대신 self-attention과 feed-forward network(FFN)를 쌓는다.

2.1 인코더와 디코더의 역할

인코더는 입력 문장 전체를 읽고, 각 토큰이 문맥을 반영한 표현이 되도록 만든다. 디코더는 이 표현을 참고하면서 이전에 생성한 단어를 바탕으로 다음 단어를 한 개씩 생성한다.

입력:  I love machine learning
          ↓
인코더: 각 단어가 다른 단어와의 관계를 반영한 벡터가 됨
          ↓
디코더: <BOS> → 나는 → 기계 → 학습을 → 좋아한다 → <EOS>

원 논문의 기본 모델은 인코더 6층, 디코더 6층을 사용한다.

구성인코더디코더
첫 번째 attentionMulti-Head Self-AttentionMasked Multi-Head Self-Attention
두 번째 attention없음Encoder-Decoder Attention
공통 구성FFN, Residual Connection, Layer NormalizationFFN, Residual Connection, Layer Normalization

디코더의 masked가 특히 중요하다. 번역문을 학습할 때 i번째 단어가 i+1번째 정답 단어를 미리 본다면, 모델은 실제 생성 시에는 사용할 수 없는 정보를 이용하게 된다. 그래서 미래 위치의 attention 점수를 -∞로 만들어 softmax 뒤 가중치가 0이 되게 한다.

디코더가 "나는 기계"까지 생성한 시점

볼 수 있는 토큰:  <BOS>, 나는, 기계
볼 수 없는 토큰:  학습을, 좋아한다

3. Scaled Dot-Product Attention

3.1 Q, K, V는 무엇인가

attention은 Query(Q), Key(K), Value(V) 세 행렬로 계산한다.

  • Query: 지금 무엇을 찾고 싶은가
  • Key: 각 토큰이 어떤 정보와 관련 있는가
  • Value: 실제로 가져올 정보는 무엇인가

현재 토큰의 Query와 모든 토큰의 Key를 비교해 관련도를 얻고, 그 관련도로 Value를 가중합한다.

Attention⁡(Q,K,V)=softmax⁡(QK⊤dk)V\operatorname{Attention}(Q,K,V) =\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V

계산은 다음 순서로 이해하면 된다.

1. QKᵀ
   → 모든 Query와 Key의 유사도 점수

2. √dₖ로 나누기
   → 점수가 너무 커지는 것을 방지

3. softmax
   → 각 Query가 어떤 토큰에 얼마나 집중할지 결정

4. V의 가중합
   → 중요한 토큰 정보를 더 많이 반영한 새 표현 생성

3.2 왜 √d_k로 나눌까

논문의 각주 4는 이 스케일링이 왜 필요한지 설명한다. q, k의 각 원소가 평균 0, 분산 1인 독립 확률변수라고 하자.

q⋅k=∑i=1dkqikiq\cdot k=\sum_{i=1}^{d_k}q_i k_i

그러면 내적의 평균과 분산은 다음과 같다.

E[q⋅k]=0,Var⁡(q⋅k)=dk\mathbb{E}[q\cdot k]=0, \qquad \operatorname{Var}(q\cdot k)=d_k

즉 d_k가 클수록 점곱 결과는 큰 절댓값을 갖기 쉬워진다. 큰 값이 softmax에 들어가면 확률이 한쪽에 지나치게 쏠리고, 작은 확률 쪽의 gradient는 거의 사라진다. √d_k로 나누면 점수의 분산이 대략 1 수준으로 안정된다.

해석

√d_k는 단순한 보정 상수가 아니다. attention이 차원 수가 커져도 너무 빨리 확신하지 않도록 만들어, 학습 가능한 softmax 구간을 유지하는 장치다.


4. Multi-Head Attention과 인코더-디코더

4.1 하나의 attention만으로는 부족한가

한 개의 attention은 하나의 표현 공간에서 토큰 관계를 계산한다. 그런데 문장에는 여러 종류의 관계가 섞여 있다. 어떤 관계는 인접 단어의 결합일 수 있고, 어떤 관계는 주어-동사 관계나 대명사가 가리키는 대상일 수 있다.

Transformer는 Q, K, V를 서로 다른 방식으로 여러 번 투영하고, 각각의 attention을 병렬로 계산한다.

head⁡i=Attention⁡(QWiQ,KWiK,VWiV)\operatorname{head}_i =\operatorname{Attention}(QW_i^Q,KW_i^K,VW_i^V)
MultiHead⁡(Q,K,V)=Concat⁡(head⁡1,…,head⁡h)WO\operatorname{MultiHead}(Q,K,V) =\operatorname{Concat}(\operatorname{head}_1,\ldots,\operatorname{head}_h)W^O

기본 모델에서는 h=8, d_{model}=512, d_k=d_v=64를 사용한다.

입력 표현
  ├─ Head 1: 관계 A를 보는 attention
  ├─ Head 2: 관계 B를 보는 attention
  ├─ ...
  └─ Head 8: 관계 H를 보는 attention
          ↓
    이어 붙인 뒤 한 번 더 선형 변환

해석

멀티헤드는 단순히 attention을 8번 복제한 것이 아니다. 서로 다른 투영 공간에서 관계를 찾게 해, 하나의 가중 평균으로는 놓칠 수 있는 여러 패턴을 동시에 포착하게 한다.

원 논문의 부록 그림은 실제로 일부 헤드가 장거리 의존성이나 대명사 지시 관계처럼 보이는 패턴을 학습한 예를 보여 준다. 다만 attention 시각화만으로 각 헤드의 역할을 완전히 인과적으로 설명할 수 있는 것은 아니다.

4.2 Transformer 안의 attention 세 가지

위치Q의 출처K, V의 출처하는 일
인코더 self-attention이전 인코더 층이전 인코더 층입력 문장 안의 모든 토큰이 서로를 참고한다.
디코더 masked self-attention이전 디코더 층이전 디코더 층현재 위치와 과거 출력만 참고한다.
encoder-decoder attention디코더 층인코더 출력다음 출력 단어를 만들 때 입력의 관련 부분을 찾는다.

필기에서 정리한 세 문장, 즉 “입력 토큰이 서로 참고한다”, “디코더는 과거만 본다”, “출력 단어를 만들 때 입력의 관련 부분을 찾는다”는 위 세 attention을 요약한 것이다.


5. Positional Encoding: 순서는 어떻게 알까

self-attention은 모든 토큰을 동시에 처리한다. 이 자체로는 토큰의 순서를 알 수 없다. 예를 들어 아래 두 문장은 같은 단어를 쓰지만 의미가 다르다.

개가 사람을 물었다.
사람이 개를 물었다.

그래서 Transformer는 토큰 임베딩에 위치 인코딩을 더한다. 원 논문은 서로 다른 주파수의 사인·코사인 값을 사용한다.

PE(pos,2i)=sin⁡(pos100002i/dmodel)PE_{(pos,2i)} =\sin\left(\frac{pos}{10000^{2i/d_{model}}}\right)
PE(pos,2i+1)=cos⁡(pos100002i/dmodel)PE_{(pos,2i+1)} =\cos\left(\frac{pos}{10000^{2i/d_{model}}}\right)
  • pos: 토큰의 위치
  • i: 벡터 차원 인덱스
  • d_model: 임베딩 차원

차원마다 주파수가 달라 위치마다 서로 다른 파형 조합이 만들어진다. 저자들은 이런 구조가 상대적 거리 정보를 학습하는 데도 도움이 될 것이라고 보았다.

해석

Transformer는 순서 정보를 버린 모델이 아니다. RNN처럼 계산 순서에 순서를 숨겨 두는 대신, 위치 정보를 벡터로 명시적으로 제공하는 모델이다.

논문에서는 학습형 위치 임베딩도 실험했고 성능은 거의 같았다. 사인·코사인 방식을 선택한 이유는 학습에서 보지 못한 더 긴 길이에도 외삽할 가능성을 기대했기 때문이다.


6. Why Self-Attention

논문의 표 1은 self-attention, RNN, CNN을 계산량·병렬성·장거리 연결 측면에서 비교한다.

층 종류층당 복잡도순차 연산최대 경로 길이
Self-AttentionO(n²d)O(1)O(1)
RNNO(nd²)O(n)O(n)
CNNO(knd²)O(1)O(log_k n)
제한된 Self-AttentionO(rnd)O(1)O(n/r)
  • 층당 복잡도: 한 층을 계산하는 데 드는 비용
  • 순차 연산: 이전 계산이 끝나야 시작할 수 있는 단계 수
  • 최대 경로 길이: 멀리 떨어진 두 토큰이 서로 영향을 주기까지 거치는 최대 단계 수

RNN과 비교하면

RNN은 O(n)번 순서대로 계산해야 하며, 멀리 떨어진 단어도 O(n) 길이의 경로를 통해 연결될 수 있다. 반면 self-attention은 모든 위치 쌍을 한 층에서 직접 연결하므로 순차 연산 수와 최대 경로 길이가 모두 O(1)이다.

CNN과 비교하면

CNN도 위치별 연산은 병렬화할 수 있다. 하지만 작은 커널 하나로는 먼 토큰을 직접 연결할 수 없다. 여러 층을 쌓아야 하며, 그만큼 경로가 길어진다.

중요한 단서: O(n²)

self-attention이 항상 계산량에서 이기는 것은 아니다. 모든 토큰 쌍을 비교하므로 시퀀스가 아주 길면 n² 비용이 커진다. 논문도 이 한계를 인정하며, 각 토큰이 주변 r개만 보도록 제한하는 local/restricted attention을 이후 과제로 제시한다.

문장처럼 n이 비교적 짧을 때
→ full self-attention의 전역 연결이 유리

문서·음성·이미지처럼 n이 매우 길 때
→ n² 비용이 커져 sparse/local attention 같은 절충이 필요

7. Experiments: 실제로 더 좋았는가

7.1 학습 설정

항목설정
데이터WMT 2014 EN-DE 약 450만 문장쌍, EN-FR 약 3,600만 문장쌍
기본 모델6층, d_model=512, d_ff=2048, head 8개
OptimizerAdam, β_1=0.9, β_2=0.98, ε=10^{-9}
Regularizationdropout 0.1, label smoothing 0.1
기본 모델 학습P100 GPU 8개에서 약 12시간
큰 모델 학습P100 GPU 8개에서 약 3.5일

학습률은 처음 4,000단계 동안 증가했다가 이후 감소한다.

lrate⁡=dmodel−0.5min⁡(step⁡−0.5,step⁡⋅warmup⁡−1.5)\operatorname{lrate} =d_{model}^{-0.5} \min\left( \operatorname{step}^{-0.5}, \operatorname{step}\cdot\operatorname{warmup}^{-1.5} \right)

초기에는 너무 큰 업데이트를 피하고, 이후에는 안정적으로 수렴시키려는 스케줄이다.

7.2 번역 결과

모델EN-DE BLEUEN-FR BLEUEN-DE 학습 비용(FLOPs)
GNMT + RL24.639.922.3 × 10^19
ConvS2S25.1640.469.6 × 10^18
Transformer (base)27.338.13.3 × 10^18
Transformer (big)28.441.82.3 × 10^19

해석

Transformer-big은 영어→독일어에서 28.4 BLEU, 영어→프랑스어에서 41.8 BLEU를 기록했다. 당시 기존의 단일 모델뿐 아니라 영어→독일어에서는 앙상블까지 넘어섰다.

특히 기본 모델의 결과가 중요하다. Transformer-base는 큰 모델보다 훨씬 적은 비용으로도 이전 모델보다 높은 EN-DE BLEU를 기록했다. 이는 성능 향상만이 아니라, RNN의 순차성을 제거한 구조가 실제 학습 효율로 이어졌다는 근거다.

7.3 변형 실험에서 확인한 것

바꾼 요소관찰 결과의미
Head 수1개 헤드는 BLEU 24.9, 8개 헤드는 25.8여러 표현 공간을 보는 것이 유리하다.
모델 크기큰 d_model, d_ff에서 성능 상승모델 용량도 중요하다.
Dropout없으면 성능 하락attention 모델도 과적합을 막아야 한다.
위치 표현사인파와 학습형 임베딩의 결과가 유사위치 정보의 존재가 핵심이며 방식은 하나로 고정되지 않는다.

8. Discussion

8.1 번역 밖에서도 작동하는가

저자들은 영어 구문구조 파싱도 실험했다. 4층 Transformer는 WSJ 전용 학습에서 F1 91.3, 준지도 설정에서 F1 92.7을 기록했다.

이는 Transformer가 기계번역만을 위한 트릭이 아니라, 입력 시퀀스를 구조적 출력 시퀀스로 바꾸는 더 일반적인 구조임을 보여 준다. 다만 표 4에서 생성형 Recurrent Neural Network Grammar는 F1 93.3으로 더 높은 결과를 냈다. 따라서 논문 결과를 “Transformer가 모든 과제에서 최고”라고 읽기보다는, RNN 없이도 여러 시퀀스 과제에서 경쟁력 있는 결과를 냈다고 읽는 편이 정확하다.

8.2 이 논문의 강점

  1. 문제와 해결책이 직접 연결된다. RNN의 순차 계산 문제를 전역 attention으로 정면에서 해결한다.
  2. 구조가 단순하다. attention, FFN, 잔차 연결, 정규화 블록을 반복해 깊이를 늘릴 수 있다.
  3. 실험 근거가 넓다. 번역 성능뿐 아니라 학습 비용, 구조 변형, 다른 과제로의 일반화를 함께 보였다.
  4. 해석의 단서를 준다. 헤드 시각화로 장거리 관계와 대명사 지시처럼 보이는 패턴을 제시했다.

8.3 한계

긴 입력의 비용

full self-attention은 모든 토큰 쌍을 비교하므로 O(n²) 시간·메모리 비용이 든다. 긴 문서나 고해상도 이미지처럼 토큰 수가 큰 문제에서는 이 비용이 핵심 병목이 된다.

생성은 여전히 순차적이다

학습에서는 모든 위치를 병렬로 계산할 수 있다. 그러나 디코더는 이전 출력 토큰을 조건으로 다음 토큰을 만들므로, 추론 단계에서는 여전히 한 토큰씩 생성한다.

attention 가중치가 곧 설명은 아니다

어떤 헤드가 특정 단어를 강하게 본다고 해서, 그 가중치만으로 모델 예측의 원인을 완전히 설명할 수는 없다. 시각화는 좋은 관찰 도구이지만 인과적 증명과는 구분해야 한다.


9. Conclusion: 논문의 핵심 결론

이 논문의 핵심은 “attention을 추가했다”가 아니다. 시퀀스 모델의 기본 계산 단위를 순환에서 전역적인 토큰 관계 계산으로 바꿨다는 점이다.

RNN의 관점
이전 상태를 전달하며 다음 상태를 계산한다.

Transformer의 관점
모든 토큰 관계를 먼저 계산하고,
각 토큰이 필요한 정보를 선택해 가져온다.

Transformer는 다음 요소를 결합한다.

  • QK^T 기반 attention으로 토큰 간 관계를 계산하고
  • √d_k 스케일링으로 softmax 학습을 안정화하며
  • 여러 head로 서로 다른 관계를 병렬로 학습하고
  • positional encoding으로 순서 정보를 제공하며
  • masked decoder로 자기회귀 생성을 유지한다.

그 결과 당시 번역 성능과 학습 효율을 함께 끌어올렸고, 이후 대규모 언어 모델과 Vision Transformer 계열의 기반이 되었다. 동시에 O(n²) attention 비용과 순차적 디코딩은 이후 연구가 계속 해결해 온 핵심 과제로 남았다.

더 생각해 볼 질문

  1. Q, K, V를 모두 같은 입력에서 만들면서도 왜 서로 다른 선형 변환을 쓰는가?
  2. 1/√d_k 스케일링을 없애면 softmax 분포와 gradient는 어떻게 달라지는가?
  3. 디코더 마스크가 없다면 학습 중에는 무엇이 잘못되고, 추론 시에는 왜 문제가 되는가?
  4. 입력 길이 n이 매우 커졌을 때 full attention의 장점과 비용 사이에서 어떤 선택을 할 수 있는가?

참고 자료

profile
기록하며 성장하는 개발자

0개의 댓글