데이터과학/자연어처리

[자연어처리][paper review] Transformer : Attention is all you need

섭구
반응형

본 논문은 2017년 발표된 논문으로, 당시에는 RNN, LSTM, GRU를 사용한 복잡한 모델들이 Machine translation과 같은 Sequence Modeling 분야에서 주를 이루고 있었습니다.

이러한 방법들은 순환 신경망을 활용한 인코더-디코더 구조를 통해 가변길이의 입, 출력 또한 다룰 수 있다는 큰 장점이 존재했습니다.

encoder-decoder 구조는 \((x_1,...,x_T)\rightarrow v \rightarrow(y_1,...,y_T)\)의 순서로

encoder를 통하여 input sequence를 고정된 길이의 벡터로 바꾸고, 다시 decoder를 통하여 고정된 길이의 벡터를 translation 결과로 output하는 구조입니다. 

 

[paper review] Seq2Seq : Sequence to Sequence Learning with Neural Networks

본 논문이 발표될 당시, DNN(deep neural network)구조는 병렬계산을 통하여 다양한 분야에서 SOTA를 달성하기 시작하였습니다. 하지만 DNN의 강력함에도 불구하고, 고정된 차원의 input과 output을 필요로

supkoon.tistory.com

Encoder-Decoder model

하지만 순환신경망 계열의 Sequence model은 순차적인 hidden state 계산을 거치기 때문에 병렬처리가 쉽지 않다는 단점이 여전히 존재했습니다. 또한 input sequence를 고정 길이 벡터 \(v\)로 표현하는 것은 쉬운 일이 아닙니다.

때문에 여전히 당시의 Sequence model은 긴 문장에 있어서의 계산 부담을 가지고 있었으며, 순환신경망 구조의 가장 큰 약점인 long term dependency problem 또한 여전히 남아 있었습니다.

 

Attention mechanism의 등장은 이러한 문제를 어느정도 해결해 주었습니다. Attention mechanism은 고정 벡터로의 변환 없이 입,출력 sequence간의 alignment를 활용하여 Decoder의 각 position이 Encoder의 모든 Position을 고려할 수 있게 합니다.

따라서 Attention의 등장은상대적으로 긴 입,출력의 sequence modeling을 가능하게 만들었고, Attention은 sequence modeling에 있어서 필수적인 고려 요소가 되었습니다.

대표적인 두가지 Attention mechanism에 대한 설명은 아래 리뷰를 참고 부탁드립니다.

 

-Bahdanau Attention

 

[paper review] Attention : Neural machine translation by jointly learning to align and translate

