[논문 리뷰] Attention Is All You Need
Abstract
- 지배적인 순서 변환 모델은 Encoder, Decoder을 포함한 복잡한 RNN, CNN을 기반으로하였다.
- 가장 성능이 좋은 모델은 attention 매커니즘을 사용하여 Encoder와 Decoder을 이은 것이다.
- attention 매커니즘만을 기반으로 한 Transformer라는 단순한 신경망 구조를 제안한다.
- 병렬 처리가 가능하고 학습 시간이 더 적게 들면서도 성능은 더 높았다.
- 대규모 및 제한된 학습 데이터 모두를 사용하여 영어 구문 분석에 성공적으로 적용함으로써 다른 작업에 잘 일반화 됨
Introduction
- RNN, LSTM, GRU는 시계열 모델과 Seq2Seq모델의 SOTA를 만드는데 고정적으로 사용되었다.
- Encoder, Decoder의 범위를 넓히는데 수많은 노력이 존재하였다.
- RNN 모델은 전형적으로 input과 output의 위치를 통해 계산을 진행한다.
- 이전 시점의 은닉층(ht−1)과 t시각의 입력을 통해 해당 시점의 은닉 상태(ht)를 생성한다.
- 이로 인해 병렬화는 불가능하고 메모리 제약으로 인해 길이가 긴 순서 데이터에 취약하다.
- factorization trick과 conditional computation으로 계산 효율성이 개선되었다.
- Attention 매커니즘으로 인해 input, output 거리에 관계 없이 시계열 모델을 종속성을 모델링할 수 있다.
- Transformer에서는 input과 output 사이의 전역 의존도를 그리기 위해 RNN을 사용하지 않고 전적으로 Attention 매커니즘만 사용한다.
- Transformer는 병렬화가 가능하게 하고 SOTA를 달성했다.
- 8개의 P100 GPU 사용하여 12시간 소요
Background
- 시계열 계산을 줄이는 목표는 CNN을 사용하는 확장 신경망 GPU, ByteNet, ConvS2S의 기초를 형성하며, 모든 입력에 대해 병렬로 input과 output의 은닉 표현을 계산합니다.
- 이 모델들에서 두 개의 임의 input또는 output 위치의 신호를 연결하는 데 필요한 작동 수는 위치 사이의 거리에 따라 증가한다.
- ConvS2S의 경우에는 선형으로, ByteNet의 경우에는 대수적으로 증가합니다.
- ConvS2S: Convolutional Sequence to Sequence(병렬 처리 용이, 일부분(filter size)만 감안)
- ByteNet: Dilated Convolution 사용해 CNN의 단점 해결
- 이는 위치 거리 사이의 의존도를 학습하는 것을 더욱 어렵게 만든다.
- Transformer에서는 Attention 가중 평균으로 인해 해상도가 감소하지만 Multi-Head Attention으로 상쇄하는 효과를 대가로 일정한 작동 수로 감소힌디.
- Self-Attention(Intra-Attention)은 문장의 표현법을 계산하기 위한 하나의 문장에서 다른 위치와 관련된 Attention 메커니즘이다.
- Self-Attention은 다양한 task에서 사용되었다.
- 문장 이해, 추상적 요약,텍스트 수반, 독립적인 문장 표현 학습
- attention 메커니즘을 기반으로 한 End-to-End 메모리 신경망은 단일 언어 Q&A와 언어 모델링 task에서 잘 작동하였다.
- Transformer는 RNN 또는 CNN을 사용하지 않고 input과 output의 표현법을 계산하는 것에 self-attention에 의존한 첫번째 모델이다.
Model Architecture
- 경쟁력 있는 신경망 시계열 변환 모델은 Encoder-Decoder 구조를 지니고 있다.
- Encoder는 input의 표현 (x1,⋯,xn)을 지속적인 표현법 z=(z1,⋯,zn)으로 나타낸다.
- Decoder는 z로 output sequence (y1,⋯,ym)을 발생시킨다.
- 각 모델의 과정은 이전에 발생한 신호를 다음 시각의 input으로 사용하여 자동회귀적이다.
- Transformer는 Encoder와 Deocder에 전반적으로 Self-Attention과 Point-wise, FC Layer을 쌓은 구조를 사용한다.
Encoder and Decoder Stacks
- Encoder
- N=6인 동일한 계층으로 구성
- 각 계층은 2개의 하위 계층 보유
- Multi-head Self-Attention 메커니즘
- Simple Position-wise FC feed-forward 신경망
- 각 2개의 하위 계층에 잔차 연결을 사용하고 Layer Nomalization 사용
- LayerNorm(x+Sublayer(x))
- 잔차 연결을 위해 모든 계층은 output의 차원을 512로 설정
- Decoder
- N=6인 동일한 계층으로 구성
- Encoder 계층의 2개의 하위 계층에 세 번째 하위 계층 추가
- Encoder stack의 output에 Multi-head Attention을 수행
- 각 하위 계층에 잔차 연결 사용하고 Layer Normalization
- 나중 위치에 있는 요소가 참여하는 것을 방지하기 위해 Self-Attention을 수정하여 사용
- Masking 사용: i번째 예측에는 i−1번째 까지의 output 사용
- output의 embedding은 위치에 따라 결정되기 때문
Attention
- Query와 Key-Value 쌍의 mapping(사상)을 의미
- output은 value의 가중합으로 계산된다.
- 각 value의 가중치는 query와 함께 해당 key의 호환되는 함수에 의해 계산
- Scaled Dot-Product Attention
- input은 dk차원의 query와 key, dv차원의 value로 구성
- query와 모든 key의 내적을 계산하고 dk로 각각 나누고 value의 가중치를 얻기 위해 softmax 함수를 적용
Attention(Q,K,V)=softmax(dkQKT)V
- 두 개의 가장 흔한 attention 함수는 additive attention과 dot-product attention이다.
- dot-product attention은 dk로 나누는 것을 제외하고는 동일하다.
- additive attention은 1개의 은닉 층의 Feed-Forward 신경망을 사용하여 계산한다.
- 두 개의 이론적 복잡도는 비슷하지만, dot-product attention이 매우 최적화된 행렬곱 코드를 사용하기 때문에 실전에서는 더욱 빠르고 효율적이다.
- scaling을 수행하지 않는다면 dk가 작으면 두 개의 방법의 성능은 비슷하지만 dk가 크면 additive attention이 더욱 우수하다.
- 내적이 큰 규모로 성장하고 softmax 함수를 극히 경사가 작은 지역에 머물게 하기 때문
- 이를 방지하기 위해 dot product를 dk1로 scaling
- Multi-Head Attention
- dmodel 차원의 단일 attention 함수를 사용하는 대신, 각각 dk, dk, dv 차원으로 선형 결합을 학습한 query, key, value에 h번 모두 다르게 선형 결합을 하는 것의 장점을 발견했다.
- 각 병렬적으로 선형 결합한 버젼은 dv 차원의 output 값을 갖는다.
- concat을 해주고 다시 선형 결합을 거친다.
- 선형 결합을 통해 차원을 맞춘다.MultiHead(Q,K,V)=Concat(head1,⋯,headh)WOwhereheadi=Attention(QWiQ,KWiK,VWiV)
- 이 모델에서는 h=8로 설정하였다.
- dk=dv=dmodel/h=64
- 각 head의 차원이 감소돼, 전체 계산 비용은 single-head attention과 비슷하다.
- Applications of Attention in our Model
- query는 이전 시각의 Decoder 계층에서, key, value는 Encoder의 output으로부터 구해진다.
- 이는 Decoder에서 input 문장의 모든 위치가 참석할 수 있도록 한다.
- Encoder는 Self-Attention 계층을 포함한다.
- Self-Attention 계층에서 key, value, query는 같은 곳(Encoder의 이전 계층의 결과)에서 나온다.
- Decoder도 Self-Attention Layer를 포함한다.
- 각 위치가 해당 위치까지의 모든 위치에 주의를 기울일 수 있도록 한다.
- 자동 회귀 속성을 유지하기 위해 왼쪽으로 정보가 흐르는 것을 방지
- masking을 활용(softmax의 부적절한 연결과 일치하는 input을 −∞로 설정)
Position-wise Feed-Forward Networks
- Encoder와 Decoder는 FC network도 포함한다.
- 각 위치에 개별적으로 동일하게 적용한다.
- ReLU를 사용하여 두 개의 선형 변환으로 구성되었다.
FFN(x)=max(0,xW1+b1)W2+b2
- 다른 위치에서는 동일하지만 레이어마다 다른 매개변수를 사용
- kernel size가 1인 2개의 합성곱으로 설명 가능(∼ LeNet)
- input과 output의 차원 dmodel=512, 내부 계층의 차원 dff=2048
Embeddings and Softmax
- input과 output의 token을 dmodel차원의 벡터로 변환하기 위해 embedding을 사용
- Decoder의 output을 다음 token의 확률을 예측하기 위해 일반적으로 선형 변환과 softmax 함수 사용
- 두 개의 embedding 계층과 pre-softmax 선형 변환 사이에 같은 가중치 행렬을 공유
- 모두 같은 embedding layer 쓴다는 뜻
- embedding 계층에서, 가중치를 dmodel에 곱
Positional Encoding
- 해당 모델은 순환과 합성곱을 포함하지 않기 때문에, 순서를 고려하기 위해서 토큰의 순서 관련 특정 정보를 입력해주어야 한다.
- Encoder, Decoder의 묶음의 전에 input embedding에 positional encoding을 더한다.
- positional encoding은 embedding과 더할 수 있게 같은 차원의 크기 dmodel을 갖는다.
- positional encoding은 고정된 방법과 학습하는 방법 여러가지가 있다.
- 그 중 sine, cosine 함수를 사용했다.
PE(pos,2i)=sin(100002i/dmodelpos)PE(pos,2i+1)=cos(100002i/dmodelpos)
- 수식 설명
- pos는 위치, i는 차원
- positional encoding의 각 차원은 sinusoid와 일치
- 파장은 2π에서 10000⋅2π까지 기하학적 진행을 형성한다.
- 모델이 상대적인 위치에 참석하는 것을 쉽게 학습한다는 것을 가정하였기 때문에 위 수식 채택
- 고정 offset(편차) k에 대해 PEpos+k는 PEpos의 선형 함수로 나타낼 수 있기 때문에 위 수식 채택
- Positioning Embedding 방법 대신 다른 방법을 사용하여 실험해봤는데 거의 동일한 결과 보임
- sinusoid 버전이 문장 길이를 더 길게 추론하기 때문에 해당 방법 채택
Why Self-Attention
- Self-Attention 사용 이유
- 계층별 전체 계산 복잡도
- 작업 횟수를 최소로 가져가는 병렬 처리할 수 있는 계산량
- 장거리 종속성 간의 거리
- 장거리 종속성을 학습하는 것은 많은 시계열 변환 task의 핵심이다.
- 종속성을 학습하는데 영향을 미치는 하나의 핵심 요소는 순전파, 역전파 신호의 길이다.
- input과 output의 위치 거리가 짧을수록 장거리 의존도를 학습하기 쉽다.
- 다른 계층으로 구성된 신경망의 input과 output의 최대 거리를 비교할 수 있다.
- 비교
- Recurrent Layer
- Self-Attention Layer는 모든 위치를 일정한 수의 순차적으로 연결하는 반면, recurrent layer는 O(n) 개의 작업을 필요로 한다.
- 계산 복잡도 측면에서 문장 길이 n이 representation 차원 d보다 작을 때 recurrent layer보다 더 빠르다.
- 매우 긴 문장을 포함하는 task의 계산 복잡도 성능을 향상시키기 위해, self-attention은 각 출력 위치를 중심으로 하는 입력 문장에서 크기 r의 이웃만큼만 고려해야 한다.
- O(n/r)로 최대 길이를 증가시킬 것이다.
- Convolutional Layer
- kernel width k가 n보다 작은 single convolutional layer는 input과 output의 위치를 모두 연결하지 않는다.
- 인접 커널의 경우 O(n/k) convolutional layer stack을 필요하고 확장된 convolution의 경우 O(logk(n)) stack이 필요해 두 위치 사이에 가장 긴 경로의 길이가 증가한다.
- convolutional layer는 k에 의해 일반적으로 recurrent layer보다 비용이 크다.
- Separable Convolution는 복잡도를 O(k⋅n⋅d+n⋅d2)으로 상당히 감소시킨다.
- k=n이라면, self-attention과 point-wise feed-forward 계층을 갖는 우리 모델과 복잡도 동일
- self-attention은 더 해석 가능한 모델 생성 가능
- 각 attention의 head는 다른 작업을 수행하는 방법을 배우고 문장의 구문 및 의미 구조와 관련된 행동을 보인다.
Training
Training Data and Batching
- 약 450만개의 문장 쌍이 있는 WMT 2014 English-German dataset으로 학습했다.
- 문장들은 약 37000개의 단어를 공유하는 byte-pair encoding되었다.
- English-French 부분에서는 조금 더 큰 WMT 2014 English-French dataset을 사용했다.
- 360만개의 문장과 32000개의 단어로 이뤄짐
- 문장 쌍은 대략 같은 길이로 batch로 나뉘었다.
- 각 학습 batch는 25000개의 source/target token을 포함하는 문장 쌍을 포함한다.
Hardware and Schedule
- 8개의 NVIDIA P100 GPU를 사용했다.
- 각 학습 step은 0.4초가 소요되었고 총 100,000회 12시간동안 학습하였다.
- 우리의 큰 모델은 각 step마다 1초가 소요되었고 300,000 step을 3.5일동안 학습하였다.
Optimizer
- Adam optimizer 사용
- β1=0.9, β2=0.98, ϵ=10−9
- 학습률: dmodel−0.5⋅min(stepnum−0.5,stepnum⋅warmupsteps−0.5)
- 첫 warmup step에 학습률을 선형적으로 증가시키는 것과 일치한다.
- 그 후 부분적으로 감소시킨다.
- warmupsteps=4000으로 설정
Regularization
- Residual Dropout
- add&norm을 수행하기 전 하위 계층의 output에 dropout 적용
- Encoder, Decoder stack에 embedding과 positional encoding의 합에도 dropout 적용
- dropout 비율은 0.1로 설정
Results
Machine Translation
- WMT 2014 English-to-German 번역 task에서 큰 transformer 모델은 이전에 보고된 모델보다 더 뛰어난 성능을 보였다.
- WMT 2014 English-to-French 번역 task에서도 SOTA를 이뤘고 학습 비용은 1/4 줄였다.
- dropout 비율은 0.3 대신 0.1 사용
- 10분 간격으로 작성된 최근 5개의 checkpoint를 평균하여 얻어진 single model을 base model로 설정
- 큰 모델의 경우 20개의 checkpoint를 평균
- beam size를 4, α=0.6으로 설정하여 beam search를 사용
- development dataset으로 hyperparameter tuning
- 최대 output 길이는 input 길이 + 50으로 설정하였지만, 가능한 빨리 종료하도록 하였다.
Model Variations
- Transformer의 다른 요소의 중요성을 평가하기 위해 base model을 다른 방향으로 변화하고 성능 변화를 측정했다.
- development dataset인 newstest2013로 English-to-German 번역
- beam search는 사용했지만, checkpoint averaging은 사용핮 ㅣ않았다.
- attention head와 key, value의 차원을 다르게 했다.
- single-head attention은 BLEU가 0.9가 낮았고 너무 많은 head의 경우에도 감소했다.
- attention key의 크기 dk를 줄이는 것은 모델의 질을 감소시킨다.
- 호환성을 정의하는 것은 쉽지 않고 dot product가 아닌 더욱 정교한 호환성 함수를 사용하는 것이 이득일 것이다.
- 더욱 큰 모델일수록 더 잘 학습하고, dropout은 과적합을 회피하는데 매우 도움이 된다.
- Sinusoidal Positional Encoding을 하습된 Positional Embedding으로 대체하였더니 기존 성능과 동일했다.
English Constituency Parsing
- Transformer가 다른 작업으로 일반화할 수 있는지 평가하기 위해 영어 구성 요소 구문 분석에 대한 실험을 수행
- 출력은 강력한 구조적 제약을 받고 입력보다 훨씬 길다.
- 또한 RNN Encoder-Decoder 구조는 작은 data 체제에서 SOTA를 이룰 수 없다.
- 대략 40K training 문장을 dmodel=1024로 한 4개 계층 Transformer을 학습
- 1700만 문장에서 더 높은 신뢰도와 BerkleyParser corpus를 사용하여 반지도 학습을 진행
- WSJ 전용 설정에 1600만 token을 사용하고 반지도 설정에 3200만 token 사용
- 최대 output 길이를 input 길이 + 300으로 증가시키고 beam size = 21 α=0.3으로 설정
- parameter tuning을 위한 실험은 조금밖에 수행하지 않았다.
- 그럼에도 불구하고 좋은 성능을 보였다.
- 4000만 문장의 WSJ set에서 후련하는 경우에도 BerkeleyParser보다 성능이 뛰어남
Conclusion
- Encoder-Decoder 구조에서 사용되는 RNN을 Multi-head Self Attention으로 대체함으로써 전체적으로 Attention을 기반으로 했다.
- Recurrent/Convolutional 기반 구조보다 상당히 빠르고 성능도 SOTA를 이루었다.
- 이 모델이 다른 task에 적용될 것을 기대한다.
- 텍스트 뿐만 아니라 이미지, 오디오 및 비디오 같은 것에도 적용 가능하도록 할 예정