Data_study/Paper_Review

[논문리뷰]transformer:Attention Is All You Need

onsemiro 2023. 4. 29. 14:45

최근 핫한 chatgpt, Bert의 모든 것은 이 transformer에서부터 시작된 것이다. gpt계열을 transformer의 decoder부분을 Bert부분은 encoder부분만 사용하여 적합한 task를 해결하는데 사용한다. 보통 gpt계열은 decoder의 특성으로 generative model로 사용되고 bert는 보통 summarization이나 classification model로 활용된다. 이 transformer는 nlp분야에서 한 차원의 변화를 준 모델로 그 전에 있었던 RNN기반의 모델들의 단점을 보완하였다.

 

https://arxiv.org/pdf/1706.03762.pdf

Transformer : Attention is all you need

Abstract

abstract

여기서 The dominant sequence transduction models는 입력시퀀스의 각 위치에서 출력시퀀스의 다음 위치를 예측하는 것이 아니라 입력시퀀스의 일부를 사용하여 출력시퀀스를 생성하는 방식을 말한다. encoder와 decoder가 포함된 complex recurrent 또는 convolutional neural networks로 되어 있다. 이 모델은 또한 attention mechanism을 통해서 encoder와 decoder가 연결되어 있다.

논문의 목표는 새로운 network 구조인 Transformer을 오직 attention mechanism을 통해서 구축하는 것이다. recurrence와 convolution 연산을 모두 없이 구현한다. 이 모델은 병렬적으로 구현하여 매우 좋은 성능과 단축된 학습시간을 보여줬다.

 

1. Introduction

본 논문은 Introduction에서 기존에 있던 model 구조의 문제점을 제시하고 Attention mechanism의 장점을 설명한다.

 

Recurrent model은 입력 및 출력 시퀀스의 위치에 따라 계산을 한다. 이전 hidden states ht-1와 위치 t의 입력에 대한 함수로 hidden states ht의 시퀀스가 생성된다. 이 모델은 시퀀스 길이가 질어지면 메모리 제약으로 인해 training내에서 병렬화를 방해한다. 최근 연구에서는 인수분해 기법과 조건부 계산을 통해서 개선했지만 순차 연산의 제약은 남아있다.

 

Attention mechanisms는 input 또는 output sequence의 거리와 상관없이 모델링할 수 있게 해준다. 일부 사례를 제외한 모든 경우에는 이런 Attention mechanism은 recurrent network와 함께 사용된다.

이 논문에서는 recurrence를 사용하지 않는 대신 전부 attention mechanism을 의존하는 model architectureTransformer를 목표로 한다. 이 Transformer는 input과 output간의 global dependencies를 이끈다.

(여기서 global dependencies란 전반적으로 의존한다는 뜻으로 rnn과 같이 이전 시퀀스에 의해 해당 시퀀스가 결정되는 것이 아닌, 모든 위치에 대한 정보를 직접적으로 고려할 수 있다는 뜻이다.)

 

2. Background

Sequential computation을 줄이려는 목표모든 input과 output 위치를 병렬적으로 hidden representations를 연산하는 CNN을 기본 구성요소로 하는 모델(Extended Neural GPU, ByteNet , ConvS2S)의 기초를 형성한다. 이런 모델에서는 두 임의의 input output 위치의 signal을 연관시키는데 필요한 연산의 수는 위치 사이의 거리에 따라 ConvS2S는 선형적으로 , ByteNet은 로그형태로 증가한다. 이런 증가하는 연산은 멀리 떨어진 위치사이의 의존도를 배우는데 어려움을 갖는다.

 

Self-attention은 intra-attention이라고도 불리는데, 시퀀스의 표현을 연산하기 위해 single sequence의 다른 위치를 연관시키는 attention mechanism이다.

 

End-to-end memory networks는 시퀀스의 정렬 순환이 아닌 순환 attention mechanism을 기반으로 한다. 그리고 simple-language question answering, language modeling task에서 놀라운 perform을 보여줬다.

 

3. Model Architecture

