본문 바로가기

paper review

[논문 리뷰/자연어처리] Attention Is All You Need

Abstract

  • RNN을 제거하고 Attention만 사용하는 모델, Transformer에 대해 소개한다.
  • 기계 번역 작업에 대한 실험 결과, 해당 모델은 병렬 처리가 가능하고 학습 속도가 상당히 단축되었다.
  • 번역 대회에서 SOTA를 달성하였다.

Introduction

  • RNN, 특히 LSTM, GRU는 시퀀스 모델링이나 기계 번역 문제 등에서 SOTA를 달성하였다.
  • 하지만 RNN의 순차적 계산 방법으로 병렬화를 제한하며 길이가 긴 시퀀스에 대해서 메모리 제약으로 배치를 제한시킨다.
  • Factorization tricks 나 conditional computation을 사용한 최근 연구는 계산 효율성을 상당히 높였지만 여전히 본질적인 문제는 남아있다.
  • Attention mechanism은 input, output 시퀀스의 길이와 관계없이 의존성을 모델링함으로써 sequence modeling과 transduction model에 중요한 요소로 자리잡았다. 하지만 대부분은 RNN과 결합되어 사용된다.
  • 해당 논문에서는 Transformer를 제안한다. Transformer는 recurrence를 회피하고 input과 output 사이의 global dependency를 찾는데 전적으로 attention mechanism에 의존한다.
  • Transformer는 더 많은 병렬화가 가능하며 SOTA를 달성하였다.

Model Architecture

아래 그림과 같이 Encoder와 decoder 각각에 stacked self-attention과 point-wise fully connected layers가 존재한다.

Encoder and Decoder Stacks

Encoder:

  • 6개의 layer로 구성된다.
  • 각 layer는 두개의 sub-layer를 가지고 있는데, 첫번째는 multi-head self-attention mechanism이며, 두번째는 간단한 position-wise fully connected feed-forward이다.
  • 각각의 sub-layer에 residual connection이 있고, 뒤이어 LayerNorm(x + Sublyer(x))인 layer normalization이 존재한다.
  • Residual connections을 용이하게 하기 위해 임베딩 레이어를 포함한 모든 sub-layer는 512 dimension의 output을 갖는다.

Decoder:

  • 동일하게 6개의 layer로 구성된다.
  • Encoder의 2개의 sub-layer에 더하여 encoder stack의 출력을 통해 multi-head attention을 수행하는 세번째 sub-layer가 존재한다.
  • Encoder와 동일하게 residual connection과 layer normalization이 존재한다.
  • Decoder의 self-attention sub-layer에 masking을 추가하여 현재 position보다 뒤에 있는 요소에 attention을 적용하지 못하도록 해준다. position i 이전에 있는 정보들만 사용하여 i에 대한 예측을 하는 것이다.

Attention

  • Attention function은 query와 key-value 쌍을 output에 매핑하는 것이며, query, keys, values, ouput은 모두 vector이다.
  • Output은 values의 가중치합으로 계산되며, 각 value에 할당된 weight은 key와 query의 compatibility function으로 계산된다.

Scaled Dot-Product Attention

  • Input으로는 dk 차원의 query와 key, dv차원의 values를 가진다.
  • query와 key의 dot product후 sqrt(dk)로 나눈다. 그 후 values에 대한 weight을 얻기 위해 softmax function을 적용한다.

  • Dot products가 너무 크면 softmax의 gradient가 작아지기 때문에 1/sqrt(dk)로 scaling한다.

Multi-Head Attention

  • dmodel-dimensional keys, values, queries를 사용하여 단일 attention function을 수행하는 것보다 query, key, value에 대해서 서로 다르게 학습된 dk, dv, dv 차원의 linearly project를 h번 계산하는 것이 더 좋다.
  • 왜냐하면 각 벡터의 크기를 줄여주고 병렬 처리가 가능하기 때문이다.

Position-wise Feed-Forward Networks

  • attention sub-layer 말고도 encoder와 decoder의 각 layer는 fully connected feed-forward network를 포함한다.
  • 해당 네트워크는 ReLU를 사이에 두고 두개의 선형변환으로 구성되어 있다.

  • 선형 변환은 position마다 같은 parameter를 공유하지만 layer가 바뀔 때 parameter가 달라진다.
  • Input과 output의 차원은 dmodel = 512 이며, inner-layer의 차원은 dff=2048 이다.

Embedding and Softmax

  • 다른 sequence transduction model과 비슷하게 input과 output 토큰을 dmodel 차원의 벡터로 변환하여 embedding을 학습한다.
  • 일반적으로 학습된 linear transformation과 softmax 함수를 사용하여 decoder의 output을 다음 token을 예측하기 위한 확률로 변환시킨다.
  • 해당 모델에서는 두개의 임베딩 레이어와 pre-softmax 선형 변환에서 동일한 weight 행렬을 공유한다.
  • Embedding layer에서는 sqrt(dmodel)을 weight에 곱한다.

Positional Encoding

  • 해당 모델에는 recurrence나 convolution이 존재하지 않기 때문에 sequence의 순서를 주입하기 위해 encoder와 decoder의 스택 하단에 positional encoding을 추가한다.
  • Positional encoding은 임베딩의 dmodel과 같은 차원을 가지므로 둘은 더해질 수 있다.
  • 해당 논문에서는 sin과 cos 함수를 사용하여 positional encoding을 하였다.

Why Self-Attention

  • Layer당 계산 복잡도가 줄어든다.
  • 병렬처리를 더 많이 할 수 있다.
  • 장거리 dependency를 잘 학습할 수 있다.
  • (추가) Self-attention은 더 해석이 가능한 모델을 만들어낸다.