Attention Is All You Need

rhye·2023년 1월 19일
0

논문들

목록 보기
2/13
post-custom-banner

arxiv: https://arxiv.org/abs/1706.03762
date: 05/23/2022


Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems, 30.


Abstract

  • (논문 저술 시점) sequence 변환 모델, RNN/CNN 기반 모델
  • (논문 저술 시점) 뛰어난 성능을 보이는 모델, encoder&decoder를 attention mechanism으로 연결한 것

→ 우리가 지금부터 소개하고자 하는 Transformer, attention mechanism만을 기반으로 한다! (RNN/CNN 일절 쓰지 않겠다!)

Transformer를 활용해서 기계번역 해봤는데 성능 좋았고(기계번역 외의 task에서도 좋은 성능), training data 양에 상관없이 좋은 성능을 보였고, 모델 훈련 시간도 상당히 감소했음


Introduction

  • 기존 연구들

    • 지금까지 RNN/LSTM/GRU 등이 sequence 모델링의 주류였음.
    • 각 모델이 나름의 발전을 해오긴 했으나...
  • 기존 모델의 한계

    • RNN, input과 output sequence의 순서에 따라 계산을 진행 (hidden state ht를 ht-1와 t step의 input으로부터 생성)
    • 즉, 본질적으로 sequential 하다는 것인데, 이러한 특성은 훈련 과정에서 병렬화를 배제시킴
    • 한정된 메모리는 샘플간 배치화를 제한하기 때문에, sequence의 길이가 길어질수록 이는 critical한 문제를 야기함
    • 본질적인 한계를 개선하기 위해서 여러 시도가 있었지만 근본적인 해결은 되지 않았음
  • 해결책으로써의 attention mechanism

    • attention mechanism은 sequence에서 거리에 상관없는 dependency modeling을 가능케한다는 점에서 sequence modeling이나 transduction modeling에서 빠질 수 없는 부분이 되었으나, 대부분의 경우에서 attention mechanism은 항상 RNN과 함께 쓰임

→ 우리는 이와 완전히 다른, attention mechanism만으로 구성된 Transformer을 제안한다!

input과 output간의 global한 dependency 추출 위해 RNN에서 벗어난 모델 제안. Transformer, 유의미한 병렬화를 가능케하고 성능 개선 보장.


Background

  • 기존 연구들
    • sequential computation을 줄이기 위해서 여러 시도가 있어왔음(Extended Neural GPU, ByteNet, ConvS2S)
      • 다만 이 연구들, 모든 input, output 포지션에서 병렬적으로 hidden representation을 계산하는 CNN을 기초 단위로 하여 모델을 구성
      • 따라서 input과 output의 거리가 늘어날수록 계산도 마구 늘어남
      • 거리가 멀어질수록 dependency 학습이 어려워진다
  • Transformer
    • 이 계산이 상수번으로 줄어든다
    • attention 가중 position을 평균내는 과정에서 유효 해상도가 감소할 수 있으나, 이는 Multi-head Attention으로 상쇄 가능!
  • Self-attention (intra-attention)
    • 한 sequence의 representation 계산을 위해 해당 단일 sequence 내에서 서로 다른 위치에 있는 요소들을 관련시키는 attention mechanism
  • +a
    • end-to-end memory networks, sequence-aligned recurrence가 아닌 recurrent attention mechanism을 바탕으로 함. QnA / language modeling task에 좋은 성능을 보인다고 알려져있음

→ Transformer, sequence representation을 계산하기 위해 온전히 self-attention에만 의존하는 첫번째 transduction model. (RNN / CNN 안 쓴다!)


Model Architecture

  • 기존 연구
    - 가장 성능 좋았던 sequence transduction model(시퀀스 변환 모델) : encoder-decoder 구조를 가졌음

  • encoder : input sequence의 representation을 다른 연속적인 representation으로 매핑

  • decoder : 매핑된 결과를 바탕으로 output sequence를 생성 (한 timestep에 하나씩).
    이 때 모델은 이전에 생성된 결과를 추가적 input으로 활용하기 때문에 auto-regressive함

  • Transformer

    • encoder-decoder 구조를 사용하긴 하나, encoder-decoder 모두에서 self-attention과 point-wise, fully connected layers을 쌓아올려 사용
  • encoder과 decoder를 쌓아보자 ~

    • encoder

      • stack of N = 6 identical layers

      • 각 레이어, 2개의 sub-layer을 가짐

        • 1st sub-layer : multi-head self-attention mechanism
        • 2nd sub-layer : simple, position-wise fully connected feed forward network
      • 각 sub-layer, residual connection으로 연결 + layer normalization 뒤따름

        • 각 sub-layer의 output,
          LayerNorm(x+Sublayer(x))LayerNorm(x+Sublayer(x))LayerNorm(x+Sublayer(x))
      • Residual connection을 활성화시키기 위해서 모델의 모든 sub-layer과 embedding layer, dimension = 512인 결과값 도출 ( residual connection시 element-wise addition을 가능케 함 )

    • decoder

      • stack of N = 6 identical layers
      • 각 레이어, 3개의 sub-layer을 가짐 (기존 encoder의 두 sub-layer 사이에 추가적인 sub layer 추가)
        • 1st sub-layer : multi-head self-attention mechanism
        • 3rd sub-layer : encoder stack의 output에 대해 multi-head attention 수행
        • 2nd sub-layer : simple, position-wise fully connected feed forward network
      • 각 sub-layer, residual connection으로 연결 + layer normalization 뒤따름
      • decoder stack의 self-attention layer 수정 (Multi-head Attention → Masked Multi-head Attention)
        • masking, prediction 시 미래의 위치를 참고하지 못하게끔 함 (i 위치의 예측이 i 전의 위치의 output들만 참고하게끔-)

