ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Attention Is All You Need] 논문 리뷰
    Natural Language Processing 2021. 2. 25. 15:09

    최근 Natural Language Processing(NLP) 분야 뿐만 아니라 Computer Vision 등의 다양한 분야에서 응용되고 있는 모델이 바로 Transformer 입니다. 트랜스포머는 오늘 설명할 논문인 Attention Is All You Need 에서 제안된 모델로서, 매우 범용적이라는 특성을 가지고 있습니다.

     

    NIPS 2017에서 발표된 논문으로 구글 브레인, 리서치 팀의 Vaswani 외 저자들이 집필한 논문입니다. 조경현 교수님의 Neural Machine Translation by Jointly Learning to Align and Translate 에서 다룬 Attention의 개념과 더불어, neural machine translation의 한 획을 그은 트랜스포머를 제안합니다. 기존의 encoder-decoder architecture를 그대로 가져가며, machine translation 태스크를 수행합니다. transduction model로서(c.f. induction, deduction), observed cases 로부터 specific cases에 대한 추론(reasoning)을 수행합니다. 이는 source sentence로부터 target sentence를 번역해내는 task라는 점을 상기하면 이해하기 편합니다.

     

    본 논문에서 제안한 트랜스포머의 특징은 바로, 모델이 완전히(entirely) Attention 에 의존한다는 점입니다. 이는 기존에 machine translation과 language modelling 에 활용된 RNN 이나 CNN(1D)을 전혀 사용하지 않았다는 것입니다. 특히, RNN의 sequential 한 계산이 불필요하다는 점은 모델을 parallelizable 하게 함으로써, 학습시간을 크게 단축시키고 병렬계산을 가능하게 합니다.

     

    Transformer의 핵심은 두가지 입니다. 첫번째는 self-attention 혹은 intra-attention으로서, encoder와 decoder 부분 모두에 사용됩니다(decoder 에서는 특별히 masking이 적용됩니다.) 두번째는 encoder-decoder attention 으로서, 자기 자신의 모든 부분에 attend 하는 self-attention과 달리, 기존 attention을 활용한 machine translation 모델과 같이, encoder의 계산값을 사용하여 decoder의 계산을 진행하는 방법을 의미합니다. 논문의 제목과 같이, Attention만을 사용하여 machine translation 등의 다양한 분야의 적용을 가능케 한 것이 바로 트랜스포머 입니다.


    Preliminaries

     

    들어가기 전, machine translation 의 몇가지 흥미로운 예시를 살펴보겠습니다. 저는 NLP분야 전공이 아니기 때문에, 가볍게 읽으시길 권합니다.

     

    "The animal didn't cross the street because it was too tired"

    이 문장에서 it은 the animal 일까요 아니면 the street 일까요? 우리 인간의 이해방식으로 이는 animal 입니다. 그러나 기존의 machine translation 방식대로 RNN을 사용한다면, 문장내에서 it 이라는 단어와 멀리 떨어진 animal 보다는 street이라는 단어에 machine 은 더 많은 정보를 사용하여 번역을 진행할 것입니다. 이것을 해결한 것이 바로 Attention 으로서, 번역시에 각 단어 위치마다 source sentence의 모든 단어를 attend 하고, attention score를 반영한 context vector를  생성하여 이를 번역에 직접적으로 사용합니다.

     

    "I arrived at the bank after crossing the river"

    이 문장에서 bank 라는 단어는 우리가 익히 아는 은행이라는 뜻이 아닌, '둑, 제방' 이라는 의미를 가집니다. 이는 문장 말미의 the river 라는 부분(context)을 고려할때 더욱 정확한 번역이 가능하다는 점을 상기시킵니다.

     

    이와 관련하여 NLP에 관심이 있으신 분들은 Winograd Schema라는 것을 찾아보시길 권합니다. 하나의 예는 아래와 같습니다.

    "The city councilmen refused the demonstrators a permit because they [feared/advocated] violence"

     


    1. Introduction

     

    기존에는 RNN(LSTM, GRU 등) 계통의 모델을 사용하는 sequence modelling 접근방식이 많았습니다. 또한 encoder-decoder 구조를 사용했습니다. 이러한 방식의 근본적인 문제는 바로 RNN 의 sequential한 computation입니다. recurrent하게 계산을 timestep마다 진행해야하기 때문에, 계산의 parallelization이 불가능합니다. 이는 CNN 및 여타 모델과 비교할때, 큰 단점으로 다가옵니다. 학습 및 inference 시의 시간이 월등히 높기 때문입니다.

     

    조경현 교수님의 Attention 논문 이후 무수히 많은 NLP 연구들은 attention을 적용해 왔습니다. 문장 내의 단어들간의 dependency를 단어간 거리에 상관없이(사실상) 고려할 수 있다는 장점 때문입니다.


    2. Background

     

    기존에도 이미 RNN의 sequential computation의 단점을 극복하기 위한 연구들이 있었습니다. Extended Neural GPU, ByteNet, ConvS2S 등의 연구가 그것입니다. 그러나 여전히 이러한 연구들은 한 문장 내에 멀리 떨어진, 실제로는 높은 연관성을 갖는 단어 간의 관계를 학습하기에 어렵다는 단점을 가졌습니다. End-to-end memory network라는 기존의 memory network의 개념을 발전시킨 연구도 존재했습니다.

     

    여전히 마땅한 대안은 없었고, 결국 attention 만을 사용한(w/o RNN nor CNN) 트랜스포머는 기존의 여러 문제를 해결하며 혜성처럼 등장합니다.

     


    3. Model Architecture

     

    트랜스포머의 기본적인 구조는 다음과 같습니다. 여러개의(N=6) encoder와 decoder가 층층이 쌓인 구조로서, encoder와 decoder 각각은 상이한 구조를 가집니다.

    Transformer architecture

    단순하게 표현하자면, 트랜스포머는 stacked self-attention + point-wise FC layers 라고 볼 수 있습니다.

     

    먼저 인코더입니다. 총 N(=6)개가 겹쳐진 형태이며 각각의 encoder는 다음과 같습니다.

    encoder

    후에 설명될 multi-head self-attention이 존재하고, 뒤이어 position-wise FC layer가 존재합니다. 중간에 residual connection(skip-connection) 이 들어가고, layer normalization 이 사용됩니다. 모델 안에서 data representation은 d_model(=512) 크기의 dimensionality를 가집니다. 이는 embedding dimension과 동일한데, encoder와 decoder 모두 auto-regressive 하므로, 입출력이 동일한 dimensionality를 가져야 하기 때문입니다.

     

    디코더도 비슷한 구조인데, 다만 encoder에서의 정보를 사용하는 attention 단이 존재하고, 뒤에 나올 target words를 무시하도록 하는 masking 이 적용된 self-attention이 사용됩니다.

    decoder

    Attention의 설명입니다.

    attention

    attention은 별다른 것 없이, Query가 주어졌을 때, 상응하는 Key-Value set을 찾아 mapping 하는 것이라고 생각하면 됩니다. 조경현 교수님의 논문에서는 decoder 단의 hidden state가 Q, annotation과 attention score가 Key-Value pair 였다고 생각하면 될 것입니다. 이와 동일한 방식으로 self-attention은 적용됩니다.

     

    논문에서 사용된 attention은 scaled dot-product attention이라 불립니다. scaled 라는 것은 dot product 시의 결과값의 절대적 크기를 줄이고자 scale을 한다는 뜻이고, 두 벡터의 similarity measure를 위해 dot-product 를 사용한 attention 이라는 것입니다.

    Query, Key, Value 가 matrix 형태로 표현되고, sqrt(d_k) 값을 사용하여 scale됩니다. 이를 V matrix와 곱함으로써, weighted sum 처럼?(conceptually) 계산이 진행됩니다. dot-product는 additive attention(하나의 feedforward neural network를 compatibility function으로 사용하는 경우)보다 빠르고, space-efficient 하다고 합니다. 다만 dot product의 특성상 절댓값을 줄여줄 필요가 있습니다(dimensionality가 커지는 경우에)

     

    이러한 방식의 attention을 h 번 반복하는 것이 multi-head attention입니다. attention 계산 이후 동일한 dimensionality를 가져야 하므로, 실제 각 head(부분)에서 attention 계산시에는 Q,K,V의 dimensionality가 작은 값으로 사용됩니다(e.g. 512/h 로). 각 작은 부분의 Attention head는 위와 동일한 계산을 거칩니다.

    그리고, 각 head의 결과값들은 concat된 이후, output dimensionality(512)로 projection 해주게 됩니다. 

    이렇게 한개의 head만을 가지는 단순한 attention 이 아니라, parallel 하고 작은 multi-head attention을 사용하는 이유는 각 attention head가 서로다른 semantic 혹은 syntactic 한 context를 학습하며, 동시에 서로 다른 부분을 attend하게 함으로써 좀더 복합적이고 풍부한 학습을 가능케 하려는 목적입니다. 혹자는 다음과 같이 표현합니다. attend to information from different representation subspaces at different positions

     

    위의 multi-head attention은 먼저 encoder-decoder attention 부분에서 사용됩니다. Query는 previous decoder의 출력을 사용하고, Key-Value set은 encoder의 output을 사용합니다. 또한 트랜스포머의 핵심인 self-attention도 multi-head로서, encoder와 decoder 각각의 부분에서 사용됩니다. self-attention이라는 이름답게, Query와 Key-Value 모두 자기 자신의 output을 사용하게 됩니다. 직관적으로는, 각 단어의 위치에서 동일 문장 내 다른 모든 단어에 대해 attend 하도록 하는 것이 self-attention 입니다.

     

    Position-wise FC(feedforward) layers는 attention 이후에 연결되며, 단어(혹은 position)마다 separately & identically 하게 적용됩니다. 이는 1X1 convolution 으로도 생각할수 있습니다.

     

    이렇게 attention 및 FC layer 만으로만 sequence를 처리하게 되면, 문장 내 각 단어의 위치정보를 잃어버리게 됩니다. 실제 번역 및 언어 모델링에서는 단어 위치(절대적/상대적 모두)가 매우 중요하므로, 이를 고려하기 위해, positional encoding을 적용하게 됩니다. 이는 단어별로 embedding dimension과 동일한 크기(=512)의 encoding vector를 추가해줌으로써, 단어의 위치정보를 유지시키려는 장치입니다. 다음의 식을 사용하여 pos은 단어내 문장의 위치, i는 dimension의 index 단어 위치별 정보를 고려하게 만듭니다. 

     

Designed by Tistory.