본문 바로가기
공부 끄적끄적/논문리뷰

[X:AI] Transformer; Attention Is All You Need

by yejineee 2023. 3. 23.
Seq2seq의 한계

고정된 크기의 벡터(Context Vector)에 모든 정보를 압축함으로써 발생하는 정보의 손실
Fixed-length vector → 번역시 병목현상 → 긴 문장의 번역시 성능 떨어짐
Attention Mechanism

디코더에서 출력 단어를 예측하는 매 시점(time step)마다, 인코더에서의 전체 입력 문장을 다시 참고
전체 입력 문장을 전부 다 동일한 비율로 참고하는 것이 아닌, 해당 시점에서 예측해야 할 단어와 연관이 있는 입력 단어 부분을 좀 더 집중(attention)해서
양방향 RNN Encoder와 단방향 RNN decoder 사용
Transformer

Attention mechanism 활용
RNN을 사용하지 않고, attention mechanism을 병렬화 시킨 self-attention

 

https://wikidocs.net/24996

 

Sequence Modeling

sequence로부터 또 다른 sequence를 생성하는 task

대표적인 ex) Maqchine Translation, Chatbot 등

 

대부분 Recurrent neural network, LSTM, GRU가 주축으로 사용

 

Recurrent model은 sequence 순으로 데이터가 입력되는데, 이전 데이터의 hidden state $h_t$가 다음 데이터의 hidden state $h_{t+1}$를 구할 때 사용

⇒ 어떠한 시점 $t$에서 구한 hidden state $h_t$는 그 전 sequence들 $(1,2,...,t-1)$의 정보를 함축하고 있음

 

문제점

sequence position t에 따라 순차적으로 입력에 넣어줌

⇒ 긴 sequence 길이를 가지는 데이터를 처리할 때, memory와 computation에 많은 부담 발생

∴ context vector의 maximum length를 제한해야 함

긴 sequence 데이터를 처리해야할 때, 제한된 크기의 vector로 모든 정보를 담아내야하기 때문에 정보의 손실 증가, 이에 따라 성능의 병목현상 발생

RNN의 고질적 문제인 gradient vanishing 문제도 존재

 

Attention Mechanism

paper| https://arxiv.org/abs/1409.0473

 

https://arxiv.org/pdf/1409.0473.pdf

input or output 데이터에서 sequence distance에 무관하게 서로 간의 의존성(dependency)를 모델링

(위 사진| franch와 english 번역시, attention 사용할 때 correlation matrix)

딥러닝 모델들은 파라미터가 많아서 해석하기 힘든데 이런식으로 시각화가 가능

 

모델이 다음 target 단어를 생성하는 것과 관련있는 정보에 집중할 수 있게 함

고정된 크기의 vector에 input값의 정보를 담아야했던 기존 seq2seq과는 달리 문장의 길이에 robust함


Attention Is All You Need

paper| https://arxiv.org/abs/1706.03762

code| https://github.com/tensorflow/tensor2tensor

 

좋은 성능을 보이는 Neural sequence transduction model들은 대부분 encoder-decoder 구조를 지님

Transformer도 이 구조를 따르고, 내부는 self-attention & fully connected layer만으로 구성


Abstract

기존 sequence transduction model들 → encoder&decoder를 포함한 recurrent or cnn에 기반

가장 성능 좋은 model 역시 attention mechanism으로 encoder와 decoder를 연결한 구조

 

attention mechanism에만 기반한 구조인 Transformer 제안

more parallelizable & train시간 감소

 

english-german & english-french translation task에서 SOTA달성

다른 task에서도 일반적으로 잘 작동


1 Introduction

RNN, long-term memory, gated RNN이 sequence modeling & transduction 문제에서 SOTA를 달성해 옴

 

recurrent model은 memory등의 이슈로 긴 sequence length에서 parallelization이 불가능

factorization trick(인수분해 trick) & conditional coputation(조건부 결합)을 통해서 계산 효율성 많이 개선 (conditional coputation은 모델 성능도 동시에 개선)

But 여전히 sequential computation의 근본적인 제약은 존재

 

Attention mechanism

다양한 task에서 sequence modeling & transduction model에서 주요하게 다뤄짐

