본문 바로가기
AI

[논문리뷰]Attention Is All You Need

by Reodreamer 2022. 9. 20.
반응형

이번 포스트는 이제는 NLP뿐만 아니라 딥러닝 전반에 유용하게 사용되고 있는 attention에 대해 다뤄보고자 한다. 


Abstract

주요한 sequence transduction 모델들은 인코더와 디코더를 포함하는 복잡한 RNN이나 CNN에 기반한다. 최고의 성능을 자랑하는 모델들은 attention mechanism을 이용해 인코더와 디코더를 연결한다. 이 논문에서는 recurrnece와 convolutions를 사용하지 않고 attention mechanism에 기반한 새롭고 간단한 모델인 Transformer를 소개한다. 이 모델은 2개의 기계번역 실험에서 더 parallelizable 하고 학습을 위한 시간도 크게 단축하면서 번역의 질은 더 좋은 것을 보인다.

 

 

1. Introduction 

RNN, LSTM, GRU는 sequence modeling과, 언어 모델, 기계번역에서 SOTA 한 성능을 기록하는데 중요한 접근법을 제시했다.


Recurrent 모델들은 포지션과 연산 시간에서 step을 맞춰가며 은닉 상태인 $h_t$, 이전 스텝의 은닉 상태인 $h_t-1$, 그리고 포지션의 입력값이 되는 $t$를 생성한다. 이러한 sequential 한 특성은 training example 내에서 parallelization을 불가능하게 한다. 이는 더 긴 sequence 길이에 있어 치명적인 부분을 야기한다. 최근의 연구에서는 fartorization trick 들과 조건부 연산을 통해 연산적 효율을 크게 증대시켰다. 하지만 여전히 sequentinal 한 연산에 대한 한계점은 남아있다.

 

어텐션 메커니즘은 input과 output에 대한 거리에 영향을 받지 않게 함으로서 강력한 sequence modeling과 transduction 모델의 필수적인 부분이 되었다. 하지만 몇몇의 경우에서 그런한 어텐션 메커니즘이 RNN과 결합되어 사용되기도 한다. 

 

2. Backgrounds

sequential 한 연산을 줄이고자 하는 목표는 Extended Neural GPU, ByteNet, ConvS2S의 근간을 만들었다. 이들은 모두 기본적으로 CNN을 이용하여 input과 output 사이에 parallel 한 hidden representation을 연산한다. 이 모델들에서 ConvS2S에서는 선형적으로, ByteNet에서는 대수적으로 자라는 임의의 input과 output 포지션 간의 거리로부터 신호들을 관련짓는데 많은 연산을 필요로 한다. Transformer에서는 attention-weighted position을 평균 내면서 효과가 감소하더라도 연구팀은 이를 Multi-Head attention으로 해결하며 앞서 언급된 모델들과 달리 일정한 수의 연산을 하게 된다.

 

Intra-attention이라고고 불리는 self-attention은 sequence의 representaion을 연산하기 위해 단일 sequence의 다른 position들을 연관 짓는 어텐션 메커니즘이다. 이는 reading comprehension, abstractive summarization, 등과 같은 다양한 task에 성공적으로 사용되었다. Recurrent 어텐션 메커니즘에 기반한 end-to-end memory network 또한 간단한 질의응답 시스템과 언어 모델에서도 좋은 성능을 보였다. Transformer는 RNN과 CNN을 전혀 쓰지 않고 온전히 self-attention만 활용하는 모델이다.

 

3. Model Architecture

대부분의 신경 시퀀스 변화 모델은 인코더-디코더 구조로 이루어져 있다. 인코더는 입력 시퀀스의 기호적 표현은 연속적 표현으로 매핑한다. 주어진 $z$에 대해선 디코더는 한 번에 한 요소씩 출력 시퀀스의 기호를 생성한다. 각 스텝에서 다음 기호를 생성할 때 이전에 생성된 기호들을 추가적인 기호로 여기는 자동 회귀적이다.

 

트랜스포머는 아래와 같은 모델구조를 가진다. 

3.1 Encoder and Decoder Stacks

인코더 : N = 6개인 identical layer를 쌓은 형태이다. 각각의 layer는 2개의 하위 layer로 구성되어 있다. 첫 번째는 multi-head self-attention mechanism이고, 두 번째는 단순한 position-wise fully connected feed foward network이다. 각각의 두 개의 하위 layer는 residual connection으로 연결되고 이후 layer normalization을 거친다. 이는 각각의 하위 layer의 출력은 LayerNrom($x +$sublayer($x$))로 하위 레이어 자체에 의해 실행되는 함수이다. residual 연결을 사용하기 위해서 모델의 모든 layer 들과, 임베딩 layer들이 차원이 512인 출력을 가져야 한다.

 

디코더 : 디코더 또한 N = 6개인 identical layer를 쌓은 형태이다. 각각의 인코더 layer의 2개의 하위 layer에 추가적으로, 디코더는 세 번째 layer를 추가한다. 이 세 번째 layer는 인코더가 쌓은 출력에 multi-head attention을 수행한다. 인코더와 비슷하게, 각각의 하위 layer에 residual connection을 사용한다. 또한 디코더의 첫 번째 layer를 masked multi-head attention layer로 수정하는데 이는 position $i$가 자기보다 전에 나온 position에서의 출력만 참고하게끔 하기 위해서이다.

 