대부분 경쟁력이 있는 neural sequence transduction model들은 encoder-decoder 구조를 갖는다.

the encoder는 입력 symbol sequence 표현을 연속 표현 sequence Z로 mapping한다.

the decoderencoder에서 z를 받으면 한 번에 한 element씩 output sequence를 생성한다. 이 각각의 step에서 모델은 auto-regressive다. auto-regressive는 이전에 예측으로 생성된 symbol을 다음 symbol을 생성할 때 추가 입력하여 regressive를 자기자신을 통해 진행한다는 뜻이다.

3.1 Encoder and Decoder Stacks

Encoder : encoder는 N = 6개의 동일한 레이어 스택으로 구성되어있다. 각 레이어는 두개의 sub-layer로 형성돼있다. 첫 layer는 multi-head self-attention mechanism이고 두번째 layer는 position wise fully connected feed-forward network인 simple layer가 존재한다. 여기에 각 sub-layer마다 residual connection를 놨다. 레이어의 output은 LayerNorm(x+Sublayer(x))다.

residual connections를 용이하게 하기위해서는 model 내에 모든 sub-layers를 차원 dmodel=512의 출력으로 생성한다. 이렇게 하나의 차원으로 맞추는 이유x를 더할 시에 f(x)와 x의 차원을 맞추려고 x에 가중치를 곱해주는 번거로움을 행해야하기 때문이다.

 

⭐︎ residual connection

출처 : https://www.youtube.com/watch?v=671BsKl8d0E

 

residual connection일 시, 중간 layer를 생략하면서 back propagation을 진행할 수 있다.가능한 이유는 기존 정보인 x를 layer output에 더해서 y = f(x) + x를 만들게 되면 y를 미분시 x시점으로 이동하게 되면서 back propagation이 가능하기 때문에 y' = f'(x) + 1이 된다. 또한, 이런 시퀀스 task에서 기존 정보를 유지하면서 학습가능하다는 장점도 가지고 있다.

 

plain layers일 시에는 f(x)에서 x가 직 전의 layer였기 때문에 하나하나 거르지 않고 back propagation 연산이 진행되어 gradient vanishing의 위험도 존재한다. 이런 문제점을 해결가능한 것이 residual connection이다. 이렇게 되면 깊은 layer를 쌓는 이점과 gradient vanishing의 위험도 피할 수 있게 된다.

 

Decoder : decoder는 또한 N = 6개의 동일한 레이어 스택으로 구성되어있다. 추가로 decoder는 third sub-layer로 추가했다. 이 레이어는 encoder 스택의 출력과 decoder의 이전 layer들의 값을 받아 연산하는 layer를 추가했다. encoder와 동일하게 residual connection도 진행했다. 또한, 뒤 이어나오는 position에 참여하는 것을 막기 위해 decoder stack에 있는 self-attention을 수정했다. 이 masking은 output embedding이 한 position에 의해 상쇄되는 사실을 겸하여 position i에 대한 예측이 i보다 작은 위치에서 알려진 output에만 의존할 수 있도록 한다. 다시 말해, decoder에서 출력되는 sequence의 생성이 현재 position보다 뒤에 나오는 position을 참조하지 않고 앞에 position만 참조하여 생성되도록 한다는 말이다.

 

3.2 Attention

Attention functionquery와 key-value 쌍 set를 output에 mapping하는 것이다. 여기서 query , key, value는 모두 벡터다. 출력은 각 value의 weight 합으로 계산되며, 각 value에 할당된 weight는 query와 해당 key의 compatibility function에 의해 계산된다.

(compatibility function이란?) 

 

3.2.1 Scaled Dot-Product Attention

"Scaled Dot-Product Attention"input은 dk차원의 queries와 keys와 dv차원의 values다. query와 모든 keys를 dot product해주고 루트 dk로 나눈다. 그리고 values의 weight를 얻기 위해 softmax function에 넣는다. 실제로 attention function에 모든 keys와 queries 세트가 동시에 연산된다. 또한 matrices K와 V또한 마찬가지다. 

 