본 논문은 2014년 발표된 논문으로 당시 Seq2Seq Machine translation은 RNN,LSTM,GRU 기반의 encoder-decoder 구조가 주를 이루고 있었습니다. encoder-decoder 구조는 \((x_1,...,x_T)\rightarrow v \rightarrow..

supkoon.tistory.com

-Luong Attention

 

[paper review] Attention : Effective Approaches to Attention-based Neural Machine Translation

본 논문은 2015년 발표된 논문으로, Machine translation 분야에서 Bahdanau Attention을 활용한 NMT(Neural machine translation) 모델의 성공에도 불구하고, attention을 더 효율적으로 활용할 수 있는 NMT 모델..

supkoon.tistory.com

 

하지만 당시의 Attention mechanism은 순환신경망 계열의 모델을 위한 부가적인 구조에 불과했습니다. 때문에, 본질적인 RNN 구조의 문제점을 완전히 극복할 수는 없었습니다. 순차적으로 입,출력을 하는 구조라는 것은 변하지 않았기 때문입니다.

 

따라서 본 논문의 저자들은 Attention mechanism에 보다 적합하여 장점을 극대화 시킬 수 있는 Transformer model을 제안합니다.

Transformer는 순환구조를 사용하지 않고, attention만을 사용해 input과 output사이의 global dependency를 얻어낼 수 있는 모델입니다.

 

 

1.Transformer

Transformer는 기존 Sequence model의 Encoder, Decoder 구조를 따릅니다.

기본적인 메커니즘은 다음과 같습니다.

Encoder는 input sequnece \((x_1,...,x_n)\)를 representation \(z = (z_1,...,z_n)\)으로 Mapping 합니다.

그리고 Decoder는 \(z\)를 받아 output sequence \((y_1,...,y_m)\)를 하나씩 generate 합니다.

representation이 고정 길이의 벡터가 아니라는 점을 제외하고는 기존의 구조와 비슷해 보일 수도 있습니다.

하지만 자세한 구조와 적용된 방법들을 들여다 본다면 기존 Sequence model들과는 큰 차이점들이 있습니다.

 

 

Encoder

Encoder block

우선 인코더는 6개의 동일한 layer가 쌓여진 형태입니다. 그림의 붉은 네모박스는 하나의 layer(block)를 보여줍니다.

각각의 layer는 다시 두개의 sub-layer로 이루어져 있습니다.

첫번째 sub-layer는 multi-head self-attention입니다.

두번째 sub-layer는 point-wise feed-forward network 입니다.

또한 residual connection과 layer normalization이 각각의 sub-layer에 적용됩니다.

각각의 sub-layer에 대한 자세한 설명은 이후에 서술하도록 하겠습니다.

 

 

Decoder

Decoder block

디코더 또한 6개의 동일한 layer가 쌓여진 형태입니다. 그림의 붉은 네모박스는 하나의 Decoder layer(block)을 나타냅니다.

디코더는 인코더의 구조에 encoder-decoder multi-head attention이 sub-layer로 추가되어 총 3개의 sub-layer로 구성됩니다.

역시 residual connection과 layer normalization이 각각의 sub-layer에 적용됩니다.

또한, 디코더의 self-attention sub-layer는 Masking을 사용하여 Masked self-Attention으로 불립니다.

이는 position i를 위한 attention을 구할 때, i 이전의 position 만을 고려하기 때문입니다. 구체적인 설명은 이후에 다시 서술하도록 하겠습니다.

 

 

Attention

Attention은 Transformer 구조에서 가장 중요한 요소입니다.

Transformer의 Attention이 가진 특징인 scaled dot-product, multi-head Attention에 대해 먼저 설명드린 후,

Attention이 Transformer의 인코더, 디코더에 각각 적용되는 방법에 대하여 추가적으로 설명드리도록 하겠습니다.

 

1)Scaled dot-product Attention

Transformer의 Attention은 각각의 word에 대한 \(d_k\), \(d_k\), \(d_v\) 차원의 벡터 query, key, value로 부터 계산됩니다. 

우선, query 벡터와 key 벡터의 dot-product(내적)을 구한 후, \(\sqrt{d_k}\)로 나누어 Scaling합니다.

이후, dot-product의 결과를 softmax function에 통과시켜 0~1 사이의 가중치를 얻습니다.

마지막으로 가중치 \(softmax({QK^T \over \sqrt{d_k}})\)를 value vector에 곱하는 방법으로 Attention이 계산됩니다.

scaled dot-product Attention

이러한 연산을 하는 이유는 query와 key의 내적 값이 두 벡터간의 유사도 라는 점에 있습니다.

저는 편하게 dot-product를 cosine similarity와 length를 함께 고려한 similarity metric으로 이해하고 있습니다.

따라서 Query 단어와 Key 단어 사이에 유사도에 따른 Attention을 계산하는 방법이라고 생각하시면 될 것 같습니다. 

 

Luong과 bahdanau의 Attention을 계산 방법이 다른것 처럼,

Transformer의 Attention을 구하는 방법에는 single layer의 feed-forward network를 사용하는 Additive attention 방법도 존재 합니다. 하지만 query, key, value 벡터를 Matrix Q, K, V로 하여 행렬곱으로 최적화 하기 위해 행렬곱으로 쉽게 표현되는 Dot-product Attention을 사용합니다.