input or output sequences 길이,거리에 관계없이 dependency 모델링 가능

⇒ input과 output sequence간 길이를 신경 안써도 됨

But 소수 상황 제외하고, recurrent network와 같이 사용되었음

 

Transformer

recurrence 사용 X, input과 output간 global dependency를 뽑기위해 attention mechanism 사용

병렬화 가능 → 적은 시간으로 translation quality에서 SOTA 달성할 수 있었음


2 Background

reducing sequential computation

  • Extended Neural GPU, ByteNet, ConvS2S에서도 reducing sequential computaion이 다뤄짐
  • But 이 연구들 모두 CNN을 basic building block으로 사용
  • 먼 위치 사이의 dependency을 배우기 힘들게 만듦

⇒ Transformer에서는 Multi-Head Attention을 통해 constant number of operation으로 축소됨

 

self-attention

  • intra-attention이라고도 불림
  • sequence의 표현을 계산하기 위해 single sequence의 서로 다른 위치와 관련된 attention mechanism
  • 성공적으로 다양한 task(reading comprehension, abstractive summarization, textual entailment, learning task-independent sentence representations)에 사용됨

end-to-end memory network

  • sequence-aligned recurrence대신 recurrent attention mechanism에 기반
  • 간단한 질의응답, 언어 모델링 task에서 잘 수행됨을 보여줌

sequence-aligned: 입력 vector와 출력 vector의 차원이 같아야함

But 일반적으로 번역 task를 진행할 때, 원본 문장과 번역한 문장이 일대일로 대응되서 길이가 같기는 힘듦

∴ recurrent attention mechanism 사용

참고| https://dos-tacos.github.io/concept/alignment-in-rnn/

 

⇒ Transformer은 self-attention에만 의존한 최조의 transduction model


3 Model Architectire

encoder, decoder 모두 stacked self-attention, point-wise, fc-layer를 사용


seq2seq 구조: encoder와 decoder에서 각각 하나의 RNN이 t개의 시점(time step)을 가지는 구조

Transformer 구조: encoder와 decoder라는 단위가 N개로 구성 (논문에서는 각각 6개 사용)

https://wikidocs.net/31379
https://wikidocs.net/31379

RNN은 사용하지 않더라도 여전히 encoder-decoder 구조 유지


Encoder & Decoder Stacks

Encoder

6개의 동일한 layer로 이뤄짐

각 layer는 두개의 sub-layer 존재

  • 1-sub-layer: multi-head self-attention mechanism
  • 2-sub-layer: 간단한 position-wise fully connected feed-forward network
  • 각 sub-layer 이후 residual connection 사용 후, layer normalization 진행
  • 각 2개의 sub layer에 residual connection 이용 (residual connection: input을 output으로 그대로 전달하는 것)
    이때, sub-layer의 output dimension을 embedding dimension과 맞춰줌
    $d_{model}=512$
  • $LayerNorm(x+Sublayer(x))$
    $Sublayer(x)$는 sub layer 가체가 구현하는 함수

residual connection(잔차연결)

서브층의 입력과 출력을 더하는 것

cv에서 많이 사용

 

layer normalization

Layer normalization은 Batch normalization과 달리 배치 크기나 시퀀스 길이에 독립적으로 적용

입력 시퀀스의 각 시점에서 독립적으로 정규화를 수행하므로, 시점 간 상관관계가 강한 RNN에서 좋은 성능을 보임

 

Transformer에 batch normalization 적용

논문| https://arxiv.org/abs/2003.07845v1


Decoder

6개의 동일한 layer로 구성

  • 인코더의 multi-head attention layer랑 Feed Forward Network외 하나의 layer 더 존재
  • encoder의 stack output에 대해 Multi-head attention 수행
  • decoder에서는 encoder와 다르게 순차적으로 결과를 만들어 내야함
    ∴ self-attention을 변형 ⇒ masking 해주기
    자기 자신보다 미래에 있는 단어들을 참고하지 못하도록 하기 위해서 masking

Attention

attention → 특정 정보에 좀 더 주의를 기울이는 것

ex) source:영어, target:한국어
Hello, Good morning = 안녕, 좋은 아침

model은 '아침'이라는 token을 decode할 때, source에서 morning에 더 큰 중요도를 갖게 하는 방법이 attention

 

