[ Paper Review ] Attention is all you need

치즈·2022년 3월 15일
0

[논문 스터디]

목록 보기
1/2

[주저자] Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017)

[기록] 22.02.26 ~ 22.03.08

[옮김] 22.03.15

1. Introduction

RNN (Recurrent Neural Network), LSTM (Long Short-Term Memory), GRU (Gated Recurrent Neural network)는 시퀀스/언어 모델링 및 기계 번역 등과 같은 transduction 문제에 대한 최첨단 접근법이다.

Recurrent model에서는 input과 output의 sequence를 토큰화해 계산을 진행한다. 각 step에 따라서 position을 정렬시켜서 tt번째 step의 input과 이전 단계 hidden state인 ht1h_{t-1}를 input으로 받아 hth_t를 생성해낸다. 이렇게 ‘단계적’인 특성은 훈련과정에서의 parallelization을 배제시키는데, 이는 시퀀스 길이가 길어지면 길어질수록 배치화를 제한해버린다는 큰 문제를 야기한다.

어텐션 메커니즘은 input과 output 시퀀스 간의 거리와 관계없이 dependency 모델링을 가능하게 해준다. 대체로 몇 가지 경우를 제외하고는 거의 recurrent network와 함께 사용된다.

이 논문에서는 recurrence를 피하고 전적으로 attention에만 의존하는 Transformer를 제안한다.

2. Background

CNN (Convolutional Neural Networks) 모델들, 예를 들어 ConvS2S, ByteNet과 같은 모델들에서는 두 임의의 input과 output position에서의 신호를 연결시키기 위해 필요한 계산 수가 position 간 거리에 따라 CovS2S는 linearly, ByteNet에서는 logarithmically하게 증가한다. 따라서 이 distance가 커질수록 dependency를 학습하기 어려워지게 된다.

그러나 Transformer에서는 거리에 따라 계산 횟수가 증가하는 CNN과는 달리, 상수 번의 계산만이 필요하다.

Self-attention (or intra-attention)은 한 시퀀스의 representation을 계산하기 위해 단일 시퀀스 내의 서로 다른 position을 관련시킨다. 이 메커니즘은 reading comprehension, sentence representation 등에서 사용된다.

End-to-end memory network는 recurrent attention mechanism을 기반으로 하며, 간단한 문장형 질문에 답하는 문제에 사용된다.

그러나 Transformer는 앞서 언급되었듯, RNN,CNN을 사용하지 않고 전적으로 self-attention에만 의존한다.

3.1. Model Architecture

신경망 기반 시퀀스 변형 모델(Neural Sequence Transduction Model)들은 대체로 encoder-decoder 구조를 가진다. encoder는, input sequence (x1,...,xn)(x_1, ... , x_n)(z1,...,zn)(z_1, ... , z_n)을 output으로 mapping하고, decoder는 (z1,...,zn)(z_1, ..., z_n)을 받아 (y1,...,ym)(y_1, ... , y_m)을 output으로 생성한다. 그리고 매 단계 auto-regressive하다. “auto-regressive하다”는 것은 이전에 생성된 symbol을 additional input으로 삼아, 다음 symbol을 생성할 때에 사용하는 것을 의미한다.

Transformer는 전반적으로 이런 구조를 따르되, self-attention layer를 encoder에, fully connected layers를 decoder에 각각 쌓아 사용한다.

3.1.1. Encoder

  • 본문에서는 N=6N=6인 동일한 층으로 encoder를 구성했다. 각 층에는 2개의 sub-layer를 가지는데, 첫째는, multi-head self-attention, 둘째는 완전연결 feed-forward이다.
  • 2개 sub-layer 주위에 residual connection을, 그리고 layer normalization 진행한다.
  • sub-layer의 output은 LayerNorm(x+Sublayer(x))LayerNorm(x + Sublayer(x))이다. 모든 sub-layer들은 차원을 512차원으로 임베딩, 차원 통일한다.

3.1.2. Decoder

  • Decoder도 마찬가지로 N=6N=6인 동일한 층으로 구성되어 있으며, residual connection → layer normalization 진행하는 것도 encoder와 동일하다.
  • Encoder와 같은 점은 각 sub-layer마다 layer normalization을 진행한다는 점이고, Encoder와는 다르게, 3번째 sub-layer가 존재하는데, 이 층은 encoder stack의 출력에 multi-head self-attention을 수행한다.
  • masking 기법을 통해 이미 알고 있는 output들, 즉 position이 ii보다 작은 output에만 의존하여 순차적으로 결과를 만들도록 한다.

3.2. Attention

Attention 함수는 query와 key-value 쌍 집합을 output으로 mapping하는 함수이다. (query, key, value, output 모두 벡터).

3.2.1. Scaled Dot-Product Attention

Scaled Dot-Product Attention의 input은 dkd_k 차원의 query와 key, dvd_v 차원의 value 벡터이다.

  1. 모든 쿼리와 키를 내적.
  2. 각각을 dk\sqrt{d_k} 로 나누기.
  3. value에 대한 weight을 얻기 위해서 softmax 함수 적용.
  4. 쿼리 집합을 행렬 QQ로, 키는 행렬 K,K, value는 행렬 VV로 packing해서 동시에 어텐션 함수 계산.
Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V

attention function으로 주로 쓰이는 2가지가 additive attention, dot-product attention이다.

scaling factor로 작용하는 1dk\frac{1}{\sqrt{d_k}}의 영향으로, 차원 dkd_k가 작은 값일수록 두 attention function이 유사해지지만, 큰 값일수록 dot product 값이 커지기에 해당 scaling factor를 곱해 스케일을 조정한다.

3.2.2. Multi-Head Attention