3.2 Attention 

어텐션 함수는 query, keys, value, output 모두가 벡터일 때, query와 key-value로 구성된 쌍들을 output과 매핑한다고 설명할 수 있다. output은 value의 weighted-sum(가중 합)으로 계산된다. 각각의 value에 주어지는 weight는 query와 이에 상을 하는 키 간의 유사도 혹은 적합성에 의해 결정된다.

 

3.2.1 Scaled Dot-Product Attention

입력은 query, 차원의 key $d_k$, 차원의 value $d_v$로 구성된다. 그리고 query와 key의 모든 내적을 계산하고 각각을 $\sqrt{d_k}$로 나누어 준다. 그리고 softmax 함수를 적용하여 value 들에 대한 weight를 구한다. 실제로는, 행렬 $Q$에 합쳐진 query 들에 대해 attention 함수들을 동시에 적용한다. Key 들과 value들은 각각 행렬$K$와 $V$ 각각 합쳐지고 이 행렬들에 대한 출력을 다음과 같이 계산한다.

가장 많이 쓰이는 attention 함수는 additive attention과 dot-product attention이다. dot-product attention은 앞서 언급된 Scaled Dot-Product Attention에서 scale을 하는 $\sqrt{d_k}$을 제외하면 동일하다. additive attention은 1개의 hidden layer를 가진 feed-forward를 사용하여 compatibility를 틀 계산한다. 이론적으로 둘은 비슷하지만 dot-product attention가 고도로 최정화 된 행렬곱 코드를 사용해 실행되기 때문에 훨씬 빠르고 space-efficient 하다. 하지만 $d_k$가 작을 때는 additive attention의 성능이 더 좋다.

 

3.2.2. Multi-Head Attention

$d_model의 차원에 해당하는 key, value, query를 가지고 singles attention 함수를 실행하는 거보다, query, key, value를 $d_k$, $d_k$,$d_v$에 h 번씩 다르고 학습된 projection을 선형적으로 project(사영) 하는 것이 더 낫다. 그렇게 project된 버저의 query, key, value에 병렬적으로 attention 함수를 적용한다. 그리고 이를 다시 합치고 다시 project 하여서 최종 value를 도출한다.

 

 

Multi-head attention은 서로 다른 position에서의 다른 representaion subspace로부터 결합적으로 정보를 참고하게끔 한다. Single attention에서는 averaging이 이런 접근을 제한한다. 이 연구에서는 h = 8의 parallel attention layer( head)를 설정한다. 각각의 layer는 $d_K$, $d_v$, $d_model$/h =64$를 사용한다. 각 layer의 차원이 줄어들었기 때문에, 완전한 차원을 가진 single-head attention과 연산 비용을 비슷하다.

 

3.2.4 Applications of Attention in our Model

트랜스포머는 multi-head attention을 3가지 방식으로 사용한다.


Encoder-decoder attention layer :

query들은 이전 decoder layer부터 오고 memory key와 value들은 encoder 출력으로부터 온다. 이는 decoder의 모든 포지션에서 입력 시퀀스의 모든 포지션을 attend 할 수 있게 한다. 이것은 seq2seq 모델의 encoder-decoder attention mechanism을 모방한다.

 

encoder의 Self-attention layer:
Self-attention layer의 입력값인 모든 query, key, value는 동일한 이전 encoder의 output으로부터 온다.
각 encoder layer의 position은 이전 encoder layer의 모든 position들을 참고할 수 있다.

 

decoder의 Self-attention layer:

각 디코더 층의 포지션은 현재 포지션을 포함한 이전의 모든 포지션들을 참고할 수 있다. auto-regressive 한성질을 보존하기 위해 leftward information flow을 막아야 한다. (이는 미래 시점의 단어를 볼 수 없도록 하는 것이라고 하는데 이해가 잘되지 않아 더 자세히 찾아봐야겠다) 이를 위해 소프트맥스 함수의 모든 입력값을 음의 무한대로 마스킹 하여 scaled dot-product attention 내부에서 실행한다.

 

3.3. Position-wise  Feed-Forward  Networks

attention sub-layers에 추가로, 인코더와 디코더의 각각의 layer들은 fully connected feed-forward 네트워크를 포함한다. 그리고 이는 각각의 포지션에 따로따로 동일하게 적용된다. 그리고 이는 중간에 ReLU 함수를 적용한 두 개의 선형변환으로 이루어져 있다. 이는 아래의 식으로 표현할 수 있다.

선형변환들이 다른 포지션에 걸쳐 동일하지만, layer에 따라 다른 파라미터를 사용한다. 이는 또 kernel size가 1인 2개의 convolution으로 설명할 수 있다 

 

3.4 Embeddings and Softmax

