Attention Is All You Need

멋쟁이토마토·2024년 2월 25일
0

Paper Review - NLP

목록 보기
2/7

Abstract

  • 기존의 sequence transduction 모델들은 encoder와 decoder를 포함한 RNN, CNN을 기반으로 함.

  • 좋은 성능을 보인 모델들은 attention mechanism을 통해 encoder와 decoder를 연결했음.

➡ attention mechanism만을 사용한 Transformer을 제안 (RNN or CNN을 사용하지 않음)

① machine translation (기계 번역) task에서 성능이 좋음

② 학습할 때, 더 많은 병렬화 / 더 적은 시간 소요

③ 일반화 성능이 좋음 ➡ constituency parsing (구문 분석)에서도 결과가 좋았음

Introduction

RNN, LSTM, gate RNN은 language modeling, machine translation과 같은 sequence modeling과 transduction problem에서 SOTA를 달성함. Recurrent model은 일반적으로 input과 output suqence의 symbol position에 따라 계산함. 계산 단계의 위치에 따라 이전 hidden state ht1h_{t-1}과 position t가 input인 hidden state hth_t가 생성됨.

➡ t를 계산하려면 순차적으로 t 이전의 output들이 다 계산되어야 최종 output을 생성할 수 있음.

➡ 이러한 순차적인 특성으로 인해 병렬화를 막고, sequence가 길어질수록 더 취약해짐.

최근에는 factorization tricks와 conditional computation으로 계산 효율성을 개선하고자 하였지만 근본적인 제약이 여전히 남아있음.

Attention mechanism은 input 또는 ouput sequence의 거리에 관계없이 dependencies(의존성)을 모델링하여 sequence modeling에 중요한 부분이 되었지만, recurrent network와 결합하여 사용해서 효율적인 병렬화를 이룰 수 없음.

➡ recurrence를 제거하고 input과 output 사이의 global dependencies를 학습하기 위한 attention mechanism만을 사용한 모델 transformer를 제안

Background

sequential 연산을 줄이기 위해 여러 노력을 했지만, 모두 CNN을 기반으로 함. 입력과 출력 위치에 대해 병렬로 hidden representation을 계산함. Extended Neural GPU, ByteNet, ConvS2S와 같은 모델들은 입력과 출력 위치 사이의 관련성을 학습하는 과정에서 먼 거리의 위치 간의 의존성을 학습하기 어려워지는 단점이 있음.

Self-attention은 sequence의 representation을 계산하기 위해 single sequence의 다른 위치들을 연관시키는 attention mechanism. End-to-end memory networks는 sequence-aligned recurrence 대신 recurrent attention mechanism을 기반으로함.

➡ Transformer는 self attention만을 사용해서 input과 output의 representation을 계산

Model Architecture

대부분의 sequence transduction model들은 encoder-decoder의 구조를 가짐. 입력 (x1,...,xn)(x_1, ..., x_n)은 인코더에 의해 z=(z1,...,zn)z=(z_1, ... , z_n)으로 표현됨. 인코더로 표현된 z를 활용하여, 한 번에 한 Element 씩 Output Sequence (y1,...,ym)(y_1, ..., y_m)이 생성됨.

  • auto-regrssive : 생성된 Symbol은 다음 생성 과정에서 추가 입력으로 사용됨.

Transformer는 encoder와 decoder 모두에서 스택으로 쌓인 self-attention 레이어와 point-wise fully connected layer를 사용하는 아키텍처를 따름.

✅ Encoder

  • N = 6의 동일한 layer stack으로 구성- 각 layer에는 2개의 sub-layer → multi-head self attention / fully connected feed-forward network

  • 각 Sub-Layer는 Residual Connection 및 Layer Nomalization 적용

즉, sub-layer의 output은 LayerNorm(x + Sublayer(x))이고, Sublayer(x)는 sub-layer 자체의 function (multi-head attention or FFN)

  • Residual Connection 적용을 용이하게 하기 위해, Sub-layer, Embedding, Output Dimension을 512로 통일

Residual Connection 적용을 위해선, Input과 연결된 Output의 Dimenstion이 동일해야 함

