[논문정리] Attention is all you need

대학원 수업은 이렇게 논문 발표도 하는구나......

어떤 논문을 발표할지 걱정스럽게 기다리다가 내가 들어본 논문이 나와서 바로 겟-토☆★

 

이런거에 신나는 내가 싫다..

이번에 공부해 볼 논문은 Attention is all you need!

정말 정말 유명한 논문이다. 

감히 자연어처리의 한 획을 그엇다고 할 수 있는............

 

시작해보자고~!

Transformer 논문리뷰 (Attention Is All You Need, NIPS 2017) (velog.io) ◀ 여기 있는 자료를 많이 참고하였음

 

 

 

논문정보

Attention is all you need


논문정리

Abstract

지배적인 시퀀스 변환 모델은 인코더와 디코더를 포함하는 복잡한 RNN/CNN 모델을 기반으로 한다.

뛰어난 성능을 가진 모델은 인코더와 디코더를 attention 메커니즘을 통해 연결함.

저자는 recurrence와 convolution을 완전히 제거하고 어텐션 구조에만 기반한 새롭고 간단한 네트워크 구조, Transformer를 소개한다.

두 가지 기계번역 실험에서 이러한 모델들이 품질에서 우수하면서도 병렬화가 더 가능하며 훈련하는 데 훨씬 적은 시간이 필요하다는 것을 보여준다.

해당 모델은 WMT 2014 영어-독일어 번역에서 기존의 최고성적보다 2BLEU 이상 향상시켰다.

Introduction

RNN, LSTM와 같은 GRU(게이트 반복 신경망)은 시퀀스모델링이나 언어모델링, 기계번역같은 transduction 문제에서 가장 최첨단 접근법으로 자리잡아왔다.

이후 recurrent 언어 모델과 인코더-디코더 구조의 한계를 확장하기 위한 노력들이 계속되었다.

 

Recurrent 모델은 일반적으로 입력/출력 시퀀스의 심볼(토큰) 위치를 따라 연산한다.

연산시간마다 단계별로 position을 정렬하면, 이전 hidden state인 $h_{t-1}$와 위치 $t$일때의 입력에 대한 함수인 hidden state $h_t$ 시퀀스를 생성한다.

 

본질적으로 순차적인 특성은 메모리 제약으로 인해 여러 예제에 걸친 일괄 처리가 제한되기 때문에  훈련예제의 병렬화를 배제시킨다.

하지만 시퀀스 길이가 길수록 병렬화가 중요해진다...

최근 연구에서 factorization 트릭과 조건부연산을 통해 계산 효율을 크게 향상시켰음 

후자의 경우, 모델의 성능또한 향상 시킴

그러나 sequential 연산의 근본적인 문제는 아직 남아있음

 

Attention 메커니즘은 입/출력 시퀀스에서 거리에 상관없는 의존성 모델링을 가능하게 하여 시퀀스 모델링과 transduction 모델의 필수적인 부분이 되었다.

그러나 몇 가지 경우를 제외한 거의 모든 경우에서 어텐션 구조는 recurrent network와 함께 사용된다.

 


본 연구에서는 입력과 출력 사이의 전역 의존성을 이끌어내기 위해

recurrence를 피하고  attention구조에 전적으로 의존하는 모델인 Transformer를 제안한다.

트랜스포머는 훨씬 더 많은 병렬화를 허용하며 8개의 P100 GPU로 12시간 정도 훈련하면

번역의 품질에 있어서 새로운 최신 상태에 도달할 수 있다.


Background

Sequential 연산을 줄이기 위한 목표는 Extended Neural GPU, ByteNet, ConvS2S의 기반을 형성했다. 이 모든 목표는 컨볼루션 신경망을 기본 구성요소로 사용하여 모든 입력/출력 위치에 대한 hidden 표현을 병렬로 계산하였다.

 

이러한 모델에서, 두개의 임의의 입력/출력 위치의 신호를 연결하는데 필요한 연산의 수는 두 위치에 대한 길이가 커질수록 증가하게 된다.

ConvS2S에선 선형적으로, ByteNet에선 로그적으로

▶ 길이가 멀어질수록 dependency를 학습하기 어려워짐

 

트랜스포머에서 이 연산수는 상수개로 감소한다.

