Attention Is All You Need REVIEW

박채희·2023년 1월 26일
0

paper review

목록 보기
6/13

Abstract

기존 sequence transduction model들은 인코더와 디코더를 포함한 복잡한 recurrent나 cnn에 기반함

가장 성능이 좋은 모델 또한 attention mechanism으로 인코더와 디코더를 연결한 구조임

Transformer는 온전히 attention mechanism에만 기반한 구조(recurrence나 convolution은 사용x)

→ 더 parallelizable하고, 훨씬 적은 학습 시간이 걸림

  • English-to-German , English-to-French translation에서 SOTA 달성함
  • 한정된 학습 데이터를 가지고서도 성공적으로 다른 task들에 일반화될 수 있음

1 Introduction

RNN, LSTM, GRU는 sequence modeling과 language modeling, machine translation등의 transduction problem에서 SOTA를 달성

Recurrent mode은 입력과 출력의 symbol position에 따라 계산을 수행: 시간에 따라 hidden state를 생성하며 이 때 이전 timestep의 hidden state와 현재 timestep의 input을 활용하기 때문에 문제가 됨

→ 이는 근본적으로 훈련 example들을 병렬화하여 처리할 수 없음

→ 더 긴 sequence를 처리하기 어려워짐 (메모리는 한정되어 있기 때문)

최근 연구에서 factorization trick과 conditional computation을 통해 계산 효율성을 많이 개선

  • 특히 conditional computation은 모델 성능을 개선

→ 그러나 여전히 근본적인 sequential computation의 문제는 남아있음

Attention mechanism은 입력과 출력 sequence의 사이의 거리에 상관없이 dependency를 모델링함으로써 다양한 과제에서의 sequence modeling과 transduction problem에서 매우 중요한 부분이 되었지만, 거의 대부분의 경우 recurrent network와 함께 사용됨

input과 output간 global dependency를 뽑아내기 위해 recurrence를 사용하지 않고, attention mechanism만을 사용한 Transformer 모델 제안: parallelization이 가능해 적은 시간으로 translation quality에서 SOTA를 달성

2 Background

sequential computation을 줄이는 것은 Extended Neural GPU, ByteNet, ConvS2S에서도 다뤄짐

  • 이 연구들은 모두 CNN을 basic building block으로 사용함
  • input과 output 사이의 거리에 따라 계산량이 증가하며 long dependency를 학습하기 어렵게 함

Transformer에서는 Multi-Head Attention을 사용해 상수 시간으로 줄어들게 함

Self-attention(=intra-attention)

  • sequence의 representation을 계산하기 위한 단일 sequence의 다른 위치를 연관시키는 mechanism
  • reading comprehension, abstractive summarization, textual entailment, learning task, independent sentence representations를 포함한 다양한 task에서 성공적으로 사용됨

End-to-end memory network

  • sequence-aligned recurrence 보다 recurrent attention mechanism에 기반함
  • simple-language QA 과 language modeling task에서 좋은 성능을 보임

Transformer는 온전히 self-attention에만 의존한 최초의 transduction model(sequence-aligned RNN이나 Convolution을 사용하지 않음)

3 Model Architecture

Transformer는 크게 encoder와 decoder로 나뉘며, encoder는 입력인 symbol representations (x1,…,xn)을 continuous representations z=(z1,…,zn)으로 매핑

z가 주어지면, decoder는 한번에 한 원소씩 출력하여 sequence (y1,…,yn)를 생성

다음 단계의 symbol을 생성할 때 이전 단계에서 생성된 symbol을 추가 입력으로 받는 자동회귀(auto-regressive)

3.1 Encoder and Decoder Stacks

Encoder

  • N=6개의 identical layer
  • 하나의 layer는 두개의 sub-layer로 나눠짐
    • multi-head self-attention mechanism
    • simple, position-wise fully connected feed-forward network
  • sub-layer마다 residual connection 후에 layer normalization 적용 : sub-layer의 출력값은 LayerNorm(x+Sublayer(x)) → Residual connection
  • residual connection을 구현하기 위해, embedding layer를 포함한 모든 sub-layer들의 output은 512 차원

