[논문 리뷰] Attention Is All You Need | Transformer (2017)

tu11p·2023년 9월 3일
0

Paper Review

목록 보기
2/9
post-thumbnail

[논문 링크]

From NIPS 2017

0. Abstract

  • 지금까지의 대부분 시퀀스 변환(sequence transduction) 모델들은 복잡한 RNN or CNN을 기반으로 한다.
    • Encoder + Decoder 구조
  • 가장 성능이 뛰어난 모델들도 인코더와 디코더를 Attention mechanism으로 연결한 것
  • 우리는 순환 구조와 합성곱 구조를 완전히 없애고 어텐션으로만 구성된 새로운 모델을 제안한다: Transformer
  • 트랜스포머는 더 성능이 우수하면서도 병렬화가 가능하고 학습 시간이 짧다.
  • 트랜스포머는 제한된 학습 데이터로 다른 task에도 일반화해서 적용 가능함을 확인했다. (ex. English constituency parsing)

1. Introduction

  • 그동안 기계 번역 같은 transduction problem에서는 RNN, LSTM, GRU가 SOTA를 달성했다.
  • 하지만 RNN 계열의 모델은 입력과 출력 시퀀스의 position을 순차적으로 계산하기 때문에 병렬 처리 및 일괄 처리가 제한됨
    • h_t를 계산하기 위해 h_t-1과 t-1(input)이 제공되어야 함
    • t 이전의 모든 출력이 차례로 계산되어야지만 최종적인 output 생성 가능
    • 이러한 문제는 시퀀스의 길이가 더 길수록 더 문제
  • 어텐션 매커니즘은 입출력 시퀀스의 길이에 상관없이 사용할 수 있어 많이 사용되지만, 대부분 RNN계열과 함께 사용됨.
  • 그래서 우리는 RNN없이 어텐션만을 사용하는 transformer를 제안, 짧은 훈련 시간만으로도 SOTA 달성한다.

2. Background

  • (RNN 계열 모델들의 특징인) Sequential한 연산을 줄이려는 시도는 다양한 모델들에서 이루어져 왔다.
    • Ex) Extended Neural GPU, ByteNet, ConvS2S
  • 이런 모델들은 CNN을 basic building block으로 사용하고, 모든 input과 output position에 대해 병렬 연산을 시도했다.
    • 하지만 이후 input과 output의 position을 연결하는데 필요한 연산이 너무나 폭등했고,
    • 이로 인해 멀리 떨어진 position 간의 종속성(dependency)을 학습하는 것이 더욱 어려워졌다.
    • Transformer에서는 이 연산을 줄였지만 multi-head attention을 통해 그 부작용을 상쇄했다.
  • Self-attention은 sequence의 representation을 계산하기 위해 한 sequence에서 다른 sequence를 연결하는 방식
    • 서로가 서로에게 가중치 부여
    • 다른 다운스트림 작업에서 성공적으로 사용됨
  • End-to-end memory network는 순차적인 recurrence 보다 recurrent attention에 기반하고, 간단한 언어의 question answering이나 language modeling task에서 좋은 성능을 보인다.
  • 그럼에도 불구하고 Transformer는 순차적인 RNN이나 CNN을 사용하지 않고 입출력의 표현(representation)을 위해 오로지 attention에만 의존하는 최초의 모델이다.

3. Model Architecture

  • 대부분의 시퀀스 변환 모델은 encoder-decoder 구조를 가진다.
  • 인코더는 (x1, x2, … , x_n)이 입력 시퀀스로 주어지면 연속적인 표현인 Z = (z1, z2, …, z_n)으로 매핑한다.
  • 디코더는 Z를 입력으로 받아 출력 시퀀스 (y1, y2, … , y_m)을 한번에 한 요소씩 생성한다.
  • transformer는 auto-regressive: 이전 단계에서 생성된 출력을 현재 단계의 추가적인 입력으로 사용하므로

  • 트랜스포머의 전체적인 구조는 위와 같음