다른 시퀀스 변환 모델과 같이 연구팀은 학습된 임베딩을 이용해서 입력 토큰과 출력 토큰을 벡터로 변환한다. 그리고 일반적인 선형 변화와 softmax 함수를 통해 디코더의 출력을 다음 토큰의 확률의 예측값으로 변환한다. Transformer에서는 두 개의 임베딩 layer 사이에 동일한 가중치 행렬을 사용한다.

 

3.5 Positional Encoding

Transformer는 RNN이나 CNN을 사용하지 않기 때문에 모델이 시퀀스의 순서를 활용하기 위해서, 시퀀스 내의 토큰들의 상대적이고 절대적인 포지션에 대한 정보를 추가해야 한다. 이를 위해 positional encoding을 인코더와 디코더의 최하 단층의 input embedding에 추가한다. positional encoding은 다른 임베딩과 같이 $d_model$의 차원과 동일한 차원을 가지고 이 때문에 둘의 합이 가능하게 한다.

Transformer는 다른 주기의 sin, cos 함수를 사용한다.

 

4. Why Self-Attention

self-attention과 RNN과 CNN을 비교해 보자. 먼저 self-attention을 사용해야 하는 이유를 정리하면 아래와 같다.

  • layer 별 연산의 복잡도
  • 병렬처리 가능한 계산량
  • 네트워크 안에서 long-range dependency 간의 path length
    • 긴 범위의 dependecy를 학습하는 것이 많은 시퀀스 변환 모델의 주요한 한계점이다. 이러한 dependency를 학습하는데 중요한 요소는 네트워크 내에서 순정파와 역전파의 신호의 길이이다. 입력과 출력 간의 포지션의 조합이 짧을수록 long-range dependency를 더 쉽게 학습할 수 있다.

위의 표를 왼쪽부터 참고하면,
layer 당 복잡도 측면에서 self-attention이 가장 성능이 좋은 것을 확인할 수 있다.
Sequential Operation은 self-attention이 RNN보다 좋은 것을 볼 수 있다.
Maximum Path Length 또한 self-attention이 RNN과 CNN의 성능이 더 좋은 것을 보인다.

추가적으로 self-attention의 설명력이 더 좋다. 개별 어텐션이 다른 task를 수행하는 것을 학습하는 것뿐만 아니라 문장을 결합하거나 구분 짓는 구조와 관련된 것을 확인할 수 있다.


5. Training

5.1 Training Data and Batching

dataset : standard WMT 2014 English-German dataset
batching : 배치별로 25000개의 source 토큰, 25000개의 target token으로 구성

 

5.2 Hardware and Schedule

Hardward :
    8 NVIDIA P100 GPSs

schedule:
    baseline model : 스텝마다 0.4초 소요, 총 100,000스텝(12시간) 학습
    big model : 스텝마다 1초 소요, 총 300,000스텝(3.5일) 학습

5.3 Optimizer

optimizer :

    Adam Optimizer $\beta_1 =0.9$, $\beta_2 =0.98$, $\epsilon =10^-9$
learning rate :

5.4 Regularization

Residual Dropout :

  • sub-layer input에 들어가고 nomarlized 이전 단계에서 각 sub-layer의 출력에 dropout 적용
  • 인코더와 디코더 단의 임베딩의 합과 positional encoding에 dropout 적용
  • Dropout rate = 0.1

Label Smoothing:

  • label smoothing of value = 0.1
  • BLEU 스코어를 개선

 

6. Results

6.1 Machine Translation

Transformer(big)의 BLEU score가 41.8로 다른 모델들과 비교했을 때 더 나은 성능을 보인다. 

 

6.2 Model Variation 

하이퍼 파라미터 변경에 따른 모델 성능을 비교한 실험 결과이다. 

(B)를 보면 attention key의 차원을 줄이면 성능 저하를 야기한다.
(C), (D) 모델이 크면 클수록 성능이 좋은 것을 알 수 있고, Dropout은 overfitting을 방지하는 데 도움이 된다.


6.3 English Constituency Parsing

task-specific 한 튜닝이 부족했음에도 Recurrent Neural Network Grammar 을 제외한 모든 모델의 이전의 성능보다 더 나은 성을 보임 -> 모델이 일반화가 굉장히 잘 된 것을 의미한다.

 

7. Conclusion

이 연구에서 Transformer를 소개했다. 이는 온전히 attention에 기반한 시퀀스 변환 모델로서 인코더-디코더 구조에서 사용하는 recurrent layer를 multi-head-self attention을 대체했다. 번역에서는 지대한 학습 속도의 향상을 보였고 WMT 2014 English-to-German과 WMT 2014 English-to-French translation task에서 SOTA 한 성능을 보였다. Transformer의 활용 분야를 이미지, 오디오, 비디오와 같은 다른 분야에서도 확장할 수 있다.

 

 

 

 

 

반응형

'AI' 카테고리의 다른 글

[논문리뷰]Conditional Generative Adversarial Nets(CGAN)  (1) 2022.09.23
[파이토치] Transform  (1) 2022.09.21
[PyTorch]Dataset과 DataLoader  (1) 2022.09.16
[PyTorch]Tensor-part2  (0) 2022.09.15
[PyTorch]Tensor-part1  (0) 2022.09.14

댓글