\(1 \over \sqrt{d_k}\)를 이용하여 scaling하는 이유는 양 극단에서 작은 gradient를 가지는 softmax 함수의 특징 때문입니다.

 

 

2)Multi-Head Attention

저자들은 \(d_{model}\) 차원의 query, key, value를 사용하여 하나의 Attention을 계산하는 것 보다, 여러개의 Attention이 각각 따로 학습되는 multi-head Attention 방법을 제안합니다.

h개의 head를 사용하는 multi-head Attention에서 각각의 query, key, value는 \(d_k=d_v=d_{model}/h\) 차원의 벡터가 사용됩니다.

각각의 \(head_i\)에서 계산된 Attention을 concatenate 후 가중치를 갖는 projection Matrix \(W^O\)를 통해 \(d_{model}\)로 다시 projection하여 multi-head Attention이 최종 계산됩니다.

논문에서는 \(d_{model}=512\) ,   \(h=8\) ,   \(d_k=d_v=d_{model}/h=64\)를 사용하였습니다. 

수식을 통하여 다시 되짚어 보면, 우선 \(d_{model}\)차원의 Q, K, V matrix를

\(W_i^Q \in \mathbb{R}^{d_{model}\times d_k},\,\, W_i^K \in \mathbb{R}^{d_{model}\times d_k}, \,\, W_i^V \in \mathbb{R}^{d_{model}\times d_v}\)의 projection matrix를 통하여 h개의 \(d_k=d_v=d_{model}/h\) 차원 attention \(head_i\) 로 나눕니다.

이후에 각각의 \(head_i\)에서 구한 Attention \((head_1,...,head_h)\)을 concatenate하여 다시 projection matrix  \(W^O \in \mathbb{R}^{hd_v \times d_{model}}\)를 통해 최종적으로 \(d_{model}\)차원의 Multi-head Attention을 계산하게 됩니다. 

이러한 방법은 각각 따로 학습하는 attention heads를 통해 보다 풍부한 representation을 학습할 수 있게 합니다. 또한, 병렬계산에 있어서도 명확한 이점을 제공합니다.

 

 

3)Applications in Transformer

Scaled dot-product와 Multi-Head 방법으로 계산되는 Attention은 각각 세가지 다른 방법으로 Transformer 모델에 적용됩니다.

 

첫번째 Application은 Encoder-Decoder Attention layer 입니다. 

Application 1. Encoder-Decoder Attention

encoder-decoder Attention layer는 이전 decoder layer의 query들과 encoder output의 key, value로 부터 

Multi-head Attention을 계산합니다. 이 Attention은 decoder의 각각 position이 input sequence의 모든 position을 고려할 수 있게 합니다.

 

두번째는 Encoder Self-Attention layer입니다.

Application 2. Encoder Self-Attention

self-attention은 말 그대로 query,key,value가 같은 sequence로 부터 계산되는 layer입니다. 따라서 첫번째 self-attention을 제외한 모든 self-attention layer의 input은 이전 인코더 layer의 output이 됩니다.

self-attention은 Encoder의 각각 position이 이전 인코더의 모든 position을 고려할 수 있게 해줍니다.

 

세번째 application은 Decoder masked-self Attention 입니다.

Application 3. Decoder Masked-self Attention

디코더는 다음 단어를 예측하기 위한 구조입니다. 따라서 디코더가 다음 output을 위한 Attention을 고려할 때, 디코더의 해당 position 이전 Position만이 고려되어야 하는것이 직관적으로 맞을 것 입니다. 미래를 고려하여 다음 단어를 예측하는 것은 맞지 않기 때문입니다.

디코더의 Masked-self Attention은 기본적으로 인코더의 self-Attention과 동일한 구조를 갖습니다.