어텐션 가중치 position을 평균냄으로써 유효 해상도 (effective resolution)가 감소하는 비용이 발생하지만, 섹션 3.2에서 다룰 Multi-head Attention으로 이를 상쇄한다.

 

Self-attention (or intra-attention-내부 어텐션)이란 시퀀스의 표현을 계산하기 위해 단일 시퀀스내에서 서로다른 위치에 있는 요소들을 관련시키는 메커니즘

reading comprehension, abstractive summarization, textual entailment and learning task-independent sentence representation등 여러 task에서 성공적으로 사용됨

 

End-to-End memory 네트워크는 시퀀스가 배열된 recurrence 대신 recurrent attention mechanism을 기반으로 하였으며, 간단한 언어 질문 답변 및 언어 모델링 작업에서 우수한 성능을 발휘하였다.

 

적어도 이 시점에서 Transformer는 RNN이나 컨볼루션을 신경하지 않고 오로지 self-attention에만 의존하여 입력과 출력에 대한 표현을 연산하는 최초의 변환모델이다.

Model Architecture

경쟁력 있는 neural sequence transduction 모델은 대부분 인코더-디코더 구조를 가지고 있다.

  • 인코더는 입력 시퀀스의 표현인 $(x_1, \cdots, x_n)$을 연속적인 표현 시퀀스 $\mathbf{z}=(z_1, \cdots,z_n)$로 매핑한다.
  • 디코더는 $\mathbf{z}$가 주어지면 출력 시퀀스 $y_1,\cdots,y_m$을 생성한다. (한번에 한 요소씩)

각 단계에서 모델이 생성할때마다 이전에 생성된 심볼을 추가적인 입력으로 사용하기 때문에 Auto-regressive

 

트랜스포머는 이 전체구조를 따르며 인코더와 디코더 모두에 대해 self-attention과 point-wise 완견연결층을 쌓아올려 이용한다.

그림 1

<Encoder and Decoder Stacks>

인코더

인코더는 $N=6$개의 동일한 레이어를 쌓아올린 형태로 구성되었다. 

각 레이어는 두개의 하위레이어가 있다.

Multi-head self-attention 메커니즘+ position-wise FC feed-forward 네트워크

각 하위레이어마다 residual connection을 차용하고, 이후 레이어 정규화를 거침

 

즉, 각 하위레이어의 출력은 $LayerNorm(x+Sublayer(x))$이다.

이때, $SubLayer(x)$는 서브레이어 자체에 의해 구현되는 함수

residual connection을 용이하게 하기 위해, 임베딩 계층 포함 모델 내 모든 하위레이어는 차원 $d_{model}=512$를 생성한다.

residual connection시 element-wise addition을 진행하려면 차원이 같아야 함

 

디코더

디코더도 N=6개의 동일한 레이어를 쌓아올린 형태로 구성됨

인코더 계층에 있는 두 개의 하위레이어 외에도 인코더단의 출력에 대해 Multi-head 어텐션을 수행하는 3rd 하위레이어를 추가로 삽입하였다.

인코더와 똑같이, 각 하위 레이어에 redidual connection을 사용하였고 이어서 레이어 정규화를 거침

또한, 디코더 단의 self-attention layer를 수정하여 position이 잇다른 위치로 이동하는 것을 방지한다

이렇게 마스킹하면 어떤 i번째 position에서 예측을 수행할 때, 미래에 올 위치에 접근하는 것이 불가능하고 해당 위치와 그 이전의 위치들에 대해서만 의존하도록 한다.

 

<Attention>

어텐션 함수는 query, key, value, output이 모두 벡터인 출력에 대해서 query와 key-value 쌍을 output에 매핑한다.

output은 value들의 가중치 합으로 계산하는데 이때, 각 value에 할당된 가중치는 해당 key를 가진 query와 연관된 함수에 의해 계산된다.

 

그림 2

Scaled Dot-Product Attention

Scaled Dot-Product Attention의 입력은 $d_k$차원에 대한 query, key와 $d_v$차원에 대한 value의 벡터들로 구성된다.

모든 key로 내적을 계산하고 각각을 $\sqrt{d_k}$로 나눈 다음, softmax함수를 적용하여 value의 가중치를 얻는다.