Attention function에는 두가지 mechanism이 있다. 하나는 additive attention, 다른하나는 dot-product attention이다. Dot-product attention은 루트 dk를 나누어 scaling한 것을 제외하면 이 transformer에서 사용한 동일한 알고리즘이다. Additive attentionsingle hidden layer로 하나의 feed-forward network를 사용하는 compatibility function으로 연산된다. dot-product attention은 매우 최적화된 matrix multiplication code를 수행할 수 있기 때문에, 좀더 빠르고 더 실제로 공간 효율성도 좋다. 

 

작은 dk 값일 경우, 두 mechanism은 비슷하게 수행한다. 큰 dk 값일 경우에는 scaling 없이 Additive attention이 Dot=product attention보다 성능이 뛰어나다. 큰 dk값일 경우 dot product의 크기가 커져서 softmax 함수가 extremely small gradients의 영역으로 밀려나는 것으로 추정된다. (extremely small gradient : 너무 작게 update가 돼서 효율적인 학습이 되지 않는 상태) 이런 영향을 대응하기 위해서 dot product에 루트 dk를 나눠준다.

 

루트 dk를 나눠줌으로써 attention score의 분산을 조절할 수 있고 softmax에서 연산된 값이 커지면 0또는 1만 출력되는데 이를 방지할 수 있고 모델에 일관성을 높일 수 있다. 근데 하필 루트 dk인 이유는 Q・K의 dot product의 값을 dk로 나눠서 분산이 1이 되도록 만들어주기 위함이다

 

그렇다면 나는 여기서 궁금한 게 있었다. 왜 Q・K를 dot product해서 dk로 나눴다고 분산이 1이 되는가? 그 이유는 우선 Q와 K는 layer normalization을 통해 각 열마다의 평균이 0이 되고 분산이 1/dk인 표준 정규 분포로 구성된다. 그리고 Q와 K의 각 열의 내적인 Q・K^T의 분산은 dk배가 되는데, 이는 벡터의 내적과정에서 각 차원별로 값이 곱해지기 때문입니다. 따라서 ・K^T를 dk로 나눠줌으로써 분산을 1로 조정해 줄 수 있습니다.

 

3.2.2 Multi-Head Attention

단일 attention function 수행 대신, 학습된 서로 다른 선형 projection으로 학습된 query, key, value값을 각각 dk, dk 및 dv 차원에서 선형적으로 project하는 것이 이득적이다는 것을 발견했다.

 

Multi - head attention은 모델이 서로 다른 위치에서 서로 다른 표현 subspaces의 정보에 공동으로 attend할 수 있게 해준다.

이 작업에서 h= 8개의 병렬적인 레이어 또는 헤드를 사용한다. 각각에 대해 dk=dv=dmodel/h = 64를 사용한다. 각 헤드의 크기가 줄어들었기 때문에 총 계산 비용은 single-head attention과 비슷하다.

 

3.2.3 Applications of Attention in our Model

Transformer에서는 세 방식으로 multi - head attention을 사용한다.

 

  • "Encoder-Decoder Attention" layer에서는 queries가 이전 decoder layer에서, key와 value는 encoder의 출력으로 나온다. 이를 통해 decoder에서 모든 위치는 input sequence의 전체 position을 attend한다.
  • "Encoder self - Attention"은 모든 key, value, query가 같은 place에서 왔다. 이 경우에는 encoder에서 이전 layer의 output이다. 각 encoder의 position은 이전 encoder의 layer에서 모든 position을 attend할 수 있다.
  • "Masked Decoder Self-Attention"은 decoder에서 각 position이 decoder의 모든 위치에 attend할 수 있도록 한다. 여기서는 Auto-regressive 속성을 유지하기 위해 leftward information flow를 막아햐한다. 그러기 위해서, 잘못 연결됐다고 반응한 softmax의 input에서 모든 values를 masking함으로써 scaled dot-product attention 내부에서 수행한다. 

 

3.3 Position-wise Feed-Forward Networks

