반응형


Attention Is All You Need

 

Transformer 구조를 다룬 논문인 Attention Is All You Need를 리뷰해보자.

(제가 이해한 내용을 바탕으로 적다보니 혹시 잘못된 부분이 있으면 댓글 부탁드립니다!)

 

Abstract & Introduction


  • LSTM과 Gated Recurrent Neural Network 등의 모델이 Sequence Modeling에 있어서 독보적인 성능을 확립하였고, Language Modeling과 Machine Translation 부문에서 크나큰 발전을 가져왔다.
  • 하지만, LSTM류의 알고리즘들은 입력값을 순차적으로 받고 입력을 받으면서 매번 hidden state를 갱신하는 과정을 거치기 때문에 병렬화에 어려움이 있다.
  • 뿐만 아니라, 긴 Sequence 길이에 취약하고, 메모리를 많이 잡아먹는 등의 문제점이 존재하였다. 비록 이를 효율화하기 위해 수많은 연구들이 진행되었지만, 순차적 입력 방식에 따른 한계점은 근본적으로 해결되기 어려운 양상을 보였다.
  • 본 논문에서는 주로 RNN과 함께 사용되던 Attention Mechanism만을 사용한 새로운 Architecture인 Transformer를 제안하였으며, SOTA를 달성함과 동시에 8개의 P100 GPU로 12시간만에 학습을 이뤄내는등 계산효율성도 크게 향상시켰다.

 

Background


  • 기존 연구(Extended Neural GPU, ByteNet, ConvS2S)의 경우 Sequence의 계산을 최대한 줄이는 방향으로 연구를 진행하였다.
  • CNN을 Basic Building Block으로 사용하여 모든 입력과 출력 위치에 대한 Hidden Representation을 병렬적으로 계산하는 방식을 통해 효율성을 증대시켰다.
  • 하지만 위와 같은 방식은, Position이 멀어지면 이를 계산하기 위한 추가적인 연산량이 증가한다. ConvS2S의 경우엔 선형적으로 증가하고, ByteNet의 경우 Logarithmical하게 증가한다. 
  • 즉, 거리가 멀어질수록 학습이 어려워지게 만든다.
  • Transformer 방식은 이러한 연산량을 효과적으로 감소시켰으며, 비록 가장 효율적인 Resolution을 찾지 못할 수 있다는 단점도 존재하지만 이는 Multi-Head Attention 방식으로 상쇄할 수 있다고 주장한다.

 

Model Architecture


Encoder

  • 6개의 Stacked Layer로 구성되어 있다.
  • 각각의 Layer는 2개의 Sub-Layer를 가지는데, 한가지는 Multi-Head Self-Attention Layer이고, 나머지 하나는 Position-Wise Feed Forward Layer이다.
  • 각각의 Layer는 ResNet에서 제안됐던 Residual Connection을 적용하였으며 LayerNorm을 적용하였다.
  • 임베딩 Layer와 같이 각각의 Layer의 Output의 Dimension은 512이다.

Decoder

  • Encoder와 마찬가지로 6개의 Stacked Layer로 구성되어 있다.
  • 그리고 1개의 Sub Layer가 추가되었는데, 이는 Encoder Stack의 Output을 받아서 Multi-Head Attention을 수행한다.
  • 해당 Layer는 즉, Attention에 필요한 Q,K,V중 Query를 이전 Decoder Layer로 부터 입력받고, Key, Value를 Encoder의 Output 값을 활용한다.
  • 첫 Sub Layer에는 Masked Multi-Head Attention을 적용하였는데 이는 Encoder 부분의 현재 시점에서 아직 등장하지 않은 "미래시점"의 단어를 제거해줌으로써 Cheating을 방지하고, 모델이 보다 General하게 학습될 수 있도록 한다.
    이는, Transformer가 입력을 순차적으로 받지 않고 한번에 받기 때문인데, i번째 위치에서 예측을 진행할 때에는 i번째 위치 이후에 등장하는 단어들에 대해서는 접근이 불가능하도록 Mask값에 음의 무한대를 취해주는 식이다.
  • Ex) I Love You. 가 들어오고 이를 독일어로 번역한다고 했을 때, I 만 입력됐을 때, I Love You에 대한 독어 정답값을 미리 알고 있는 Decoder에서 독일어로 I에 해당하는 부분만 남기고 다른 부분을 모두 Masking 해주는 방식

