[논문리뷰] Attention is All you Need

Changh2·2025년 3월 19일
0

논문리뷰

목록 보기
2/4

Attention is All you Need 논문을 기반으로 작성되었습니다.

[Background Info]

seq2seq 이란?

sequence-to-sequence 모델은 한 시퀀스를 다른 시퀀스로 변환하는 작업을 수행하는 딥러닝 모델로,
주로 자연어 처리(NLP) 분야에서 활용되며 Sequence Transduction의 대표 기법이였음
인코더(Encoder)디코더(Decoder)라는 모듈을 갖고있기에 Encoder-Decoder 모델이라고도 부름.

  • 인코더
    - 일반적으로 RNN, LSTM 등의 순환 신경망 구조를 사용하여 입력 시퀀스를 고정 길이의 벡터로 변환하는 역할을 수행함

  • 디코더
    - 인코더의 출력인 고정 길이의 벡터를 기반으로 원하는 출력 시퀀스를 생성하는 역할을 수행함


ex) RNN(LSTM)을 기반으로한 seq2seq의 예시

[RNN 기반 seq2seq 모델의 단점]

  • LSTM이 RNN의 장기 의존성 문제(long-term dependency)를 개선시켰지만,
    그럼에도 초반 입력 정보가 사라지는 문제(vanishing gradient problem)가 완전히 해결되지 않음
  • 입력 시퀀스를 순차적으로 처리해야 하므로 병렬 연산이 불가능함!

위의 예시들과 다르게, "Attnetion is All you Need" 논문에서 제시한 Transformer
인코더와 디코더의 구조에 RNN을 사용하지 않고, (Self-AttentionFFN)으로만 이룸으로써
모든 토큰을 동시에 처리하므로 병렬 연산이 가능하고,
문장 전체에서 중요한 정보를 선택하므로 효과적으로 장기 의존성을 처리함!


1. Introduction

  • 기존의 sequence transduction(seq2seq) 모델들은 RNN 혹은 CNN에 의존함.
  • RNN 모델은 입력시퀀스의 각 심볼(단어)을 시간 단계에 따라 "하나씩" 처리
    (sequential computation) --> 병렬화가 어려움
  • RNN을 배제하고, Attnetion 메커니즘을 통해 인코더, 디코더를 구성하면 최고의 성능을 낼 수 있음
  • Attnetion은 입력, 출력 시퀀스에서 위치와 상관없이 정보를 참조할 수 있도록 설계됨
  • 여러 기계 번역에서 높은 성능을 달성해 *SOTA(State Of The Art)를 갱신함.

* SOTA: 현재까지 가장 뛰어난 성능을 보인 기술 혹은 모델


2. Background

  • ByteNet, ConvS2S 같은 기존 연구들이 sequential coputation을 줄여서 모델의 병렬성을 높이고 입력과 출력의 모든 위치에서 병렬 연산을 수행할 수 있도록 했음
  • 하지만 각각의 연구에서 한계가 있었음
  • Self-Attention하나의 시퀀스 내에서 서로 다른 위치를 연결하는 어텐션 메커니즘임
    --> 문장 전체의 모든 단어 간 관계를 고려하면서 문장을 표현할 수 있음
  • 이를 이용한 Transformer는 기존의 RNN/CNN을 사용한 seq1seq 모델과 달리, 온전히 Self-Attention을 기반으로 동작하는 최초의 모델

3. Model Architecture

Transformer는 기존 seq2seq 모델의 Encoder-Decoder 구조를 따르지만, 내부 구조를 다르게 구성함
>> RNN 구조 없이 Self-Attention + Fully Connected Layers 로만 구성됨


3.1 Encoder and Decoder Stacks

위 사진과 같은 구조를 갖는데, 인코더와 디코더 모두 총 6개의 동일한 Layer를 갖고, 그 중 하나를 보이면 Figure 1과 같은 구조를 보임
>> 동일한 레이어를 반복함으로써 모델의 표현력과 학습 능력을 향상시킬 수 있음

인코더

  • 인코더의 각 레이어는 Multi-Head Self-AttentionFFN으로 이루어져 있는데,
    *Residual Connection(잔차 연결)을 사용하여 각 서브레이어의 출력을 더한 후 Layer Normalization(레이어 정규화)를 적용함 --> LayerNorm(x+Sublayer(x))LayerNorm(x + Sublayer(x))
  • Resudial Connection을 용이하게 하기 위해 임베딩 레이어와 서브레이어의 출력의 차원은 동일하게 512로 설정

*Residual Connection: 입력값과 출력값을 더해 학습을 돕는 기법

디코더

  • 대부분 인코더와 동일하지만,
    디코더엔 첫번째 서브레이어로 Masked Multi-Head Self-Attention이 있음
  • 이는 미래 단어를 미리 볼 수 없도록 마스킹을 적용한것!