Attention

  • Attention function

    • query, key, value, output이 모두 벡터일 때, query와 key-value 쌍의 집합을 output에 mapping하는 것
    • output = query와 그에 대응되는 key의 compatibility function에 의해 계산된 weights들을 활용해 value를 가중합한 결과
  • Scaled Dot-Product Attention

    • input : queries and keys of dimention dk, and values of dimension of dv
    • process : 모든 query와 key를 내적 → 각각을 dk^1/2로 나눔 → apply softmax function (value들의 가중치를 얻기 위함)
      → 실제로는 queries를 하나의 행렬 Q로 보고 한꺼번에 계산. key와 value도 각각 행렬 K와 V로 봄.
    • output
    • 왜 Scaled Dot-Product Attention을 고안했는가?
      • 실질적으로 가장 흔히 쓰이는 attention function = additive attention , dot-product(multiplicative) attention
        • dot product attention, Scaled Dot-Product Attention과 유사하나 dk^1/2로 나누지 않는다는 점에서 차이가 있음
        • additive attention, 하나의 hidden layer으로 구성된 feed-forward network을 이용해 compatibility function 계산
      • 둘다 이론적으로 비슷한 복잡도를 가지지만, dot-product attention이 고도로 최적화된 행렬곱 코드로 구현될 수 있기에 좀 더 빠르고 공간효율적
      • dk가 작은 경우 두 function이 비슷한 성능을 보이나, dk가 큰 경우 additive attention의 성능이 좋음
        • dot product attention의 case에서 dk가 클수록 내적이 커지고, 큰 값이 softmax function을 거치면서 gradient가 매우 작아지는 결과가 초래되기에 성능이 저하되는게 아닐까?
          → 기존의 dot product attention에 dk^1/2로 scale하는 부분을 추가해 이런 현상을 방지 !
  • Multi-Head Attention

    • 왜 Multi-Head Attention을 고안했는가?
      • dmodel 차원의 key, value, query들을 가지고 single attention function을 수행하는 대신, query, key, value에 대해 linear projection를 h번 진행해서 각각을 dk, dk, dv 차원으로 변환하는 것이 더 낫다는 것을 발견 → 그렇게 변환한 것에 대해 병렬적으로 attention을 적용하는 것이 더 낫다!
      • 각각의 projected version들로부터 서로 다른 h개의 dv차원의 결과들을 얻고, 그 결과들을 concat한 후 한번 더 linear projection하여 최종 결과 도출
    • Multi-Head Attention, 모델이 서로 다른 domain들의 서로 다른 representation subspace들로부터 결합적으로 정보에 접근하도록 함. (single attention head의 경우에는 averaging으로 인해 그렇게 할 수 없음)
    • 본 연구에서는 h = 8의 parallel attention layers(heads) 상정
      • 각 head에 대해 dk = dv = dmodel/h = 64
      • 각 head의 차원이 감소되었기에, single head attention w/ full dimensionality와 computational cost 유사
  • Applications of Attention in our Model

    • Transformer는 multi-head attention을 세가지 다른 방식으로 사용함

      • Decoder ; encoder-decoder attention layer

        • query가 이전의 decoder layer에서부터 오고, memory keys와 values는 encoder의 최종 output으로부터 옴
        • 따라서 decoder가 input sequence 전체를 참고할 수 있음
          (seq2seq model의 전형적인 encoder-decoder attention 모방한 것)
      • Encoder ; self-attention layer

        • self-attention layer에 input되는 모든 key, value, query 동일한 곳에서 옴(이전 encoder 층의 output)
        • 각 encoder 층의 position, 이전 encoder 층의 모든 position 참고 가능
      • Decoder ; self-attention layer

        • 각 decoder 층의 position, 이전 decoder 층의 해당 position 이전까지의 모든 position 참고 가능
        • decoder의 auto-regressive 성질 보존 위해 decoder가 미래 시점의 단어들을 미리 조회하지 못하도록 막아야 → 이를 위해 scaled dot-product attention 내부(softmax input이 되는 값)에 masking 진행
  • Position-wise Feed-Forward Networks

    • encoder-decoder에 attention sub-layers 말고도 fully connected feed-forward network 존재 (encoder-decoder 각각의 position에 대해 독립적으로, 동등하게 적용)

    • 두 개의 linear transformation, ReLU activation in between

    • linear transformation이 다른 position들에 대해 동일하게 적용되는 한편, 층 별로 서로 다른 파라미터(W1, W2)를 사용

    • input 차원 = output 차원 = 512, FFN 내부의 hidden layer는 2048 차원을 가짐

  • Embeddings and Softmax

    • 다른 sequence transduction 모델처럼, input token과 output token을 dmodel 차원의 벡터로 변환하기 위해 learned embedding 활용
    • decoder의 output으로 다음 토큰의 확률을 예측하기 위해 일반적인 learned linear transformation과 softmax function 사용
    • 이 때, 두 embedding 층과 softmax 전의 선형변환에 동일한 가중치 행렬을 공유(다만, embedding layer들에서는 가중치에 dmodel1/2dmodel^{1/2}를 곱한 값을 사용)
  • Positional Encoding

    • Transformer가 어떠한 recurrence / convolution도 포함하지 않기 때문에 모델이 sequence 내 토큰들의 상대적/절대적 위치를 반영할 수 있도록 순서에 대한 정보를 주입해야만 함
    • 이를 위해 encoder와 decoder 최 하단에 위치한 input embeddings에 positional encodings를 더함
      • positional embedding, 다른 embedding과 같이 dmodel의 차원을 가짐(더하기 용이하게끔 !)
    • Transformer, 다양한 positional encoding 선택지 중 다른 주기의 since, cosine 함수들을 사용
      • 다른 positional encoding 선택지도 사용해보았으나, 해당 방식이 더 긴 sequence에 대해서 확장성이 좋았음
        ( pos = 토큰의 위치 인덱스, i = 벡터의 차원 인덱스)