✅ Decoder

  • N = 6의 동일한 layer stack으로 구성

  • 각 layer는 3개의 sub-layer → Masked Multi-head self attention / Multi-head self attention / fully connected feed-forward network

1) Masked Multi-head self attention

☑ masking

이후의 positions에 attending하는 것을 막기 위해 decoder stack에 있는 self-attention sub-layer를 수정함.

알려진 output에만 의존 → 현재 위치 i 이후에 있는 정보는 i에 영향 X

Output Embedding은 One Position씩 Offset

2) encoder의 output에 대해 Multi-head self attention

3) Position-wise Fully Connected Feed-Forward Network

  • 각 Sub-Layer는 Residual Connection 및 Layer Nomalization 적용

✅ Attention
Attention function은 query와 key-value 집합 쌍을 query, keys, values, output이 모두 벡터인 output에 매핑함. output은 values의 weighted sum에 의해 계산되고, 각 weight는 key에 해당하는 query의 compatibility function에 의해 계산됨.

✅ Scaled Dot-Product Attention
Input은 dkd_k차원의 query, key와 dvd_v차원의 value로 구성됨. key와 query의 dot product를 계산하고 루트 dkd_k로 나눠서 softmax function을 적용한 후, value의 weight를 계산함.

주로 사용하는 attention function은 additive attention과 dot-product(multiplicative) attention이 있음.

1) Dot-product attention - scaling factor인 1dk\frac{1}{\sqrt{d_k}}를 제외하면 동일

2) Additive attention - single hidden layer가 있는 FFN을 사용하여 compatibility function을 계산

➡ 두 방법은 이론적으로 복잡성이 비슷하지만, dot-product attetion은 matrix를 통해 최적화된 연산을 구현할 수 있기 때문에 더 빠르고 공간 효율적임.

💡 Multi-Head Attention

dmodeld_{model} 차원의 query, key, value를 사용하여 single attention을 수행하는 대신, 각각 dkd_k, dkd_k, dvd_v 차원에 대해 학습된 서로 다른 linear projection을 사용하여 query, key, value를 h번 linear projection하는 것이 더 좋을 것이라는 것을 알게 됨. 이러한 query, key, value의 각 projection version에서 attention funtction을 병렬로 수행하여 dvd_v차원 output을 생성하고, 이를 concat하여 다시 dmodeld_{model} 차원의 output을 생성함.

Multi-head attention을 통해 모델은 다른 position의 서로 다른 representation subspaces의 정보에 공동으로 attend할 수 있음.

h = 8개의 병렬 attention layer 혹은 head를 사용하고 dkd_k = dvd_v = dmodel/h=64d_{model}/h = 64를 사용함. 각 head의 축소된 차원으로 인해 전체 계산 비용은 전체 차원을 갖는 single-head attention 비용과 비슷함.

Applications of Attention in our Model

1) encoder-decoder attention layer

query는 이전 decoder layer에서, key와 value는 encoder의 output에서 얻음. → decoder의 모든 위치가 input sequence의 모든 위치에 배치될 수 있음.

2) Encoder self-attention layer

key, value, query는모두 같은 위치에서 나오고, 이 위치는 encoder의 이전 layer의 output임.

encoder의 각 위치에서 이전 layer에 모든 위치에 관여할 수 있음.

3) Decoder self-attention layer

decoder에서 각 위치는 해당 position까지 포함해서 모든 위치에 관여할 수 있음. auto-regressive property를 보존하기 위해 decoder에서 leftward information flow를 막아야 함. scaled dot-product attention 안에서 올바르지 않은 연결에 해당하는 모든 softmax의 input의 모든 value를 masking(-)해서 구현함.

➡ 이전 위치에서 생성한 정보만을 사용하여 단어를 생성 / 미래 시점의 단어를 볼 수 없음

Position-wise Feed-Forward Networks

encoder와 decoder의 각 layer에는 fully connected feed-forward network가 있음. ReLU activation이 있는 두 개의 선형 변환으로 구성됨. 선형 변환은 여러 위치에서 동일하게 이루어지지만, layer마다 다른 파라미터를 사용함.

Embeddings and Softmax