3.1 Encoder and Decoder Stacks

  • 인코더
    • 6개의 동일한 레이어가 stack된 구조
    • 각 레이어는 두 개의 sub-layer로 구성
      1. Multi-head self-attention mechanism
      2. Position-wise Fully Connected Feed-Forward Network
    • 각 sub-layer에는 residual connection과 layer normalization을 적용
      • LayerNorm(x+Sublayer(x))
      • residual connection을 용이하게 하기 위해 sub-layer와 embedding layer의 output의 차원은 512
        • residual connection 하려면 input과 연결된 output의 차원이 같아야 하므로

  • 디코더
    • 인코더처럼 6개의 동일한 레이어가 stack된 구조
    • 인코더와 다르게 각 레이어에는 하나의 sub-layer가 추가됨
      1. Masked Multi-Head Self-Attention mechanism
        1. 다음 스텝 position은 attention을 하지 않도록 masking
        2. i번째 position을 예측할 때는 i보다 작은 position의 output만을 사용
      2. Multi-Head Self-Attention mechanism
        1. Encoder의 output에 대해 attention 연산을 수행
      3. Position-wise Fully Connected Feed-Forward Network
    • 인코더와 비슷하게 각 sub-layer에는 residual connection과 layer normalization이 적용

3.2 Attention

Attention은 query와 key-value 쌍 세트를 출력에 매핑하는 것이라고 할 수 있다. outputr은 value의 weighted-sum으로 계산된다.

3.2.1 Scaled Dot-Product Attention

  • Transformer에서 수행되는 attention은 ‘Scaled Dot-Prodoct Attention’이라고 부른다.
    • 이는 query와 key들을 모두 내적한 뒤 √dk로 나누어 주고, softmax 연산을 적용하는 것
  • 보통 자주 쓰이는 attention mechanism에는 Additive attention과 dot-product(multiplicative) attention 두가지가 있음
    1. Additive attention
      1. Single hidden layer로 구성된 feed-foward network를 사용해서 단어 간 일치도 계산
    2. Dot-product attention
      1. Scaling 된 점을 빼면 동일
    • 이론적 복잡도는 두 attention이 비슷하지만 실제 연산 속도와 공간 효율도가 dot-product attention이 휠씬 좋다.
    • dk값이 크면 내적이 커져서 기울기가 매우 작아지는 것으로 의심됨 → 스케일링으로 조정했다.

3.2.2 Multi-Head Attention

  • 단일 구조의 attention보다 h개의 attention을 선형으로 연결하는 것이 더 성능적으로 유리한 것을 확인했다. (h=8)
  • attention 연산들은 병렬로 수행되어 각각의 output을 생성하고 concat되어 최종 값이 된다.
  • Multi-head attention은 서로 다른 위치에 있는 단어에 집중(attention)하는 성능을 향상시켰다.
    • 8개의 Representation subspaces를 제공하여 여러 position의 representation에 대해 정보를 결합하여 attention 연산을 수행할 수 있기 때문
  • Head의 output에서 차원이 축소되기 때문에, 총 계산 비용은 결론적으로 single head attention 과 유사하다.

3.2.3 Application of Attention in our Model

Transformer에서는 Multi-head attention을 세가지 방식으로 사용했다:

  1. ‘Encoder-decoder attention’ layer
    1. 이 레이어의 query는 이전 단계의 decoder layer로부터 오고, key & value는 encoder의 ouput으로부터 온다.
    2. 이는 decoder의 모든 position이 input sequence의 모든 position을 사용할 수 있게 한다.
  2. ‘Encoder Self-attention’ layer
    1. Self-attention에서는 모든 query, key, value가 같은 곳에서 온다. 즉, 이전 단계 encoder의 출력이 현재 단계 encoder의 입력이 된다.
    2. 따라서 각 encoder layer는 이전 layer까지가 처리한 정보를 활용할 수 있다.
  3. ‘Masked Decoder Self-attention’ layer
    1. Auto-regressive한 속성(출력값을 다시 입력으로 사용하는 것)을 보존하기 위해 뒤쪽의 position 정보를 참조하는 것을 막아주어야 하는데, transformer에서는 이를 위해 그러한 값들에 해당하는 softmax 값을 -∞로 마스킹했다.
    (논문에 없는 그림)
    (논문에 없는 그림)

3.3 Position-wise Feed-Forward Networks

  • Encoder와 Decoder는 둘다 각각 Fully Connected Feed-Forward Network를 통과한다.
  • 동일한 구조를 갖고 있는 network를 encoder와 decoder에서 갖고 있어서 position-wise라고 부른다.
  • 이 구조는 선형 변환 → ReLU → 선형 변환의 순서로 이루어진다.