실제로 query들은 행렬 Q에 pack되어서, 동시에 attention 함수가 계산된다. 또, key와 value는 행렬 K,V로 함께 pack된다.

출력 행렬은 아래의 식으로 얻는다.

식 1

가장 일반적으로 사용되는 어텐션함수는 'additive attention', 'dot-product(multiplicative) attention'

Dot-product attention은 스케일링 인자인 $\frac{1}{\sqrt{d_k}}$를 제외하면 본 논문의 알고리즘과 같다.

additive attention은 단일 은닉층이 있는 feed-forward network를 이용하여 연관성함수(compatibility function)을 계산한다.

위의 두 가지는 이론적인 복잡성은 유사하지만, dot-product attention이 훨씬 빠르고 공간효율적이다. 

고도로 최적화된 행렬곱 코드를 사용하여 구현할 수 있기 때문

$d_k$의 값이 작은 경우에는 두 메커니즘이 유사하게 수행되지만, 큰 값에 대해 스케일링을 적용하지 않으면 additive attention의 성능이 더 좋음.

 $d_k$의 값이 큰 경우, 내적의 크기가 커져서 결과적으로 softmax함수에서 gradient가 매우 작아지는 saturate한 부분으로 $QK^T$가 입력된다고 의심하여 이를 방지하기 위해 스케일링 인자$\frac{1}{\sqrt{d_k}}$를 추가한 것

 

Multi-Head Attention

$d_{model}$차원의 key, value, query로 단일 어텐션 기능을 수행하는 대신에 query, key,value을 각각 $d_k, d_k, d_v$차원으로 $h$번 선형 투영(서로 다르게 학습됨)하는 것이 더 효과적이라는 것을 발견함.

이렇게 사영된 query, key, value에 대해서 어텐션 함수를 병렬적으로 수행하여 h개의 $d_v$차원의 결과를 산출한다. 그리고 그 결과들을 연결시킨 후 linear projection하여 최종 결과벡터를 얻는다.

멀티헤드 어텐션은 모델이 서로 다른 위치의 서로 다른 representation subspace로부터 결합적으로 정보에 접근한다. 

단일 어텐션 헤드에서는, 평균화를 통해 부분공간들로부터의 joint한 정보접근이 억제된다.

본 논문에서는 $h=8$개의 병렬적인 어텐션 레이어/헤드를 사용하였고, 각 헤드마다 $d_k=d_v=d_{model}/h=64$.

각 헤드의 차원이 줄어들었기 때문에, 전체적인 연산비용은 싱글헤드로 full 차원 어텐션을 진행할때와 비슷하다.

 

Applications of Attentio in our Model

트랜스포머는 멀티헤드 어텐션을 3가지 다른 방법으로 사용한다. (논문에서 보면 3군데에 있음)

  1. '인코더-디코더 어텐션'계층에서, 이전 디코더 계층으로부터 query나오고 인코더 출력으로 memory key, value가 나온다. (즉, 해당계층에서 input되는 쿼리는 이전디코더로부터, key,value는 인코더로부터 나옴) 이를 통해 디코더의 모든 위치에서 입력 시퀀스의 모든 position에 접근할 수 있음을 허용한다. 이것은 seq2seq모델의 전형적인 인코더-디코더 어텐션을 모방한 어텐션이다.
  2. 인코더에는 셀프 어텐션 계층이 포함되어 있다. 셀프 어텐션 계층에 입력으로 들어오는 모든 key, value, query는 동일한 시퀀스로부터 온다. 여기에선 인코더에서 이전 계층의 출력으로부터 옴. 인코더의 각 위치는 이전 레이어에 있는 모든 position에 접근할 수 있다.
  3. 마찬가지로, 디코더의 셀프어텐션층은 디코더의 모든 position에서 이전 디코딩층의 해당 position 이전까지의 모든 position들에 접근 가능하도록 한다. 디코더의 auto-regressive 성질을 보존하기 위해 leftward의 정보흐름을 막아야함(미래 시점의 단어들을 미리 조회함에 따라 현재단어 결정에 미칠 수 있는 영향을 막음). 그러기 위해선 부적절한 연결에 해당하는 softmax의 입력값으로 들어가는 모든 값을 마스킹($-\infty$으로 설정)하여 scaled dot-product attention을 구현한다. (softmax를 취한 결과 해당위치의 원소값이 0이 되도록!)