Attention sub-layer이외에, 각 encoder와 decoder에는 각 a fully connected feed-forward network가 존재한다. 이것은 각 포지션을 개별적으로 동일하게 적용한다. 두개의 linear transformations으로 구성되어 있고 ReLU가 사이에 존재한다.

 

?? Transformer는 왜 Feed-Forward Network를 수행하는가??

그 이유는 Self-Attention에서 얻은 정보를 다시 한번 처리하고 추상화하여, 더욱 강력한 표현을 만들기 위해서다. Self-Attention layer에서 각 단어 벡터가 가지고 있는 다른 단어들과의 연관성을 계산하여, 이를 바탕으로 가중 평균하여 계산한 새로운 단어 벡터를 얻을 수 있었다. 이렇게 얻은 새로운 단어 벡터는 이후 Feed-Forward Network를 거치면서 추가적으로 비선형성을 더하고 추상화된다. 이를 통해 모델이 더 복잡한 패턴을 학습할 수 있도록 도와주며, 다양한 종류의 문제에 대해서 더 좋은 성능을 발휘할 수 있게 된다.

 

⭐️ Feed-Forward Network 

-각 위치별로 독립적으로 적용되며, 다음과 같은 기능을 수행한다.

 

1. Non-linearity : FFN은 비선형 함수인 ReLU를 활용하여 입력값의 비선형성을 증가시킨다.

2. Dimensionality Reduction : FFN은 선형 변환을 통해 입력 차원을 감소시킨다. 이는 encoder/decoder layer 간의 차원을 일치시키기 위해 수행된다.

3. Position-wise : FFN은 위치별로 독립적으로 적용된다. 이는 셀프 어텐션에서 각 단어의 임베딩 벡터를 다른 단어의 임베딩 벡터와 독립적으로 계산하듯이, FFN도 각 위치별로 계산되기 때문이다.

 

3.4 Embedding and Softmax

다른 시퀀스의 변환 모델과 비슷하다. 학습된 embedding을 사용한다. 또한, 일반 학습된 linear transformattion과 softmax function을 사용하여 decoder output을 예측된 다음 token 가능성으로 변환한다. 두개의 embedding layer와 pre-softmax간에 동일한 weight matrix를 공유한다. embedding layer에서는 루트 dmodel 차원으로 weight를 곱한다.

 

 

3.5 Positional Encoding

Transformer model은 recurrence와 convolution을 전혀 사용하지 않기 때문에, sequence의 순서를 모델에서 사용하기 위해서 sequence의 token에 대해 상대적 또는 절대적인 위치에 대한 정보를 주입했다.

이를 위해 "positional encodings"를 encoder와 decoder stack bottom에 추가했다. "Positional encoding은 두개가 더해지기 위해 dmodel로 같은 차원을 갖는다. positional encoding은 learned와 fixed 두가지를 선택할 수 있다.

본 논문에서는 sine과 cosine 함수를 사용했다.

위 식에서 pos는 position, i는 차원을 말한다. 각 positional encoding의 dimention은 sine 파장과 일치하다. wavelength는 2파이부터 10000・2파이다. 우리는 이 function을 사용했다. 왜냐하면, 고정된 offset에 대해 PEpos+k는 PEpos를 선형함수로 표현 가능하여 상대적인 postition을 model이 쉽게 학습할 수 있을 것이라고 가정되기 때문이다.

 

learned positional embedding으로 대신하여 사용해 봤다. 동일한 결과를 찾을 수 있었다. 그래도 우리는 sinusoidal version을 사용한 이유는 training동안 발생하는 것보다 더 긴 sequence 길이를 추론할 수 있기 때문이다.

 

 

4. Why Self - Attention

이 section에서는 recurrent와 convolutional layer를 self-attention layer의 다양한 측면과 비교할 것이다. self-attention 사용의 동기 부여를 위해 3가지 필수사항을 고려한다.

1. 레이어당 총 계산 복잡도

2. 요구된 최소 sequential operation의 횟수로 측정한 병렬화 할 수 있는 연산량

