[논문 리뷰] Attention Is All You Need

권유진·2022년 6월 26일
0

논문 리뷰

목록 보기
9/17

Abstract

  • 지배적인 순서 변환 모델은 Encoder, Decoder을 포함한 복잡한 RNN, CNN을 기반으로하였다.
  • 가장 성능이 좋은 모델은 attention 매커니즘을 사용하여 Encoder와 Decoder을 이은 것이다.
  • attention 매커니즘만을 기반으로 한 Transformer라는 단순한 신경망 구조를 제안한다.
  • 병렬 처리가 가능하고 학습 시간이 더 적게 들면서도 성능은 더 높았다.
  • 대규모 및 제한된 학습 데이터 모두를 사용하여 영어 구문 분석에 성공적으로 적용함으로써 다른 작업에 잘 일반화 됨

Introduction

  • RNN, LSTM, GRU는 시계열 모델과 Seq2Seq모델의 SOTA를 만드는데 고정적으로 사용되었다.
  • Encoder, Decoder의 범위를 넓히는데 수많은 노력이 존재하였다.
  • RNN 모델은 전형적으로 input과 output의 위치를 통해 계산을 진행한다.
    • 이전 시점의 은닉층(ht1h_{t-1})과 t시각의 입력을 통해 해당 시점의 은닉 상태(hth_t)를 생성한다.
      • 이로 인해 병렬화는 불가능하고 메모리 제약으로 인해 길이가 긴 순서 데이터에 취약하다.
      • factorization trick과 conditional computation으로 계산 효율성이 개선되었다.
  • Attention 매커니즘으로 인해 input, output 거리에 관계 없이 시계열 모델을 종속성을 모델링할 수 있다.
    • RNN과 함께 사용되기도 한다.
  • 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)(x_1, \cdots, x_n)을 지속적인 표현법 z=(z1,,zn)z = (z_1, \cdots, z_n)으로 나타낸다.
    • Decoder는 zz로 output sequence (y1,,ym)(y_1, \cdots, y_m)을 발생시킨다.
    • 각 모델의 과정은 이전에 발생한 신호를 다음 시각의 input으로 사용하여 자동회귀적이다.
  • Transformer는 Encoder와 Deocder에 전반적으로 Self-Attention과 Point-wise, FC Layer을 쌓은 구조를 사용한다.

Encoder and Decoder Stacks

  • Encoder
    • N=6N=6인 동일한 계층으로 구성
    • 각 계층은 2개의 하위 계층 보유
      • Multi-head Self-Attention 메커니즘
      • Simple Position-wise FC feed-forward 신경망
    • 각 2개의 하위 계층에 잔차 연결을 사용하고 Layer Nomalization 사용
      • LayerNorm(x+Sublayer(x))LayerNorm(x+Sublayer(x))
      • 잔차 연결을 위해 모든 계층은 output의 차원을 512로 설정
  • Decoder
    • N=6N=6인 동일한 계층으로 구성
    • Encoder 계층의 2개의 하위 계층에 세 번째 하위 계층 추가
      • Encoder stack의 output에 Multi-head Attention을 수행
    • 각 하위 계층에 잔차 연결 사용하고 Layer Normalization
    • 나중 위치에 있는 요소가 참여하는 것을 방지하기 위해 Self-Attention을 수정하여 사용
      • Masking 사용: ii번째 예측에는 i1i-1번째 까지의 output 사용
      • output의 embedding은 위치에 따라 결정되기 때문