(논문에 없는 그림)

  • 위 계산은 kernel size =1인 convolution을 두번 수행한 것으로 이해할 수도 있다.

3.4 Embeddings and Softmax

  • 다른 시퀀스 변환 모델 처럼 입력과 출력 토큰을 d_model 차원으로 변환시키기 위해 학습된 embedding을 사용했다.
  • 선형 변환과 softmax도 학습된 것을 사용했다.
  • embedding layer 두개와 softmax 전 선형변환에서는 동일한 weight matrix를 사용한다.

3.5 Positional Encoding

  • Transformer는 recurrent나 convolution을 사용하지 않으므로 시퀀스의 순서 정보를 사용하기 위해서는 토큰의 상대 or 절대 정보를 넣어줘야 할 필요가 있다.
  • 그래서 encoder와 decoder의 embedding에 Positional Encoding을 더했다.
  • Positional Embedding은 d_model과 같은 512의 차원을 가지며, 이는 입력 임베딩과의 결합을 위한 것이다.

  • position이 홀수일 때는 cos, 짝수일 때는 sin을 사용.

4. Why Self-Attention

  • Self-attention을 Recurrent와 Convolution layer와 비교한다.
  • 세가지 측면에서 self-attention을 쓰는 것이 유리했다.
    1. Layer 당 연산 복잡도

    2. 병렬화될 수 있는 연산의 양

      → 순차적인 연산(sequential operation)의 숫자가 최소가 되는 방향으로 계산함

    3. network 내 장거리 종속성(long-range dependency)의 최대 길이

      1. 장거리 종속성을 학습시키는게 시퀀스 변환 모델들에게는 큰 과제였다.
      2. 이 학습에 영향을 미치는 요소는 순방향 및 역방향 신호가 통과해야 하는 경로의 ‘길이’이다.
      3. input과 output sequence의 position 사이 거리가 짧을수록 장거리 종속성을 배우기 더 쉽다.
      4. 따라서 우리는 input / output sequence의 position 사이의 maximum 거리 길이도 구해서 비교한다.

5. Training

Transformer의 훈련 방식에 대해 설명한다.

5.1 Training Data and Batching

  • Training Data
    • English-German dataset: Standard WMT 2014 Eng-Ger 450만 문장쌍
      • Byte-pair 인코딩 사용
    • English-French dataset: WMT 2014 Eng-Fre 3600만 문장
      • Word-piece 임베딩 사용
  • Batching
    • 각 배치는 대략 25000 source 토큰과 25000 target 토큰을 포함하는 문장 쌍들을 담고 있다.

5.2 Hardware and Schedule

  • P100 8개로 학습 돌렸다.
  • base model: 100,000 steps or 12시간 (step 당 0.4초)
  • big model: 300,000 steps(3.5일) (step 당 1초)

5.3 Optimizer

  • Adam optimizer라는 최적화 알고리즘을 사용했다. (β1 = 0.9, β2 = 0.98, ϵ = 10−9)
  • learning rate는 다음과 같은 공식에 의해 조절했다.
  • 위 공식은 warmup_steps(=4000) 단계에서는 learning rate를 선형적으로 증가시키고, 이후 단계에서는 step number의 역제곱근에 비례하여 leaning rate를 감소시키는 것을 의미한다.

5.4 Regularization

  • Residual Dropout
    • 각 sub-layer의 출력마다 그 출력이 다시 add & norm 되기 전에 dropout을 해준다.
    • 또한 embedding과 positional encodding 의 합들에도 dropout을 적용한다.
    • Base model에 사용한 dropout값 Pdrop = 0.1.
  • Label Smoothing
    • ϵls = 0.1의 label smoothing 값을 적용했다.
    • 이는 모델이 더 불확실한 것을 학습하지만 오히려 모델의 정확성과 BLEU 점수를 향상시킨다.

6. Results