dmd_m-dimensional keys, values, queries로 단일 attention function 수행하는 것보다, dk,dk,dvd_k, d_k, d_v 차원에 대해 학습된 keys, values, queries를 hh번 수행하는 것이 효율적이다. 각각의 keys, values, queries를 hh개로 나눈 값들의 attention을 구한 후, concatenate한다. 그리고 한 번 더 linear projection(선형 사영)을 하여 결과벡터를 얻는다.

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

3.2.3. Multi-Head Attention in Transformer

Transformer는 multi-head attention을 3가지 방식으로 사용한다.

  1. encoder-decoder attention layer in decoder

    : 쿼리 = 이전 decoder layer의 output,

    key, value = encoder의 최종 output으로부터 옴

    ⇒ decoder의 모든 position에서 input 시퀀스의 모든 position에 접근 가능해짐.

  2. self-attention layer in encoder

    : value, key, query 모두 이전 encoder의 output으로부터 옴.

    ⇒ 각 인코딩 층의 position이 이전 인코딩 층의 모든 position에 접근 가능해짐.

  3. self-attention layer in decoder

    ⇒ 모든 디코딩 층의 position이 이전 디코딩 층 이전의 모든 position에 접근 가능해짐.

    따라서, auto-regressive property를 보존하기 위해 오른쪽에서의 information flow를 막아야할 필요가 있음.

3.3. Position-wise Feed-Forward Networks

encoder와 decoder의 각 layer들은 각 position별로 각각, 동일하게 적용되는 fully connected feed-forward network가 있다. 이는 2개의 linear transformation과 ReLU를 포함한다. (linear transformation → ReLU → linear transformation)

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

서로 다른 position에 대해 선형 변환이 동일하게 적용되지만, 층간에 서로 다른 패러미터를 사용한다.

3.4. Embeddings and Softmax

  1. learned embeddings

    : input tokens, output tokens들을 dmodeld_{model}차원의 벡터로 변환시킨다.

  2. learned linear transformation, softmax function

    : decoder output을 predicted next-token probabilities로 변환시킨다.

두 임베딩 층과 softmax 이전의 선형 변환에서 동일한 가중치 행렬을 공유하고, 임베딩 층에서는 그 가중치에 별도로 dmodel\sqrt{d_{model}}을 곱한다.

3.5. Positional Encoding

이 모델은 recurrence나 convolution이 없다. 따라서, 이 sequence에서 token들의 상대적/절대적 position에 대한 정보가 필요하다. 그리하여, encoder, decoder의 마지막에 있는 input embedding에 positional encoding을 추가한다. embedding과 마찬가지로, positional encoding도 dmodeld_{model}차원이다.

이 연구에서는 서로 다른 주기의 sin, cos함수들을 사용한다.

PE(pos,2i)=sin(pos/100002i/dmodel)PEpos,2i+1=cos(pos/100002i/dmodel)(pos=position,i=dimension)PE_{(pos, 2i)}=\sin (pos/10000^{2i/d_{model}}) \\ PE_{pos,2i+1} = \cos (pos/10000^{2i/d_{model}}) \\ (pos = position, i = dimension)

이 연구에서는 모델이 훈련 동안 보았던 최대 길이보다도 더 긴 시퀀스에 대해서도 추론할 수 있기에 sinusoidal version을 채택한다.

4. Why Self-Attention?

3가지 요소에 따라서 셀프 어텐션을 고려해본다.

  1. 레이어 당 총 계산 복잡도
  2. parallelized될 수 있는 계산량 (=필요한 sequential operation 최솟값)
  3. 네트워크 내부의 long-range dependencies 간 경로 길이

(input, output 시퀀스에서의 position 조합 간의 경로가 짧을수록 long-range dependencies를 학습하기가 쉬워진다.)

nn = 시퀀스 길이, d=d= 임베딩 차원이라고 할 때에,

if n<dn<d :

  • 층당 계산복잡도 (Complexity per Layer) : self-attention [O(n2d)][ O(n^2 \cdot d)]가 Recurrent [O(nd2)][O(n \cdot d^2)]나 Convolutional [O(knd2)][O(k\cdot n\cdot d^2)]에 비해 좋다.
  • Sequential Operations : self-attention [O(1)][O(1)]가 상수, Recurrent [O(n)][O(n)]는 선형복잡도를 가지며, self-attention이 Recurrent보다 더 좋다.
  • Maximum path length : self-attention [O(1)][O(1)]는 문장 내 모든 단어에 한 번만 접근하기 때문에 상수 복잡도를 가지기에, Recurrent [O(n)][O(n)], Convolutional [O(logk(n))][O(\log_k(n))]보다 좋다.

시퀀스 길이가 임베딩 차원보다 작은 경우가 대부분이기 때문에 3가지 요소를 모두 확인하더라도, self-attention의 효율이 좋음을 확인할 수 있게 된다.

매우 긴 시퀀스에 대해서는, 즉, nn이 커질 때에는 중심 단어 기준으로 주변 rr 개 단어만 확인하는 self-attention restricted를 활용해준다. 이 경우, path length의 최대 길이는 O(n/r)O(n/r)로 증가하게 된다.

  1. Training과 6. Result는 생략합니당

7. Conclusion

이 연구에서는 전적으로 attention에 의존해 multi-headed self-attention layer를 사용한 Transformer 모델을 제안한다. 번역과 같은 업무에서 해당 모델이 기존 recurrent나 convolutional 층을 사용한 구조들보다 성능이 좋음을 확인했다.

[ Q. Transformer모델의 단점은 뭘까? ] ⇒ 읽어보면 좋은 논문 “Relational inductive biases, deep learning, and graph networks”

[ 다음 논문 ] BERT

profile
차근차근 배워나가요

0개의 댓글