Transformer에서 사용되는 Attention

  • Encoder Self-Attention → encoder에서 이루워짐
  • Masked Decoder Self-Attention → decoder에서 이뤄짐
  • Encoder-Decoder Attention → decoder에서 이뤄짐

Self-Attention은 Query, Key, Value가 동일한 경우를 말함

∴ Encoder-Decoder Attention에서 Query는 decoder의 vector,  Key&Value는 encoder의 vector이므로 self-attention이라고 안부름

(여기서 동일하다는 경우는 vector 값이 같은게 아니라 vector의 출처가 같다는 의미)

 

Multi-head : Transformer가 attention을 병렬적으로 수행하는 방법

https://wikidocs.net/31379

 


Attention 함수는 주어진 Query에 대해서 모든 Key와 유사도를 각각 구하게 됨

→ 구한 유사도를 가중치로 해서 key와 맵핑되어있는 각각의 Value에 반영

 유사도가 반영된 value를 모두 가중합하여 return

https://wikidocs.net/31379

Self-attention: 자기 자신에게 attention을 수행한다는 의미

 


Scaled Dot-Product Attention

attention function에는 여러 종류가 있는데

Transformer에서는 내적만 하는 어텐션 함수 $score(q,k) = q∙k$가 아닌 이것을 특정 값으로 나눠준 $score(q,k) = q∙k / \sqrt(n)$ 사용

 

$d_k = d_{model} / num_heads$

 

문장에서 연관성이 반영된 값이기 때문에 문맥을 알 수 있도록 해줌

 

Multi-Head Attention

위 그림을 수식으로 나타내면

$MultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^O$

$head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)$

 

하나의 attention function을 사용하는 것보다 Query, Key, Value를 linear projection을 통해 중간에 매핑해줘서 각 다른 값들을 입력으로 하는 여러개의 attention function들을 만드는 것이 더 효율적

 

Applications of Attention in our Model

Transformer는 세가지 방식으로 multi-head attention 사용

  • encoder-decoder attention layer에서
    Query는 이전 decoder layer에서, key, value는 encoder의 output에서 가져옴
    decoder의 모든 위치에서 input sequence의 모든 위치를 참조할 수 있도록 함
    query가 decoder layer의 output인 이유: query가 조건에 해당하기 때문
  • self-attention layer를 포함한 encoder
    self-attention layer에서 모든 key, value, query는 동일한 위치(encoder의 이전 layer의 output)에서 옴
    encoder의 각 위치는 encoder의 이전 layer에 있는 모든 위치에 대응 가능
    if 첫번째 layer, positional encoding이 더해진 input embedding이 됨
    → encoder의 각 위치들은 이전 레이어의 모든 위치들 참조 가능
  • self-attention layer를 포함한 decoder
    masking사용 → decoder의 각 위치들은 decoder 내의 다른 위치들을 참조 할 수 있지만, 이전부터 자기 위치까지만 참조 가능
    → auto-regressive 성질을 살리면서도 정보가 잘못 흐르는 것을 막기 위해서

Position-wise Feed-Forward Networks

encoder & decoder의 각 계층은 개별적이고 동일하게 적용되는 fully connected feed-forward network를 포함

 

position마다(개별 단어마다) 적용되기 때문에 position-wise

 

$$FFN(x) = max(0,xW_1+b_1)W_2 + b_2$$

두개의 linear transformation사이에 ReLU

linear transformation
$f_1=xW_1 + b_1$
ReLU
$f_2 = max(0,f_1)$
linear transformation
$f_3 = f_2W_2 + b_2$

x: 멀티 헤드 어텐션의 결과로 나온 (seq_len, $d_{model}$)의 크기를 가지는 행렬

$W_1$: 가중치 행렬. ($d_{model}, d_{ff}$)

$W_2$: 가중치 행렬. ($d_{ff}, d_{model}$)

input & output 차원 $d_{model}$은 512, hidden layer $d_{ff}$ 차원은 2048

 

통과하고 나와도 입력 크기였던 (seq_len, $d_{model}$)로 크기는 동일

 

Embeddings and Softmax

다른 sequence transduction 모델과 마찬가지로, 학습된 embedding 사용해서 input & output token을 dimension $d_{model}$의 vector로 변환