6.1 Machine Translation

  • Eng-Ger 번역에서

    • Big model은, (앙상블을 포함한) 기존 모델보다 2.0이 넘는 BLEU의 향상을 보이면서 28.4의 SOTA를 달성했다.
    • Base model조차도, 기존 모델들의 성능을 능가하며 training cost는 절약했다.
  • Eng-Fre 번역에서

    • Big model은, 41.8의 BLEU를 기록하며 SOTA를 달성했는데, 그러면서도 훈련 비용은 기존 SOTA 모델들보다 1/4로 줄였다.
      • Pdrop=0.1 사용했다(0.3 대신)
      • 20 checkpoint의 평균으로 얻어진 single model을 사용했다.
    • Base model은, 5 checkpoint의 평균으로 얻어진 single model을 사용했다.
  • Beam Search를 사용했다.

    • Beam size = 4, Length Penalty α=0.6

    • 위 파라미터는 development set에 대한 실험 이후에 결정됐다.

    • 번역 시 최대 출력 길이는 입력 길이 +50이지만 최대한 짧게 출력한다.

    • Beam Search?

      • 확률이 높은 K개의 선택지만을 메모리에 관리 하면서 최상 우선 탐색을 진행하는 기법

      • 즉 Best First Search에서 기억 노드의 수를 제한하는 것

        (논문에 없는 그림)

      • Length Penalty: 번역 길이가 길어지면 페널티를 주는 가중치

      • Beam size를 크게하면 번역 성능이 올라가지만 디코딩 속도가 낮아짐

6.2 Model Variations

  • Transformer의 여러 구성 요소들의 중요성을 평가하기 위해 base model을 다양하게 수정해서 development set인 newstest2013에서 Eng-Ger 번역의 성능 변화를 측정했다.
  • Beam search는 사용했지만 Checkpoint averaging은 사용하지 않았다.

  • (A) 행에서는 3.2.2와 같이 Multi-head Attention의 head 수를 변경했다. single-head attention은 best setting 보다 BLEU가 0.9 낮지만, head가 너무 많으면 또 BLEU가 떨어진다.
  • (B) 행에서는 Attention의 key size(차원)인 d_k 값을 줄이면 모델의 성능이 줄어든다는 것을 알 수 있다. 이는 dot-product attention 보다 더 정교한 compatibility function이 존재할 수 있음을 시사한다.
  • (C) 행에서는 예상대로 더 큰(bigger) 모델이 더 좋다(better)는 것을 알 수 있다.
  • (D) 행에서는 dropout이 과적합을 피하는 데에 좋다는 것을 알 수 있다.
  • (E) 행에서는 기존에 사용한 Sinusoidal positional encoding을 learned positional encoding으로 바꿨는데 성능이 거의 동일했다.

6.3 English Constituency Parsing

  • Constituency Parsing
    • 구 단위 구문분석 (parsing에는 dependency parsing도 있음)

    • 주어 + 동사구 → 동사 + 명사구 → 정관사 + 명사

      (논문에 없는 그림)

  • Transformer가 번역이 아닌 다른 작업에도 일반화할 수 있는지 평가하기 위해 영어 구 단위 구문 분석에 대한 실험을 수행했다.
  • 이 작업은 구조적인 제약이 있고 입력보다 휠씬 더 긴 출력을 낸다는 특수한 과제를 갖고 있다.
  • WSJ의 문장에 대해 추가 학습을 시켰다. 일부는 반지도 학습을 시켰다.

  • 작업 별 튜닝이 부족했음에도 불구하고 transformer는 RNN 문법[8]을 제외하고 이전 모든 모델들보다 더 나은 성능을 보여준다.
  • RNN Seq2Seq[37]와 달리 Transformer는 40,000개의 WSJ 문장에 대해서만 훈련하는 경우에도 BerkeleyParser[29] 보다 성능이 뛰어나다.

7. Conclusion

  • 우리는 전적으로 Attention에만 의존한 시퀀스 변환 모델을 처음으로 제안했다.
    • 가장 흔하게 쓰이던 encoder-decoder 아키텍처를 multi-head self attention으로 바꿨다.
  • 번역 작업에서, Transformer는 recurrent나 convolution을 기반으로 하는 아키텍처보다 휠씬 빠르게 훈련할 수 있다. 우리는 Eng-Ger과 Eng-Fre에서 SOTA를 달성했다.
  • 우리는 transformer를 텍스트 말고도 이미지, 오디오, 비디오 같은 대규모 입출력을 효율적으로 처리하기 위해 attention mechanism을 더 살펴볼 것이다.
profile
What is NLP?

0개의 댓글