Decoder

  • N=6개의 identical layer
  • 하나의 layer은 encoder와 동일한 두개의 sub-layer가 있고, 한가지를 더 가짐
    • encoder의 출력을 입력으로 사용하는 multi-head attention sub-layer
  • encoder와 비슷하게 resiual connection과 layer normlization 적용
  • decoder가 출력을 생성할 때 다음 출력에서 정보를 얻는것을 막기 위해 masking을 사용
    • Masked multi-head attention

3.2 Attention

Attention function = Query+(key-value) → output

3.2.1 Scaled Dot-Product Attention

입력은 d_k차원의 query,key / d_v차원의 value로 구성

query와 key의 모든 내적을 계산하고, 각각을 √d_k로 나누고, value의 가중치를 얻기 위해 softmax 적용

실제로는, query들에 대해 동시에 계산하기 위해 이를 행렬 Q로 묶고, 모든 key와 value 역시 각각 행렬 KV로 표현

가장 널리 쓰이는 attention function

  • Additive attention: 단일 hidden layer의 feed-forward 네트워크를 사용하여 호환성 함수를 계산, d_k가 작을 때 성능이 더 좋음
  • Dot-product attention: d_k가 클 때는 빠른 행렬곱 알고리즘에 힘입어 더 빠르고 더 공간 효율적

3.2.2 Multi-Head Attention

d_model 차원 query, key, value로 단일 attention function을 쓰는 것보다

query, key, value를 h번의 linear projection을 통해 각각 d_k,d_k,d_v차원으로 변환한 뒤,

각각 다르게 h번 학습시키는 것이 더 효율적

→ 각각 따로 계산된 값들은 병렬적으로 attention function을 거쳐 d_v차원의 결과를 만들고, 이 값을 concat한 후 한번 더 선형 함수에 통과시켜(projected) 최종 출력값을 생성

h=8, d_k=d_v=d_model/h=64로 사용

각 head의 차원이 줄었기 때문에 단일 head attention과 계산량은 비슷

3.2.3 Applications of Attention in our Model

multi-head attention을 3가지 방법으로 사용

  • encoder-decoder attention layer에서, query는 이전 decoder layer에서 오며 memory key와 value는 encoder의 출력에서 옴: decoder가 입력의 모든 위치(원소)를 고려할 수 있도록 함 → decoder의 sub-layer 중 2번째인 Multi-head attention
  • encoder는 self-attention layer를 포함하고, 여기서 모든 key, value, query는 같은 곳(인코더의 이전 layer의 출력)에서 옴: encoder의 각 원소는 이전 layer의 모든 원소를 고려할 수 있음 → encoder의 sub-layer 중 Multi-head attention layer
  • decoder에서도 비슷하지만, auto-regressive 속성을 보존하기 위해 decoder는 출력을 생성할 시 다음 출력을 고려하면 안됨: masking을 통해 이전 원소는 참조할 수 없도록 함 (masking은 dot-product를 수행할 때 −∞로 설정함으로써 masking out시켜 softmax를 통과할 때 0이 출력됨) → decoder의 sub-layer 중 첫번째인 masked Multi-head attention

3.3 Position-wise Feed-Forward Networks

encoder와 decoder은 fully connected feed-forward network를 가짐: 각 position에 따로따로, 동일하게 적용됨

point-wise convolution→ReLU→point-wise convolution으로 진행

input, output의 dimesion은 512이고, hidden layer의 dimension은 2048

3.4 Embeddings and Softmax

학습된 임베딩을 사용: input 토큰과 output 토큰을 d_model 의 벡터 차원으로 변환

decoder output을 예측된 다음 토큰의 확률로 변환하기 위해 linear과 softmax를 사용

(두 개의 임베딩 layer와 pre-softmax 선형 변환 사이에 같은 weight의 matrix를 공유)

임베딩 layer에서는 weight들에 sqrt{d_model+2}를 곱해줌

3.5 Positional Encoding

이 모델은 recurrence도 convolution도 사용되지 않기 때문에 sequence에 있는 원소들의 위치에 대한 정보를 따로 넣어야 함