3.2 Attention

>> Query와 Key-Value 쌍을 입력으로 받아 출력을 생성하는 함수라고 정의할 수 있음 (모두 벡터값)
>> 즉 , 입력(Query)과 관련성이 높은 Key-Value를 찾아내어, 그 정보를 가중치를 반영한 합으로 출력

3.2.1 Scaled Dot-Product Attention

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V) = softmax(\frac {QK^T}{\sqrt d_k} )V

Query와 Key의 내적을 구하여 유사도를 구하고 (MatMul)
Gradient Vanishing을 방지하기 위해 스케일링(dk\sqrt d_k로 나눠주기) 적용 (Scale)
softmax 적용하여 유사도를 확률 분포 형태로 변환 (SoftMax)
softmax에서 구한 가중치를 각 Value에 곱해 최종 출력 계산 (MatMul)

Additive Attention과 Dot-Product Attention 두 종류가 있는데 Transformer에선 Dot-Product Attention을 사용!
>> Additive는 *FFN을 사용하여 유사도를 계산하기에, Dot-Product가 훨씬 빠름

*FFN: Feed-Forward Neural Network


3.2.2 Multi-Head Attention

MultiHead(Q,K,V)=Concat(head1,...,headh)WOMultiHead(Q,K,V) = Concat(head_1, ... , head_h)W^O
where  headi=Attention(QWiQ,KWiK,VWiV)where\; head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)

여러 개(8개)의 Attention을 병렬로 수행하여 정보를 더 풍부하게 학습할 수 있도록 함

head는 독립적으로 수행되는 Attention 연산의 단위를 말한다!
각 head 에서는 서로 다른 학습된 가중치 WQ,WK,WVW_Q, W_K, W_V 를 통해 Query, Key, Value를 반환함
h개의 head 출력을 결합(Concatenation)한 후, 최종적으로 하나의 가중치 WOW^O를 적용하여 출력을 생성

Q,K,VQ, K, V 는 어디서 오는가?

Q=XWQ,K=XWK,V=XWVQ=XW_Q,\quad K=XW_K,\quad V=XW_V

입력인 단어(토큰) 시퀀스는 임베딩 레이어를 거치면 임베딩 벡터로 변환되고,
Positional Encoding이 더해지면 입력 벡터 XX로 전환됨.

이 입력 벡터에 각각의 가중치 행렬 WQ,WK,WVW_Q, W_K, W_V 를 곱하면 그제서야 Q,K,VQ, K, V 가 됨!
(이 작업은 Multi-Head Attention 하단의 Linear 블록에서 이루어짐)

WQ,WK,WVW_Q, W_K, W_V는 Transformer 모델이 처음 시작될 때 무작위로 초기화 되고, 훈련 과정을 거치면서 자동으로 업데이트 됨

Q,K,VQ, K, V 각각의 역할

  • QQ = Query: 현재 단어가 "어떤 단어를 참고해야 하는지" 결정하는 역할
  • KK = Key: 각 단어가 자기 자신을 설명하는 정보
  • VV = Value: 최종적으로 참고할 정보

즉, Query와 Key를 비교해서 "어떤 단어를 참고해야 하는지"를 결정하고
실제 정보는 Value에서 가져오는 것!


3.2.3 Applications of Attention in our Model

1. 인코더-디코더 Attention

  • QQ값은 디코더의 이전 레이어에서 가져오고, K,VK, V값은 인코더의 최종 출력에서 가져옴
  • 디코더가 인코더의 정보를 참고하며 출력 시퀀스를 생성할 수 있도록 함
  • seq2seq 모델의 context vetor의 역할과 유사함

2. 인코더의 Self-Attention

  • Q,K,VQ, K, V값 모두 인코더의 이전 레이어에서 가져옴
  • 각 토큰이 인코더 내에서 다른 모든 토큰과 정보를 공유할 수 있도록 함.
  • 입력 문장에서 단어들 간의 관계를 학습

3. 디코더의 Self-Attention

  • Q,K,VQ, K, V값 모두 디코더의 이전 레이어에서 가져옴
  • 미래 단어를 보지 않기 위해 Masking이 적용됨

3.3 Position-wise Feed-Forward Networks

Self-Attention을 거친 후, 각 단어의 표현을 정제하고 비선형성을 추가하는 역할
선형 변환, ReLU 활성화, 선형 변환으로 이루어짐

FFN(x)=max(0,xW1+b1)W2+b2FFN(x) = max(0, xW_1 + b1)W_2 + b_2

첫번째 선형 변환에서 더 큰차원으로 변환하고,
ReLU를 통해 비선형성을 추가해 학습 능력을 강화,
두번째 선형 변환에서 다시 원래 차원으로 축소시킴


*전체 스키마*


3.4 Embeddings and Softmax