하지만 가중치를 구하기 위한 softmax 함수의 output matrix에서 해당 Position 이후 Position과의 내적 값을 -\(\infty\)로 Masking 합니다.

따라서 Decoder에서 다음 Position을 예측할 때, 그림과 같이 이전 Position과의 Attention만을 고려하게 됩니다.

 

 

Position-wise Feed-Forward Network

Position-wise Feed-Forward Network는 Attention sub-layer와 함께 인코더와 디코더의 identical layer에 포함되는 sub-layer입니다.

Seperately and Identically

이 fully-connected layer는 2개의 hidden layer로 이루어져 있으며, 각각의 position에 separately and identically 하게 적용됩니다. 

간단하게 설명드리면 같은 층의 Attention layer output이 Position-wise Feed-Forward Network에 input 되었을 때, 각각에 단어에 대해서는 개별적인 feed-forward network가 "seperate"하게 적용됩니다.

하지만, 모든 Position의 개별적 feed-forward network가 동일한 가중치 \(W\),\(b\)를 사용하여 동일한 linear transformation이 "identical"하게 적용된다는 의미 입니다. 

 

 

Positional Encoding

Transformer 구조는 문장과 같이 순차적 데이터 형태인 Sequence를 다룹니다. 하지만 Attention은 Sequence 내부의 순서는 고려하지 않고 있습니다. 

물론 Sequence의 순서를 고려하지 않아도 Transformer는 훌륭한 성능을 보여줍니다. 그럼에도 불구하고 저자들은 Positional Encoding 이라는 방법을 통해 Transformer가 순서에 대한 정보까지 고려할 수 있게 하였습니다.

positional encoding

방법은 간단합니다. 그림과 같이 인코더와 디코더의 가장 아래 입력층에 input Embedding과 동일한 \(d_{model}\)차원의 Positional Encoding 값을 더해주면 됩니다.

사용 가능한 많은 Positional Encoding 값들이 있지만, 저자들은 sine,cosine function을 사용하였습니다.

Positional Encoding with Sine,Cosine

위의 식에서 i는 position을 의미합니다. 짝수, 홀수 position에 대하여 각각 sine,cosine 함수가 적용됩니다.

일정한 주기를 갖는 sine,cosine 함수는 모든 position에서 거의 동일한 크기의 norm을 가지고 있습니다.

또한, Position p+k를 Position p에 대한 linear function으로 나타낼 수 있습니다.

따라서 상대적인 Position을 잘 나타내야 하는 Positional Encoding에 적합한 function 입니다.

 

이미 정해진 function을 사용하는 것 외에도 positional encoding을 학습시키는 방법 또한 존재합니다.

하지만, traning에서 만나지 못한 길이의 sequence에 대한 generalization 능력이 sine,cosine 함수가 더 뛰어났기 때문에 최종적으로 sine,cosine 함수를 선택하였다고 합니다.

 

 

Optimizer

Optimizer는 일반적인 Adam optimizer가 사용되었습니다.

또한, warm up steps 에서는 선형적으로 learning rate이 증가하고

이후에는 step_number의 square root의 역수에 비례하여 learning rate이 감소하는 learning rate scheduling이 사용 되었습니다.

 

Regularization

적용된 Regularization 방법은 세가지 입니다.

우선 모든 sub-layer 직후, 그리고 Positional Encoding이 더해진 후에 Drop-out이 적용되었습니다.

또한, Drop-out에 이어 앞서 말씀드렸던 Layer-normalizationresidual connection이 identical layer의 구성요로서 적용되었습니다.

Regularization

 

2.Results

실험은 다음의 세가지 형태로 진행되었습니다.

 

result 1.
첫번째 실험은 self-Attention 사용에 따른 성능개선을 보여줍니다. 다음 세가지 기준으로 모델을 비교하였습니다.

1) layer의 computational complexity를 통해 전체적 구조의 계산 효율성을 테스트 하였습니다.