3. 네트워크에서 원거리 의존도 사이의 경로 길이

 

원거리 의존도를 학습하는 것은 많은 sequence 교환 task에서 주요 도전과제다. 이런 의존도를 학습하는 능력에 영향을 주는 하나의 주요 요인은 네트워크에서 forward와 backward signal이 통과해야하는 경로의 길이다. 경로가 짧을 수록 장거리 의존성을 더 쉽게 학습할 수 있다.

 

self-attention layer는 sequence 길이 n이 representation 차원 d 보다 작을 때 recurrent layers보다 빠르다. 매우 긴 sequences와 관련된 task의 연산 성능을 상승시키기 위해서는 self-attention은 상대적인 output position중에 집중된 input sequence에서 size r의 오직 이웃만 고려하도록 제한시킬 수 있다. 이렇게 되면 maximum path 길이는 O(n/r)로 증가한다.

 

kernel 너비 k가 n보다 작은 단일 convolutional layer는 모든 input과 output position과 connect하지 않는다. 인접한 kernels 경우 O(n/k)의 convolutional layers의 stack이 필요하고 퍼진 convolutions경우 O(logk(n))가 필요해서 network에서 어떤 두 position사이의 최장 경로의 길이가 증가한다. convolution layer는 일반적으로 recurrent layer보다 k 배 정도 더 expensive하다. 하지만 separable convolution은 복잡도를 O(k・n・d+n・d^2)로 상당히 감소한다. 심지어 k=n일 때는, separable convolution의 복잡도는 self-attention과 point-wise feed-forward layer의 조합과 동일하다.

 

self-attention은 추가 이점으로, 설명가능한 model을 산출해낼 수 있다.

 

5. Training

Train data는 The Standard WMT 2014 English-German dataset과 English-French를 사용했다.

 

Hardware and Schedule은 8 NVIDIA P100 GPUs를 사용했고 base model은 100,000steps, 12시간을 학습했고, big model은 300,000 steps, 3.5일동안 학습했다.

 

optimizer는 Adam optimizer를 사용했고 learning rate는 학습하는 동안 formula에 맞게 바꿨다. 이는 첫 번째 warmup_steps 훈련 단계에 대해 학습 속도를 선형적으로 증가시키고 그 후에는 단계 수의 역제곱근에 비례하여 학습 속도를 감소시키는 것에 해당한다. warmup_steps는 40,000을 사용했다.

 

정규화는 residual Dropout과 label Smoothing을 진행했다.

Residual Dropout은 각 sub-layer의 출력에 Dropout을 적용한 후 sub-layer입력에 추가하고 정규화한다. 또한, encoder와 decoder stack 모두에서 embedding과 position encoding의 합에 Dropout을 적용한다. Base model 경우 Pdrop = 0.1의 비율을 사용한다.

label Smoothing은 training중에 label smoothing을 사용하여 모델이 덜 unsure되지만, 정확도와 BLEU score는 향상된다.

 

BLEU의 성과지표는 추후에 글을 따로 작성하겠다.

간단하게 말하면 실제 문장과 예측한 문장의 일치성을 수치로 낸 것이다.

 

6. Results

6.1 Machine Translation

6.2 Model Variations

 

transformer의 다양한 성분의 중요성을 평가하기 위해 base model을 다양한 방법으로 변경하여 개발 세트인 newstest2013에서 영어에서 독일어로 번역할 때의 성능 변화를 측정했다.

7. conclusion

본 연구는 가장 흔히 사용되는 recurrent layer에서 encoder-decoder architectures의 multi-headed self-attention로 대체하여 전적으로 attention기반 최초 sequence transduction model인 Transformer를 발표했다.

 

translation task에서는 Transformer가 가장 빠르게 학습될 수 있다.

 

추후에 다른 task에도 적용할 계획이다. 텍스트 이외에 이미지, 오디오, 비디오와 같은 대용량 입력 및 출력을 효율적으로 처리하기 위해 restricted attention mechanism을 사용할 계획이다. 

 

끝...

 

논문 세미나 진행

반응형