Attention

  • Query와 Key-Value 쌍의 mapping(사상)을 의미
  • output은 value의 가중합으로 계산된다.
    • 각 value의 가중치는 query와 함께 해당 key의 호환되는 함수에 의해 계산
  • Scaled Dot-Product Attention
    • input은 dkd_k차원의 query와 key, dvd_v차원의 value로 구성
    • query와 모든 key의 내적을 계산하고 dk\sqrt{d_k}로 각각 나누고 value의 가중치를 얻기 위해 softmax 함수를 적용
      Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V) = softmax(\cfrac{QK^T}{\sqrt{d_k}})V
    • 두 개의 가장 흔한 attention 함수는 additive attention과 dot-product attention이다.
      • dot-product attention은 dk\sqrt{d_k}로 나누는 것을 제외하고는 동일하다.
      • additive attention은 1개의 은닉 층의 Feed-Forward 신경망을 사용하여 계산한다.
      • 두 개의 이론적 복잡도는 비슷하지만, dot-product attention이 매우 최적화된 행렬곱 코드를 사용하기 때문에 실전에서는 더욱 빠르고 효율적이다.
      • scaling을 수행하지 않는다면 dkd_k가 작으면 두 개의 방법의 성능은 비슷하지만 dkd_k가 크면 additive attention이 더욱 우수하다.
        • 내적이 큰 규모로 성장하고 softmax 함수를 극히 경사가 작은 지역에 머물게 하기 때문
        • 이를 방지하기 위해 dot product를 1dk\cfrac{1}{\sqrt{d_k}}로 scaling
  • Multi-Head Attention
    • dmodeld_{model} 차원의 단일 attention 함수를 사용하는 대신, 각각 dkd_k, dkd_k, dvd_v 차원으로 선형 결합을 학습한 query, key, value에 hh번 모두 다르게 선형 결합을 하는 것의 장점을 발견했다.
    • 각 병렬적으로 선형 결합한 버젼은 dvd_v 차원의 output 값을 갖는다.
    • concat을 해주고 다시 선형 결합을 거친다.
      - 선형 결합을 통해 차원을 맞춘다.
      MultiHead(Q,K,V)=Concat(head1,,headh)WOwhere  headi=Attention(QWiQ,KWiK,VWiV)MultiHead(Q,K,V) = Concat(head_1, \cdots, head_h)W^O\\ where\;head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)
    • 이 모델에서는 h=8h=8로 설정하였다.
    • dk=dv=dmodel/h=64d_k = d_v = d_{model}/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을 -\infty로 설정)

Position-wise Feed-Forward Networks

  • Encoder와 Decoder는 FC network도 포함한다.
  • 각 위치에 개별적으로 동일하게 적용한다.
  • ReLU를 사용하여 두 개의 선형 변환으로 구성되었다.
    FFN(x)=max(0,xW1+b1)W2+b2FFN(x) = max(0, xW_1+b_1)W_2 + b_2
  • 다른 위치에서는 동일하지만 레이어마다 다른 매개변수를 사용
  • kernel size가 1인 2개의 합성곱으로 설명 가능(\sim LeNet)
    • input과 output의 차원 dmodel=512d_{model}=512, 내부 계층의 차원 dff=2048d_{ff} = 2048

Embeddings and Softmax

  • input과 output의 token을 dmodeld_{model}차원의 벡터로 변환하기 위해 embedding을 사용
  • Decoder의 output을 다음 token의 확률을 예측하기 위해 일반적으로 선형 변환과 softmax 함수 사용
  • 두 개의 embedding 계층과 pre-softmax 선형 변환 사이에 같은 가중치 행렬을 공유
    • 모두 같은 embedding layer 쓴다는 뜻
    • embedding 계층에서, 가중치를 dmodel\sqrt{d_{model}}에 곱

Positional Encoding

  • 해당 모델은 순환과 합성곱을 포함하지 않기 때문에, 순서를 고려하기 위해서 토큰의 순서 관련 특정 정보를 입력해주어야 한다.
  • Encoder, Decoder의 묶음의 전에 input embedding에 positional encoding을 더한다.
    • positional encoding은 embedding과 더할 수 있게 같은 차원의 크기 dmodeld_{model}을 갖는다.
    • positional encoding은 고정된 방법과 학습하는 방법 여러가지가 있다.
      • 그 중 sine, cosine 함수를 사용했다.
PE(pos,2i)=sin(pos100002i/dmodel)PE(pos,2i+1)=cos(pos100002i/dmodel)PE_{(pos,2i)} = \sin{(\cfrac{pos}{10000^{2i/d_{model}}})}\\ PE_{(pos,2i+1)} = \cos{(\cfrac{pos}{10000^{2i/d_{model}}})}
  • 수식 설명
    • pospos는 위치, ii는 차원
    • positional encoding의 각 차원은 sinusoid와 일치
    • 파장은 2π2\pi에서 100002π10000 \cdot 2\pi까지 기하학적 진행을 형성한다.
    • 모델이 상대적인 위치에 참석하는 것을 쉽게 학습한다는 것을 가정하였기 때문에 위 수식 채택
    • 고정 offset(편차) kk에 대해 PEpos+kPE_{pos+k}PEposPE_{pos}선형 함수로 나타낼 수 있기 때문에 위 수식 채택
    • Positioning Embedding 방법 대신 다른 방법을 사용하여 실험해봤는데 거의 동일한 결과 보임
      • sinusoid 버전이 문장 길이를 더 길게 추론하기 때문에 해당 방법 채택