<Position-wise Feed-Forward Networks>

어텐션 하위레이어 외에도, 인코더와 디코더내의 각 계층에는 각 position에서 독립적으로 동일하게 적용되는 FC Feed-Forward네트워크가 포함되어 있다. 

두개의 선형변환으로 구성되어 있으며 사이에는 ReLU활성화 적용

식 2

선형변환은 position에 대해서는 동일하지만, 각 층마다 다른 파라미터($W_1, W_2$)를 사용한다.

커널 크기가 1인 두 개의 컨볼루션을 생각해보면 된다고 함. (why?)

입출력 차원은 동일하게 $d_{model}=512$, FFN 내부의 hidden layer는 $d_{ff}=2018$이다.

 

<Embeddings and Softmax>

다른 시퀀스 변환 모델과 유사하게, 본 논문에선 학습된 임베딩을 이용하여 입력 토큰과 출력 토큰을 $d_{model}$차원의 벡터로 변환한다.

또한, 디코더의 출력을 예측되는 다음 토큰의 확률로 변환하기 위해서 일반적으로 학습된 선형변환과 softmax함수 사용.

두 임베딩 레이어와 softmax이전의 선형변환에 동일한 가중치 행렬을 공유하도록 함. 임베딩 레이어에서 그 가중치에 $\sqrt{d_{model}}$을 곱한다.

 

<Positional Encoding>

recurrence와 convolution을 포함하지 않기 때문에, 연구진들은 시퀀스 내의 토큰들의 상대적인 위치나 절대적인 위치에 대한 정보를 주입하여 모델이 시퀀스의 순서를 반영할 수 있도록 하였다.

그렇게 하기 위해서, 인코더와 디코더 스택의 하단에 있는 input embeeding에 "positional encodings"을 추가하였다.

positional encoding은 임베딩과 마찬가지로 $d_{model}$차원을 가지기 때문에 둘을 합칠 수 있다.

positional encoding은 여러가지가 될 수 있다.

본 연구에서는 다른 주기를 갖는 사인 및 코사인 함수를 사용하였다.

이때, $pos$는 position, $i$는 차원

positional encoding의 각 차원 i는 사인곡선에 대응된다. 

파장은 $2\pi$ 에서 $10000\cdot 2\pi$까지 기하급수적으로 늘어난다.

위의 함수를 선택한 이유는 어떤 고정된 오프셋 $k$에 대해, $PE_{pos+k}$가 $PE{pos}$의 선형함수로 표현될 수 있기 때문에 모델이 상대적인 위치를 쉽게 학습할 수 있다는 가설을 세웠기 때문이다.

연구진은 학습된 위치 임베딩으로도 실험해봤는데, 두 버전이 동일한 결과를 산출했다고 함.

 

결국 사인파 버전을 선택했다.

모델이 훈련중에 접한 것보다 더 긴 시퀀스 길이에 대해서도 추정할 수 있기 때문

 

Why Self-Attention

이 섹션에선, 하나의 가변길이 시퀀스 표현인 $x_1, \cdots, x_n$을 동일한 길이의 다른 시퀀스 $z_1, \cdots, z_n$에 매핑하는데 사용되는 recurrence, convoutional 레이어와 self-attention 레이어를 비교한다.

$x_i, z_i \in \mathbb{R}_d$

다음의 세 가지 이유로 Self-attention을 사용한다.

  1. 레이어당 총 계산 복잡도
  2. 병렬화할 수 있는 계산량 (요구되는 sequential operation의 최소 개수로 측정했을 때)
  3. 네트워크 내 장거리 종속성 사이의 경로 길이

여러 시퀀스 변환 작업에서 장거리 종속성을 학습하는 것은 중요한 과제이다.

그런 종속성을 학습하는 능력에 영향을 주는 주요 요인은 네트워크에서 forward / backward 신호가 통과해야 하는 경로의 길이이다.

이러한 경로의 길이(입력과 출력 시퀀스의 위치 사이)가 짧을수록 장거리 종속성을 학습하기 쉬워짐

따라서, 서로 다른 계층 유형으로 구성된 네트워크로 구성된 네트워크에서 임의의 두 입출력 위치 사이의 최대 경로 길이를 비교해야 함(?)