Why Self-Attention

  • self-attention layers와 recurrent / convolution layers 비교*

  • self-attention layers의 이점

    • 레이어 당 총 계산의 복잡도

    • parallelized 될 수 있는 계산량(sequential operation의 최소값으로 계산됨)

    • 네트워크 내 long-range dependency의 path length
      cf. input되는 sequence 길이 n이 임베딩 차원 d보다 작은 경우가 많다!

      • sequential operation이 상수의 복잡도(O(1))을 가짐 → recurrent에 비해 성능 좋음!
      • 레이어 당 총 계산의 복잡도 측면에서 self-attention의 성능이 좋음!
      • maximum path length에 대해서도 O(1)의 복잡도 → recurrent / convolutional에 비해 성능 좋음!

      + 부수적으로 attention 활용할 때 attention distribution의 시각화 용이 → 모델의 설명력 ↑


Training

  • Training Data and Batching

    • Dataset : standard WMT 2014 English-German dataset
    • Batching : sentence pair, approximate sequence length로 batched → 각 training batch, 25000 source tokens - 25000 target tokens 로 구성
  • Hardware and Schedule

    • Hardware : machine with 8 NVIDIA P100 GPUs
    • Schedule
      • base model : step time, 0.4 sec / 100,000 steps / 12 hours
      • big model : step time, 1.0 sec / 300,000 steps / 3.5 days
  • Optimizer

    • adam optimizer

    • learning rate 조정

  • Regularization
    • Residual Dropout
      • 각 sub-layer output에 대해 dropout 적용(sub-layer input으로 들어가고 normalize되기 전에)
      • encoder와 decoder의 sums of embeddings / positional encodings에 dropout 적용
      • cf. dropout rate = 0.1
    • Label Smoothing
      • label smoothing of value = 0.1
      • 모호성이 증대되는 대신, 정확도와 BLEU score 개선

Results

  • Machine Translations

    • big model, BLEU score = 41.8, 기존의 다른 single models보다 성능 좋았음!
  • Model Variations

    • (B) attention key size dk를 줄이면 모델 성능이 떨어진다!
    • (C) & (D) bigger models, better! dropout, overfitting 방지에 도움!
    • (E) transformer에서 도입한 sinusoidal positional encoding, 다른 learned positional embeddings를 사용했을 때와 성능 유사
  • English Constituency Parsing

    • task-specific tuning이 별로 이루어지지 않았음에도 Transformer 놀라울정도로 성능이 좋음!

Conclusion

  • Attention만으로 이루어진 첫 sequence transduction model, Transformer의 고안
    • encoder-decoder 구조에서 가장 많이 쓰였던 recurrent layers를 multi-headed self-attention으로 대체
  • 기존 recurrent layer를 활용한 모델에 비해 번역 task에 대해서 training 속도가 굉장히 빨랐음
  • Transformer의 활용분야, text를 넘어 이미지, 오디오, 비디오 등 대규모 input, output을 다루는 task에 대해서도 확장할 예정이라고 함 !

Reference

post-custom-banner

0개의 댓글