인코더와 디코더 stack 아래의 input 임베딩에 Positional Encoding 을 추가

  • Positional Encoding은 input 임베딩처럼, 같은 차원 (d_model)을 가져서, 둘을 더할 수 있음

  • 다양한 positional encoding 방법 중에, transformer는 다른 주기의 sine, cosine function을 사용

  • 모델이 상대적인 position으로 쉽게 배울 수 있을거라 가정하여 위 function을 사용함

    • 어떤 고정된 offset k라도 PE_pos+k가PE_pos의 linear function으로 표현될 수 있기 때문
  • 학습된 Positional Embedding을 사용해 실험을 해보았고, 두 방식은 거의 같은 결과를 보임

    • transformer에선 sine 을택했는데, 이는 model이 더 긴 sequence 길이를 추론할 수 있기 때문

4 Why Self-Attention

self-attention과 recurrent, convolutional layer을 비교

  1. layer 당 전체 계산 복잡도
    • self-attention layer가 n<d 일때 recurrent layer보다 빠름 (n : sequence length, d : representation dimensionality)
    • n<d 인 경우가 machine translation에서의 대부분의 경우에 해당
    • 아주 긴 sequence의 경우 계산 성능을 개선하기 위해, self-attention은 input sequence의 neighborhood size를 r로 제한하였지만 maximum path의 길이를 O(n/r)로 증가함
  2. 병렬화 될 수 있는 계산
    • self-attention layer는 모든 position을 상수 시간만에 연결함
  3. 긴 길이의 dependency 학습 용이성
    • 아주 긴 길이의 sequence에 대한 dependency를 학습하는 것은 매우 어렵고 forward, backward signal들이 network를 가로지르는 경로의 길이에 따라 학습 용이성이 결정
    • self-attention이 가장 maximum path length가 낮음

  1. self-attention은 더 interpretable한 모델을 만들 수 있음
  • attention distribution
  • 각 attention head들은 다양한 task를 잘 수행해내고, 문장의 구문적, 의미적 구조를 잘 연관시키는 성질을 보이기도 함

5 Training

5.1 Training Data and Batching

English-German

  • WMT 2014 English-German dataset
  • 4.5백만 sentence pairs

English-French

  • WMT 2014 English-French dataset
  • 36M sentences 와 32000 word-piece vocabulary로 쪼개진 토큰들

5.2 Hardware and Schedule

  • 8개의 NVIDIA P100 GPU로 학습
  • base model은 12시간 동안 (100,000 step) 학습시킴
  • big model 은 3.5일 동안 (300,000 step) 학습시킴

5.3 Optimizer

  • Adam optimizer 사용
  • learning rate

5.4 Regularization

Residual Dropout:각 sub-layer의 output에 dropout을 적용 / embedding의 합과 positional encoding에 dropout을 적용 (0.1)

Label Smoothing: 학습 중 라벨스무딩 적용(0.1)

6 Result

6.1 Machine Translation

English-German translation task에서 big model이 SOTA를 달성

English-French tranlation task에서 big model이 SOTA를 달성

6.2 Model Variations

다양한 구성 요소의 중요성을 평가하기 위해 다양한 방식으로 기본 모델을 변경

English-German translation development set을 사용

(A): head가 많아질수록 score 낮아짐 / key, value dimension 변경해도 상수 시간을 갖음

(B): attention key size(d_k)를 줄이면 model quailty가 낮아짐

(C): bigger model이 더 나음

(D): dropout은 over-fitting을 피할 수 있음

(E): learned positional embedding으로 바꿨더니 똑같았음

6.3 English Constituency Parsing

다른 task에도 일반화 할 수 있는지 평가하기 위해 English Constituency Parsing(구문분석) 실험 진행

→ recurrent, convolution보다 더 빠르게 학습 가능(RNN Grammar 제외)

구체적인 tuning 없이도 SOTA 달성 성능을 보임

7 Conclusion

Transformer는 recurrence와 convolution을 모두 제거한, 오직 attention에만 의존하는 새로운 종류의 모델

→ 계산량을 줄이고 병렬화를 적용해 학습 속도가 훨씬 빠를 뿐만 아니라 그 성능 또한 state-of-the-art를 달성하는 수준

→ 이러한 attention에 기반한 모델은 다른 task들에 적용할 수 있음 (텍스트뿐만 아니라 이미지, 오디오나 비디오 등의 상대적으로 큰 input-output을 요구하는 task들에 효과적으로 사용할 수 있을 것)

0개의 댓글