Why Self-Attention

  • Self-Attention 사용 이유
    • 계층별 전체 계산 복잡도
    • 작업 횟수를 최소로 가져가는 병렬 처리할 수 있는 계산량
    • 장거리 종속성 간의 거리
      • 장거리 종속성을 학습하는 것은 많은 시계열 변환 task의 핵심이다.
      • 종속성을 학습하는데 영향을 미치는 하나의 핵심 요소는 순전파, 역전파 신호의 길이다.
        • input과 output의 위치 거리가 짧을수록 장거리 의존도를 학습하기 쉽다.
      • 다른 계층으로 구성된 신경망의 input과 output의 최대 거리를 비교할 수 있다.
  • 비교
    • Recurrent Layer
      • Self-Attention Layer는 모든 위치를 일정한 수의 순차적으로 연결하는 반면, recurrent layer는 O(n)O(n) 개의 작업을 필요로 한다.
        • 계산 복잡도 측면에서 문장 길이 nn이 representation 차원 dd보다 작을 때 recurrent layer보다 더 빠르다.
      • 매우 긴 문장을 포함하는 task의 계산 복잡도 성능을 향상시키기 위해, self-attention은 각 출력 위치를 중심으로 하는 입력 문장에서 크기 rr의 이웃만큼만 고려해야 한다.
        • O(n/r)O(n/r)로 최대 길이를 증가시킬 것이다.
    • Convolutional Layer
      • kernel width kknn보다 작은 single convolutional layer는 input과 output의 위치를 모두 연결하지 않는다.
        • 인접 커널의 경우 O(n/k)O(n/k) convolutional layer stack을 필요하고 확장된 convolution의 경우 O(logk(n))O(log_k(n)) stack이 필요해 두 위치 사이에 가장 긴 경로의 길이가 증가한다.
        • convolutional layer는 kk에 의해 일반적으로 recurrent layer보다 비용이 크다.
      • Separable Convolution는 복잡도를 O(knd+nd2)O(k\cdot n\cdot d + n\cdot d^2)으로 상당히 감소시킨다.
        • k=nk=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\beta_1 = 0.9, β2=0.98\beta_2 = 0.98, ϵ=109\epsilon = 10^{-9}
    • 학습률: dmodel0.5min(stepnum0.5,stepnumwarmupsteps0.5)d_{model}^{-0.5} \cdot \min (step_num^{-0.5}, step_num \cdot warmup_steps^{-0.5})
      • 첫 warmup step에 학습률을 선형적으로 증가시키는 것과 일치한다.
      • 그 후 부분적으로 감소시킨다.
      • warmupsteps=4000warmup_steps = 4000으로 설정

Regularization

  1. 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 모델은 이전에 보고된 모델보다 더 뛰어난 성능을 보였다.
    • Big Transformer model 사용
      • 8개 P100 GPU로 3.5일 소요
  • 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\alpha=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의 크기 dkd_k를 줄이는 것은 모델의 질을 감소시킨다.
    • 호환성을 정의하는 것은 쉽지 않고 dot product가 아닌 더욱 정교한 호환성 함수를 사용하는 것이 이득일 것이다.
  • 더욱 큰 모델일수록 더 잘 학습하고, dropout은 과적합을 회피하는데 매우 도움이 된다.
  • Sinusoidal Positional Encoding을 하습된 Positional Embedding으로 대체하였더니 기존 성능과 동일했다.

English Constituency Parsing

  • Transformer가 다른 작업으로 일반화할 수 있는지 평가하기 위해 영어 구성 요소 구문 분석에 대한 실험을 수행
  • 출력은 강력한 구조적 제약을 받고 입력보다 훨씬 길다.
  • 또한 RNN Encoder-Decoder 구조는 작은 data 체제에서 SOTA를 이룰 수 없다.
  • 대략 40K training 문장을 dmodel=1024d_{model} = 1024로 한 4개 계층 Transformer을 학습
    • 1700만 문장에서 더 높은 신뢰도와 BerkleyParser corpus를 사용하여 반지도 학습을 진행
    • WSJ 전용 설정에 1600만 token을 사용하고 반지도 설정에 3200만 token 사용
  • 최대 output 길이를 input 길이 + 300으로 증가시키고 beam size = 21 α=0.3\alpha=0.3으로 설정
    • parameter tuning을 위한 실험은 조금밖에 수행하지 않았다.
    • 그럼에도 불구하고 좋은 성능을 보였다.
  • 4000만 문장의 WSJ set에서 후련하는 경우에도 BerkeleyParser보다 성능이 뛰어남

Conclusion

  • Encoder-Decoder 구조에서 사용되는 RNN을 Multi-head Self Attention으로 대체함으로써 전체적으로 Attention을 기반으로 했다.
  • Recurrent/Convolutional 기반 구조보다 상당히 빠르고 성능도 SOTA를 이루었다.
  • 이 모델이 다른 task에 적용될 것을 기대한다.
  • 텍스트 뿐만 아니라 이미지, 오디오 및 비디오 같은 것에도 적용 가능하도록 할 예정
profile
데이터사이언스를 공부하는 권유진입니다.

0개의 댓글