Attention

  • Attention의 3가지 요소는 Query, Key, Value이다.
  • I Love You 라는 단어가 있을 때, Query는 Attention을 구하고 싶은 주체이다. 즉 I라는 단어가 I, Love, You라는 단어 각각에 대해서 얼마나 연관성을 가지는지를 구한다고 한다면, Query는 I, Key의 후보군은 I, Love, You가 된다.
  • 이렇게 Query와 Key를 통해 구해진 값을 통해 각 단어들간의 연관관계를 파악하고, Softmax를 취해주어 적절한 확률값을 구한뒤, Value와 곱해주어 Weight가 고려된 최종적인 Attention Value를 얻는다.
  • 본 논문에서 사용하는 방식은 Query와 Key 벡터를 행렬곱해주고 Scale을 진행하여 Scaled Dot-Product Attention이라고 명명되었다.
  • Dot Product Attention과 똑같은 구조이지만, 얻어지는 값에 dimension의 루트값으로 나눠주는 Scale 과정을 거친다는것이 차이점이다. 이는 작은 D값을 가질 때는 거의 차이가 없지만, 큰 Dimension값을 가질 때, Softmax가 극도로 작은 Gradient 값을 가지게끔 하는 부작용을 방지하여 성능 향상에 유의미한 효과가 있다고 저자들은 주장한다.

 

Multi-Head Attention

  • Single Attention을 통해 단순히 Attention을 계산하는 것보다, 저자들은 Q,K,V를 h번 다르게 수행하여 병렬적으로 연산하는것이 더 이득이 크다고 주장한다.
  • 단일 어텐션을 수행하지 않고, Q,K,V에 대해서 각각 d_k, d_k, d_v 차원으로 변환하는 서로 다른 h개의 Linear Projection을 진행하여 각각의 Projected Value에 대해서 병렬적으로 연산한뒤 concat, linear를 통해 최종 결과 벡터를 얻는 방식이다.
  • 이러한 방식은 다양한 Q,K의 조합을 통해서 다양한 Concept으로 학습이 가능하도록 하고 저자들이 주장하듯이, 가장 효율적인 Resolution에 가까운 결과를 얻을 수 있도록 한다.

 

Applications of Attention in Transformer

  • 이전 Decoder Layer로 부터 Query를 받아오고, Key와 Value를 Encoder Layer의 최종 output으로 부터 받아오는 방식을 통해 Decoder가 모든 Position에서 입력 문장의 전체를 확인할 수 있도록 하는 구조로, 전형적인 Encoder Decoder Attention 방식을 충실히 따랐다. (Seq2Seq)
  • Encoder는 자체적으로 문장에 대한 Attention을 학습하는 Self Attention Layer를 가지고 있으며, 마찬가지로 이전 Encoder의 Output 값을 받아 이전 영역의 모든 Positon에 대한 정보를 활용할 수 있다.
  • Decoder도 마찬가지로 Self Attention Layer를 가지고 있으나, Decoder의 Auto Regressive 성질을 보장하기 위해서 leftward information flow(i번째 시점에서, i보다 미래에 등장하는 단어를 미리 조회함으로써 i번째 단어를 결정하는 부적절한 현상)을 막도록 Masking을 진행한다. 이는 -inf의 값을 곱해주어 softmax에서 해당 위치의 원소값이 0에 수렴하도록 만드는 방식이다.

 

Positional Encoding

  • RNN이나 CNN을 전혀 사용하지 않다보니, Sequence에 대한 순서 정보를 전달할 수 없다.
  • 따라서 저자들은 상대/절대 적인 token의 위치를 전달해주기 위해서 Positional Encoding을 진행하였다.
  • 학습 가능한 방식, 주기 함수를 통한 고정 방식등 다양하게 사용자들이 선택할 수 있다.
  • 저자는 Sine, Cosine 함수를 통한 주기함수를 통해서 진행하였으며, 학습을 통한 Positional Encoding 방식과 정확도 차이가 크게 없었다고 한다.
  • 저자들은 성능차이는 그다지 없었지만, 학습에서 미처 접하지 못한 길이의 Sequence가 들어왔을 때도 적절히 처리가 가능한 Sinusoidal 방식을 채택하였다.

 

Result


 

  • 실험 결과 SOTA를 달성하였으며, 학습에 필요한 계산량 또한 획기적으로 줄인 것을 확인할 수 있었다.
  • BLEU 벤치마크 뿐만 아니라, Machine Translation, English Constituency Parsing 등 General Task에 대해서도 좋은 결과를 나타냈다.

 

Conclusion


  • 저자들은 본 논문을 통해 Attention만을 사용한 Architecture인 Transformer를 제안하였다.
  • Attention 방식과 효율적인 병렬 연산을 통해 계산량을 크게 감소시켰으며, 학습시간을 단축하면서 정확도는 기존 SOTA를 뛰어넘는 결과를 얻어냈다. (심지어 여태까지 발표된 모든 방식을 Ensemble한 것 보다도 높은 성능이다.)
  • 또한, 특정 Task에 종속적이지 않고 General하게 이곳저곳 적용이 가능하다는 것 또한 실험을 통해 입증하였다.
반응형
블로그 이미지

Hyunsoo Luke HA

석사를 마치고 현재는 Upstage에서 전문연구요원으로 활동중인 AI 개발자의 삽질 일지입니다! 이해한 내용을 정리하는 용도로 만들었으니, 틀린 내용이 있으면 자유롭게 의견 남겨주세요!

,