표 1. $n$은 시퀀스 길이, $d$는 reprensentation 차원, $k$는 컨볼루션 커널 크기, $r$은 제한된 self-attention에서 이웃의 크기

위 표에서 보면, self-attention 계층은 모든 위치를 상수시간내로 연결하지만 recurrent 계층은 $O(n)$의 sequential 연산을 필요로 한다.

계산복잡도 면에서는 시퀀스길이 $n$이 표현의 차원인 $d$보다 작을때,  self-attention계층이 recurrent 계층보다 빠르다.

word-piece, byte-pair representation과 같이 기계번역에서 최첨단 모델에 의해 사용되는 문장 표현에 해당

매우 긴 시퀀스를 포함하는 작업의 계산 성능을 향상하기 위해, self-attention은 각각의 출력 위치를 중심으로 입력 시퀀스에서 크기가 작은 이웃만을 고려하는 것으로 제한할 수 있다.  ▶ self-attention (restricted)

이런 경우엔 최대 경로 길이가 $O(n/r)$로 늘어난다.

이 접근 방식은 나중에 추가로 조사한다고 함

커널 너비가 $k<n$인 단일 컨볼루션 레이어는 입력과 출력의 모든 위치들을 연결하지 않는다.

그렇게 해버리면 연속커널의 경우 $O(n/k)$의 컨볼루션 레이어 스택이 필요하며,
확장 컨볼루션의 경우 $O(log_k(n))$가 필요하기 때문에 두 위치 사이의 가장 긴 경로 길이를 증가시키기 때문.

컨볼루션 레이어는 recurrent 레이어보다 일반적으로 $k$배 비용이 든다.

but, 분리가능한 컨볼루션은 복잡성을 $O(k\cdot n\cdot d+n\cdot d^2)$까지로 줄일  수 있다.

그러나 $k=n$을 사용하더라도 분리가능한 컨볼루션의 복잡도는 self-attention과 point-wise feed-forward 레이어를 결합한 것의 복잡도와 같다.

 

self-attention은 거기에 더불어 더 해석가능한 모델로 산출될 수 있다.

각각의 attention head는 서로 다른 task를 수행하도록 학습될 뿐만 아니라, 문장내의 syntatic하고 semantic한 구조와 관련된 특성을 포착하는 것을 보여준다.

 

Training

<Training Data and Batching>

약 450만 개의 문장의 쌍으로 구성된 표준 WMT 2014 English-German 데이터셋으로 훈련함

문장은 byte-pair 인코딩을 사용하였고, 공유된 소스-타겟 어휘는 37000개의 토큰

영어-프랑스어의 경우 3600만 개의 문장으로 구성된 훨씬 큰 WMT 2014 English-French 데이터셋을 사용하였고 토큰을 32000개의 word-piece vocabulary 로 분할함

문장의 쌍은 대략적인 시퀀스 길이만큼 배치화됨

각 훈련 배치에는 약 25000개의 소스 토큰과 25000의 타겟 토큰이 포함된 문장 쌍이 포함됨

 

<Hardward and Schedule>

8개의 NVIDIA P100 GPU가 있는 하나의 기계에서 모델 훈련

논문에서 설명된 하이퍼 매개변수를 사용하는 모델의 경우, 각 훈련은 0.4초 걸렸음

기본 모델은 총 10만단계 (12h)동안 훈련하였다.

대형 모델의 경우 각 단계별 학습시간은 1.0초

이 경우 300,000 단계(3.5d)동안 훈련하였다.

 

<Optimizer>

Adam 옵티마이저를 사용하였고 이때 $\beta_1=0.9, \beta_2=0.98, \epsilon=10^{-9}$

다음 공식에 따라 교육 도중 learning rate를 변화시켰음

식 3

첫 번째 $warmup_steps$ 훈련스텝의 경우, 학습률을 선형적으로 증가시키고
그 후 $step_num$의 역제곱근에 비례하여 감소시켰다.
$warmup_steps=4000$을 사용함

 

<Regularization>

훈련 도중 다음의 규제를 사용하였음

Residual Dropout

하위 레이어 입력이 추가되고 정규화되기 전에, 각 하위 계층의 출력에 드롭아웃을 적용하였다.