decoder output을 예측된 다음 token 확률로 변환하기 위해 학습된 linear transformation & softmax를 사용 

두개의 embedding layer와 pre-softmax linear transformation 사이에 같은 weight matrix를 공유

 

Positional Encoding

RNN이 자연어 처리에서 유용했던 이유 = 단어의 위치에 따라 단어를 순차적으로 입력받아 처리 → 각 단어의 위치 정보(position information)를 가질 수 있었음

But Transformer은 Recurrent model을 사용하지 않고, attention mechanism만 사용 → 단어 입력을 순차적으로 받지 X → sequence 정보를 담아낼 수 X

∴ sequence 정보를 데이터에 추가해줘야 함

 

∴ 단어의 위치정보를 얻기 위해 각 단어 embedding vector에 위치 정보를 더해서 model의 input으로 사용

⇒ 이것이 positional encoding

 

token의 상대적(or 절대적) 위치에 대한 정보를 제공하기 위한 역할

https://wikidocs.net/31379

positional encoding 선택 방식: 방식은 다양. 본 논문에서는 $sin, cos$ 사용

sin, cos 함수의 값을 embedding vector 에 더해주므로서 단어의 순서 정보를 더해줌

sin 함수는 (pos, 2i) 즉 embedding vector내 각 차원의 인덱스가 짝수인 경우

cos 함수는 (pos, 2i+1) 홀수인 경우 사용

 

$pos$: 입력 문장에서의 embedding vector의 위치

$i$: embedding vector 내의 차원의 인덱스

$d_{model}$: Transformer의 모든 층의 출력 차원 (논문에서는 512)

 

고정된 offset k에 대해 $PE_{pos+k}$가 $PE_{pos}$의 선형 함수로 표현될 수 있기 때문에 모델이 상대적인 위치를 참조할 수 있을 것이라 가정했기 때문에 이 함수 선택

 

⇒ 각 embedding vector에 positional encoding 값을 더하면 같은 단어라도 문장 내 위치에 따라서 Transformer의 입력으로 들어가는 embedding vector 값이 달라짐 → Transformer의 input이 순서 정보가 고려된 embedding vector가 됨


4 Why Self-Attention

self-attention을 사용하는 이유

  • 각 layer당 전체 계산 복잡성
  • parallelize될 수 있는 연산량
  • long-range dependency 사이의 path length
    장거리 의존성을 학섭하는 것은 많은 시퀀스 변환 task에서 핵심 과제
  • + 부가적인 이점: 해석 가능한 모델

Table 1

Self-Attention은 모든 위치를 순차적으로 실행되는 operation의 constant number로 연결하는 반면,

recurrent layer는 $Q(n)$의 sequntial operation을 요구함

 

계산 복잡성 측면에서, self-attention layer는 recurrent layer보다 더 빠름

(sequence 길이 n이 representation dimensionality d보다 작을 때)


5 Training

Training Data & Batching

약 450만 문장 쌍으로 구성된 standard WMT 2014 English-German dataset 사용

larger WMT 2014 English-French dataset도 사용

train batch는 약 25,000개의 source token, 약 25,000개의 target token이 포함된 문장 쌍을 포함함

 

Optimizer

Adam 사용

 

Regularization

train시, 3가지 regularization 사용

  • Residual Dropout:
    1. 각 sub-layer의 출력이 sub-layer input에 추가되고, 정규화되기전에 dropout 적용
    2. encoder & decoder stack에서 embedding과 positional encoding의 합에 dropout 적용
  • 3. Label Smoothing:
    진행하면  모델이 불확실함을 배우지만, accuracy & BLEU score를 향상시킴

6 Results

Machine Translation → 성능 good

 

Model Variations → 다양한 구성요소의 중요성을 평가하기 위해서

 

English Constituency Parsing → 다른 task으로 일반화 가능한지 평가하기 위해서 실험 → 성능 good


7 Conclusion

  • Encoder-Decoder Architecture에서 일반적으로 사용되는 recurrent layer를 multi-headed self-attention으로 대체
  • In Translation Task, Recurrent or Convolutional을 기반으로한 Architecture보다 훨씬 빠르게 train 가능