임베딩레이어에서 입력 토큰 시퀀스를 벡터로 임베딩할때 사용하는 가중치 행렬과,
최종 출력을 위한 softmax 이전의 선형 변환에서 쓰이는 가중치 행렬은 같음.

>> 즉, 가중치를 공유함(Weight Sharing)으로써 성능을 올릴 수 있었음


3.5 Positional Encoding

순서 정보를 처리하는 방법인 Positional Encoding이 왜 필요한가?

기존의 RNN 기반 모델은 입력 토큰들의 순서를 자연스럽게 반영할 수 있었으나,
Self-Attention을 사용해 문장을 한 번에 병렬처리하는 Transformer는 단어의 순서 정보가 없음

>> 문맥을 제대로 이해하기 위해 Positional Encoding을 통해 순서를 인식하도록 함!

자세한 내용은 트랜스포머 파헤치기 - Positional Encoding 참고!


4. Why Self-Attention

왜 Self-Attention을 사용하는가?
>> 연산 복잡도, 병렬화, 장거리 의존성 학습 능력 때문

  • Self-Attention은 문장의 모든 단어를 한번에 병렬처리하여 학습하기때문에 Sequential Operations가 O(1)이고, 그렇기에 O(n)인 RNN보다 훨씬 빠르게 학습 가능!
  • Maximum Path Length란 입력 문장의 단어 간 정보를 전달하는 데 필요한 최단 거리(레이어 수)를 말하는데, Self-Attention은 모든 단어가 한 번에 연결되기에 O(1)이고, 장거리 관계를 쉽게 학습 가능

게다가, Attention의 head들이 각각
어떤 head는 문법적 관계, 어떤 head는 의미적 관계를 학습하는 것이 관찰됨
>> 모델의 해석 가능성을 높임 (Explainable AI)


5. Training

5.1 Training Data and Batching

WMT 2014 데이터셋 (영어-독일어, 영어-프랑스어) 사용
각각의 훈련 배치는 약 25,000개의 소스 토큰과 25,000개의 타겟 토큰을 포함함

5.2 Hardware and Schedule

1대의 머신에서 8개의 NVIDIA P100 GPU를 사용해 훈련
Basic Model은 약 12시간 훈련시키고, Big Model 은 약 84시간 훈련시킴

5.3 Optimizer

옵티마이저로 학습률 스케줄링(Learning Rate Schedule)을 적용시킨 Adam을 사용함.

lrate=dmodel0.5×min(step_num0.5,step_num×warmup_steps1.5)lrate = d_{model}^{-0.5}\times min(step\_num^{-0.5}, step\_num\times warmup\_steps^{-1.5})

모델의 차원(dmodeld_{model}=512)을 기반으로 학습률의 기반 크기를 조정
초반(warmup_stepwarmup\_step=4000)에는 학습률을 선형 증가시키고 (step_num×warmup_steps1.5step\_num\times warmup\_steps^{-1.5})
warmup_stepswarmup\_steps 이후에는 학습률을 역제곱근으로 감소 (step_num0.5step\_num^{-0.5})

5.4 Regularization

과적합 방지/일반화 성능 향상을 위한 정규화로 Dropout과 Label Smoothing 사용


6. Results

6.1 Machine Translation

(*BLEU: 기계 번역 결과와 사람이 직접 번역한 결과가 얼마나 유사한지 비교한 점수)

English-Deutsch 성적을 보면, 이전 SOTA 모델보다 *BLEU 점수가 2.0 이상 높음
English-French 성적을 보면, 이전 SOTA 모델과 BLEU가 비슷하거나 높지만,
훈련 비용이 기존 SOTA 모델 대비 1/4 수준으로 낮음

훈련 비용 = 훈련에 사용된 연산량 = FLOPs(Floating Point Operations)
FLOPs = 훈련시간 x GPU 개수 x GPU의 단정밀도 연산량

모델의 안정성(일반화성능)을 위해 체크포인트 평균(Checkpoint Averaging) 기법을 사용함.
Base 모델은 마지막 5개 체크포인트를, Big 모델은 20개 체크포인트를 평균함

6.2 Model Variations

(A) Attention의 head 개수 변화
(B) Attention의 dkd_k (Key 차원) 감소
(C) 모델 크기 증가 --> 클수록 성능 좋음
(D) Dropout 적용 여부
(E) Positional Encoding 변경

sinusoidal encoding = sin/cos 기반 
learned positional encoding = 학습된 벡터

7. Conclusion

Transformer는 RNN 구조가 없는, 온전한 Self-Attention를 기반으로 하는
첫번째 Sequence Transduction 모델임
병렬 연산으로 인해 학습 속도가 크게 향상되었고, 번역에서 SOTA를 달성함

다른 입출력 Modality로 확장될 수 있음
ex) Vision Transformer


profile
Shoot for the moon! 🔥

0개의 댓글