다른 sequence trasduction model과 비슷하게, 학습된 embedding을 사용해서 input token과 output token을 dmodeld_{model}차원의 벡터로 변환함. 일반적으로 학습된 linear transformation과 softmax 함수를 사용해서 decoder output을 다음 token의 예측확률로 변환함.

Positional Encoding

Transformer에는 recurrence와 convolution을 사용하지 않음. sequence의 위치 정보가 없기 때문에 상대적이든 절대적이든 position에 대한 정보를 추가해야 함.

➡ encoder와 decoder stack 아래 input embedding에 "positional encodings"를 추가함.

Positional encoding은 embedding과 동일한 차원을 가지기 때문에 이 둘을 합할 수 있음.

( 단어의 의미를 담은 임베딩과 단어의 위치 정보를 담은 위치 인코딩을 결합 → 모델이 입력 시퀀스의 단어들을 상대적인 위치 정보를 유지하며 처리할 수 있음.)

pos는 토큰의 위치, i는 차원을 나타냄
PE(pos+k)는 PE(pos)의 선형 함수로 표현될 수 있기 때문에 모델이 상대적인 위치를 쉽게 학습할 수 있을 것이라고 생각해서 위의 함수를 사용함.

더 긴 sequence에서도 추론 가능하기 때문에 sinusoidal version 선택.

Why Self-Attention

  • self-attention layer와 recurrent, convolutional layer와 비교

방법은 symbol representations(x1, ..., xn)의 one variable-length sequence를 같은 길이 (z1, ..., zn)으로 mapping


Self attention을 사용한 이유

① layer별 총 계산복잡도

② 요구되는 최소한의 sequential 연산의 수로 측정된 병렬 연산량

③ 네트워크에서 장거리 의존성(long-range dependencies) 사이의 path 길이 (신호가 전달되는 경로의 길이)

많은 시퀀스 변환 task에서 장거리 의존성(long-range dependencies)을 학습하는 것이 주요 과제임.

경로의 길이는 입력 시퀀스와 출력 시퀀스 사이의 모든 위치들 간에 신호가 전달되는 데에 영향을 미치고, 경로의 길이가 짧을수록 장거리 의존성을 학습하는 것이 더 쉬움. → maximum path length를 비교함.

Training

💡Training Data and Batching

  • 약 450만 개의 문장 쌍으로 구성된 표준 WMT 2014 영어-독일어 datatset에 대해 학습함.

  • byte-pair encoding을 통해 인코딩, 약 37,000 토큰의 공유 sourcetarget vocabulary를 가짐.

  • 각 훈련 배치에는 약 25000개의 소스 token과 25000개의 대상 token을 포함하는 문장 쌍 세트가 포함됨.

💡Optimizer

  • β1β_1 = 0.9, β2β_2 = 0.98, ϵ = 10910^{-9}인 Adam optimizer 사용함.

  • 다음 식에 따라 학습을 진행하면서 learning rate를 변화시킴.


💡Regularization

  • Resicual Drop

encoder와 decoder에 여러 개의 sub-layer의 출력에 dropout 적용한 뒤, 원래의 sub-layer의 입력과 합쳐서 정규화 수행

인코더와 디코더의 모든 stack에 대해 embedding과 positional encoding의 합에 dropout 적용

  • Label Smoothing

perplexity는 해치지만 BLEU score가 높아지는 결과를 보임.

Results

💡Machine Translation

💡Model Variation

💡English Constituency Parsing

Conclusion

recurrent layer를 대체하여 attention 기반의 sequence transduction model을 제안함. 주로 인코더-디코더 아키텍처에서 사용되는 RNN 레이어들을 multi-heade self-attention으로 대체함. Translation task의 경우, Transformer는 recurrent, convolutional layer기반의 아키텍쳐들보다 훨씬 빠르게 훈련할 수 있음. WMT 2014 English-to-German과 WMT 2014 English-to-French translation tasks에서 SOTA 달성. 텍스트, 이미지, 오디오, 비디오와 같이 상대적으로 큰 input과 output을 요구하는 task들을 효율적으로 처리하기 위해 확장할 수 있을 것임.

profile
better than yesterday !

0개의 댓글