또한, 인코더와 디코더 스택 모두에서 임베딩과 위치 인코뎅의 합계에 드롭아웃을 적용하였다.

기본 모형의 경우 $P_{drop}=0.1$

 

Label Smoothing

훈련하는동안 label smoothing value $\epsilon_{ls}=0.1$을 사용하였음

모델이 불확실해지긴 하지만 정확도와 BLUE 점수를 향상시킴

 

<Results>

표 2

Machine Translation

WMT 2014 Englishy-to-German 번역 작업에서, 대형 트랜스포머 모델은 이전에 발표된 모델을 2.0 BLUE 이상 능가하여 최고 점수인 28.4의 점수를 기록하였다.

훈련에는 P100 GPU 8개에서 3.5일 소요되었음

심지어 베이스모델 자체도 이전에 발표된 모든 모델과 앙상블을 능가하였음

경쟁 모델의 훈련비용의 몇 분의 1 수준으로

 

WMT 2014 English-to-French 번역작업에서, 대형 트랜스포머 모델은 41.0의 BLEU 점수를 달성하여 이전에 게시된 모든 단일 모델을 이전 모델들의 훈련 비용 1/4미만으로 능가하였다.

영어와 프랑스어를 위해 훈련된 트랜스포머 (대형)모델은 드롭아웃 비율 $P_{drop}$을 0.3대신 0.1을 사용했다.

베이스 모델은 10분간격으로 쓰여진 마지막 5개의 체크포인트를 평균화하여 얻은 단일 모델을 사용하였다.

대형모델은 마지막 20개의 체크포인트를 평균화했다.

이때 빔서치에 사용된 beam size는 4로 하였고, 길이 패널티 $\alpha=0.6$을 적용

이런 하이퍼파라미터는 development set을 실험해본 후에 선택하였음

추론 중에 최대 출력 길이를 입력길이+50으로 설정하였지만, 일찍 종료할수도 있다.

 

Model Variations

트랜스포머의 여러 구성요소의 중요성을 평가하기 위해서 개발 셋인 newstest 2013으로 영어-독일어 번역의 성능 변화를 측정하면서 베이스모델을 변화시켰음

빔 검색을 사용했지만 체크포인트는 사용하지 않음

(A) Multi-Head Attention섹션에서 언급된 대로 계산량을 일정하게 유지하면서 attention head의 수와 attention key, value 차원을 변경하였다.

Single-Head Attention은 최고기록보다 0.9 BLEU 정도 안좋지만, 헤드 수가 너무 많으면 품질도 떨어진다.

(B) attention key의 크기인 $d_k$를 줄이면 모델의 품질이 줄어들었음

호환성을 결정하는 것이 쉽지 않고, 더 정교환 호환함수가 dot product보다 유리할 수 있음을 보여준다. (?)

(C) (D) 에서 볼 수 있듯이, 예상대로 큰 모델이 성능이 괜찮고, dropout을 사용하면 과적합을 피하는데 도움이 된다는 것을 관찰

(E) 사인파 positional encoding을 학습된 위치 임베딩으로 대체하였더니 베이스모델과 거의 동일한 결과를 보여줌

 

Conclusion

본 연구에선, 인코더-디코더 아키텍처에서 가장 일반적으로 사용되는 recurrent 레이어를 multi-headed self-attention으로 대체하고, attention을 전적으로 이용하는 최초의 시퀀스 변환 모델인 Transformer을 제시하였다.

번역 작업에서 트랜스포머는 RNN/CNN을 베이스로 하는 구조보다 훨씬 빠르게 훈련될 수 있다.

WMT 2014 English-to-German과 WMT 2014 English-to-French 번역 작업에서 새로 최고점수를 달성하였다.

▶ 트랜스포머의 최상 모델은 이전에 보고된 모든 앙상블을 능가하였다

본 연구진은 attention-based 모델의 미래에 대해 기대하고 있고, 다른 작업에 적용할 계획이다.

트랜스포머를 텍스트를 넘어 입출력 양식과 관련된 문제로 확장하고, 이미지/오디오/비디오와 같은 큰 입출력을 효율적으로 처리하기 위한 restricted 어텐션 구조를 연구할 것이다.

general을 더 sequential하게 만드는 것이 또 다른 연구 목적!