2) 병렬처리 효율성을 계산하기 위해 필요한 최소한의 Sequential Operation을 계산하였습니다.

3) long term dependency 문제를 고려하기 위해 Maximum Path Length를 비교하였습니다.

실험결과 Self-Attention RNN,Covolution 방법에 비해 모든 측면에서 더 좋은 효율성을 보였습니다.

Self-Attention(restricted)는 추가적인 계산 효율을 위해 size r의 이웃 position 만을 고려한 모델입니다. Luong Attention의 local Attention과 비슷한 개념 같습니다.

restricted self-Attention을 통해 긴 문장에 대한 계산복잡도는 개선되었지만, maximum path length가 늘어나는 결과를 가져왔습니다. 따라서 추후 연구를 계획중이라고 합니다.

 

result 2.

두번째 실험은 Machine translation 입니다.

translation task에서 많이 사용되는 English-to-German translation dataset이 사용되었으며, BLEU score을 사용하여 비교하였습니다.

BLEU score는 translation task에서 사용되는 대표적인 metric으로 자세한 설명은 아래의 글을 참고 부탁드립니다.

 

BLEU(bilingual Evaluation Understudy) score

BLEU BLEU(bilingual Evaluation Understudy) score는 input과 output이 모두 sequence로 이루어져 있는 경우 사용하는 지표로서 machine translation task에 주로 사용됩니다. $$BLEU = min(1,{output\,length(예..

supkoon.tistory.com

Transformer가 대체적으로 매우 우수한 성능을 보였습니다.

특히 Transformer(big)이 기존의 앙상블 model 보다도 좋은 성능을 보이며 SOTA를 달성하였습니다.

 

result 3.

마지막 실험은 transformer 구조의 variation에 따른 성능 비교입니다.

Attention heads의 수, key, value의 차원 등을 바꿔가며 여러가지 variation model을 비교하였습니다.

row (A)의 결과를 통해 Single head보다 상대적으로 multi-head의 성능이 우수함을 알 수 있었습니다.

또한 head의 수가 너무 많을 시에는 오히려 성능이 저하되었습니다. 따라서 validation을 통한 적절한 heads number의 중요성을 확인할 수 있었습니다.

row (B)를 통해 key의 차원을 줄이는 것이 성능하락을 불러옴을 알 수 있습니다.

row (C),(D)는 큰 모델에 따른 drop-out regularization의 필요성을 보여줍니다.

마지막으로 row (E)는 positional encoding을 학습 가능하게 했을때의 변화를 보여줍니다. base model과 비교했을 때, BLEU score의 변화가 없기 때문에 sine,cosine 함수에 비한 메리트가 없었음을 알 수 있습니다.

 

마무리

본 논문은 RNN구조에서 벗어나 처음으로 온전히 Attention 구조만을 사용하는 Transformer를 제안합니다. Transformer는 scaled dot-product와 multi-head Attention을 통해 기존의 Attention mechanism을 개선하고, 모델 내부 적재 적소에 Attention을 사용하였습니다.

그 결과 Transformer 구조는 병렬처리와 같은 계산 효율성 지표, Machine Translation의 BLEU score 모두에서 기존의 SOTA 모델보다 훨씬 좋은 성능을 보이며 모델의 강력함을 증명하였습니다.

Transformer는 현재 필수적인 요소입니다. Bert, GPT, XLnet 등의 다양한 방법론들이 Transformer구조를 바탕으로 연구되어 Language model에서 뛰어난 방법으로 손꼽히고 있습니다. Attention is all you need 라는 재치있는 제목이 최고의 연구결과에 대한 자신감을 드러내고 있는 것 같습니다.

이후에는 Transformer 기반의 pretrained language model과 개인적으로 공부했던 추천 시스템 논문들을 리뷰하도록 하겠습니다. 감사합니다.

 

반응형