Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

고구마맛 블로그

Attention is all you need 본문

Paper Review/2022

Attention is all you need

밤고구마맛탕 2022. 6. 28. 01:04
< Attention is all you need >
Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Lukasz Kaiser, Illia Polosukhin

 

https://www.youtube.com/watch?v=AA621UofTUA&t=2348 

[딥러닝 기계 번역] Transformer: Attention Is All You Need (꼼꼼한 딥러닝 논문 리뷰와 코드 실습) by 동빈나

본 논문 요약은 대부분 위 동영상을 참고해 작성했으며, 제가 공부한 내용을 조금씩 더해 수정한 것입니다.

 

https://pozalabs.github.io/transformer/

 

Attention is all you need paper 뽀개기

Transformer paper review

pozalabs.github.io

 

Abstract

그 동안 sequence 간 변형 모델 영역에서 encoder와 decoder를 포함한 RNN 혹은 CNN을 활용하는 방식이 지배

 

적이었다. 또한 이 모델들에 attention 메커니즘을 적용하면 더 향상된 성과를 얻을 수 있었다. 본 논문에서 제안할 새로운 네트워크 아키텍쳐 Transformer는 CNN이나 RNN의 활용을 배제하고 attention 메커니즘만을 사용했다. 이 방식은 행렬곱을 이용해 병렬적으로 sequence를 처리하기 때문에 학습 시간 면에서 유의미한 감소와 향상된 성능을 보였다. Transformer는 기계 번역 영역 뿐만이 아닌 sequence data를 처리하는 다양한 task에 대해 일반화가 가능하고 좋은 성능을 볼 수 있다.

 

1. Introduction

RNN, LSTM, GRNN 등이 sequence 모델링에 그동안 효과적으로 사용되고 있었다. 하지만 Recurrent 형식의 모델들은 sequence에 포함되어 있는 각각의 토큰들에 대한 순서 정보를 먼저 정렬시킨 뒤 반복적인 입력으로 넣어서 hidden state 값을 갱신시키는 방식으로 동작하기에 sequence의 길이(token의 수)만큼 네트워크에 입력을 넣어야하므로 병렬적인 처리가 어렵다는 문제가 존재했다. 이는 기계 번역에서 문장의 길이만큼 입력을 반복 수행할 필요가 있다는 것을 의미하고, 메모리 및 속도 측면에서 비효율적이었다.

 

이어서 등장한 것이 attention 메커니즘이다. 매번 출력 단어를 만들어 낼 때마다 source sentence output의 중요도에 가중치를 부여하고, 이를 곱한 hidden state 값을 이용해 output을 보다 효과적으로 생성할 수 있었다. 다만 attention 메커니즘도 기본적으로 RNN과 함께 사용되는 경우가 많아서 근본적인 문제는 해결하지 못했다. 따라서 recurrence 속성을 아예 배제하고, attention 메커니즘만을 활용해 한 번의 행렬곱으로 위치 정보가 포함된 전체 sequence를 한 번에 처리, 병렬적인 sequence 처리가 가능해졌다.

 

2. Background

Self-attention은 Target sentence를 만들기 위해서 source sentence의 hidden 정보를 참고하는 것이 아니라, sentence 스스로에게 attention을 수행해 representation을 학습할 수 있도록 만들어 준다. Sequence에 포함되어 있는 서로 다른 위치에 대한 정보가 서로에게 가중치를 부여하도록 만들어서 sequence에 대한 representation을 효과적으로 학습하고 표현할 수 있도록 해주는 것이다. Transformer는 오직 self-attention만을 활용하여 sequence transduction을 수행하는 최초의 네트워크이다. GPT나 BERT는 transformer에서 제안된 아키텍쳐를 많이 따르고 있다.

 

3. Model Architecture

Sequence transduction 모델에서 많은 아키텍쳐는 encoder-decoder 구조를 따르고 있다. $x_1$부터 $x_n$까지 총 n개의 토큰으로 구성된 input sequence가 있을 때, 이 것을 연속적인 임베딩 벡터 $z$로 바꾸어주고, 임베딩 벡터 $z$가 주어졌을 때, decoder는 $y_1$부터 $y_m$까지 총 m개의 토큰으로 구성된 output sentence를 만드는 방식으로 동작한다. 이 때 기본적으로 RNN 구조를 따르고 있는 모델들은 auto-regressive하게 sequence의 길이만큼 네트워크에 입력이 주어지는 방식으로 동작한다. 다시 말해 이전 단계에서 생성되었던 symbol을 이용해서 다음번에 나올 output을 만드는 방식이다. 엄밀히 말하면 transformer 또한 encoder-decoder 방식을 채용하는 기본적인 아키텍쳐를 따르고 있다. 하지만 모델을 recurrent하게 이용하지 않고 attention 메커니즘을 활용해 sequence에 대한 정보를 한 번에 input으로 준다.

The Transformer - model architecture

(1) Encoder and Decoder Stacks

RNN을 사용하지 않는 대신 positional encoding을 input embedding을 추가해준다. 그리고 이 input이 query, key, value로 복제되어 multi-head attention을 수행하며 이 동작은 self-attention 방식이다. 또한 attention은 input과 output의 차원이 동일하다. 이후 residual connection과 normalization, feed forward layer, 다시 residual connection과 normalization을 수행한다. 이 과정을 N번 반복한다.

 

Decoder 파트에서는 지금까지 출력된 단어만 attention 할 수 있도록 masking을 한 상태로 첫 번째 attention을 수행한다. 그리고 decoder의 query와 encoder에서 얻은 key, value 값을 이용해 encoder-decoder attention을 수행한다. 이후 feed forward layer, linear layer를 거치고 softmax를 취해 output probabilities를 얻어낸다.

 

(2) Attention

(Left) Scaled Dot-Product Attention. (Right) Multi-Head Attention consists of several attention layers running in parallel.

Multi-Head Attention의 내부는 Scaled Dot-Product Attention으로 형성되어 있고, 각각의 query가 key와 value에 대해서 attention을 수행한다고 볼 수 있다. Query와 Key의 행렬곱을 수행한 후 softmax를 거치기 위해 $\sqrt{d_k}$, key의 차원 제곱근으로 나눠주는 scaling layer를 거친다. 또한 필요한 경우 mask vector를 사용하고, softmax를 취해 각 key에 대해서 갖는 중요도를 확률값으로 나타내고 value와 행렬곱을 수행해 attention value를 구한다. 여기서 softmax이전에 scaling을 거치지 않으면 결과가 좋지 않았다고 하는데 본 논문에서는 이를 softmax함수가 갖는 특성에서 기인한다고 추측한다. softmax는 중간 부분에서 gradient가 크고 side로 갈수록 gradient가 작아지는데, 값이 너무 커지면 gradient가 매우 작아져 학습이 힘들어지는 경우가 많이 발생하기 때문이다. 

 

Multi-Head Attention에서는 value, key, query를 복제하여 사용하고, 임베딩 차원 ($d_{model}$)을 value, key, query의 차원으로 바꿔주기 위해 linear layer를 거친다.임베딩 차원이 512라 하고, # of head가 8이면 linear layer는 64차원으로 만들어 주는 것이다. 다만 실제 implementation에서는 차원을 나누지 않고, 512*512의 병렬적 형태로 계산한 뒤 그 결과값을 나누어 사용하기도 한다. 그리고 각 Head에서 Scaled Dot-Product Attention을 수행하고 이를 합쳐서 linear layer를 거친다.

 

Transformer에서는 Multi-Head Attention을 3가지 방식으로 사용한다.

  • Encoder-decoder attention. Query를 decoder, key와 value를 incoder 파트에서 가져온다. output 단어를 만들기 위해 source sentence에 포함된 단어들 중 어떤 정보에 보다 초점을 맞춰야 하는지 계산하는 과정이다.
  • Encoder self-attention. Query, key, value를 모두 같은 곳에서 가져온다.
  • Decoder self-attention. Encoder와 다르게 $-∞$ mask를 씌워서 뒷단어에 대한 softmax 확률을 0으로 만들어 앞단어만 참조하도록 구성한다.

ReLU activation

Feed forward layer에서는 ReLU 활성화 함수를 이용하는데, $d_{ff} = 2048$의 고차원 hidden layer에 mapping되었다가 출력된다고 볼 수 있다.

 

Positional encoding

Sin과 Cos같은 주기 함수를 활용해 input의 위치 정보를 추가해 주는데, 꼭 이런 방식을 채택할 필요없이 embedding layer 또한 학습하도록 만들어서 네트워크를 구성할 수도 있다. 본 논문에서도 2가지 방식이 큰 성능차이가 없다고 말하고 있고, 다만 정현파 함수를 사용했을 때 보다 긴 sequence에 대응을 잘 한다.

 

4. Why Self-Attention
  • 각각의 layer 마다 계산 복잡도가 줄어든다.

Maximum path lengths, per-layer complexity and minimum number of sequential operations for different layer types

  • Recurrence를 없앰으로서 병렬적인 처리가 가능하다.
  • Long-range dependencies에 대해서도 잘 처리할 수 있다.
  • Attention 메커니즘 자체가 신경망을 보다 설명 가능한 형태로 만들어 준다. 실제로 우리는 각 단어를 출력할 때 소스 문장에서 어떤 단어를 가장 많이 참고해서 만들었는지를 시각적 데이터로 출력할 수 있다.

 

5. Training

WMT 2014 영어-독어, 영어-불어 dataset을 이용했고, 8개의 Nvidia P100 GPU를 사용했다. 그리고 Base model 만으로도 가장 좋은 성능(state-of-the-art)을 얻었고, 학습시간(12시간) 또한 매우 빠름을 보였다.

 

Regularization 효과를 위해서 residual learning을 수행할 때 dropout을 같이 사용할 수 있도록 만들고, label 값을 넣어줄 때 smoothing 기법까지 적용해 모델이 특정 출력 값에 대해서 확신을 가지지 않도록 함으로써 정규화 효과를 더 할 수 있었다.

The Transformer achieves better BLEU scores than previous state-of-the-art models on the English-to-German and English-to-French newstest2014 tests at a fraction of the training cost.

 

6. Results

Transformer 아키텍쳐에서 어떤 component가 상대적으로 중요한지에 대한 내용을 확인하기 위해서 모델 variation 실험도 진행했는데, 간단하게 head의 수를 줄여보거나, 특정 parameter의 수를 늘리거나 줄이며 실험을 했다.

Variations on the Transformer architecture

이런 Transformer는 기계 번역 뿐만 아니라 다양한 NLP task에서 사용이 가능하다. 대표적으로 구문분석 분야에 대한 실험 결과에서 확인해볼 수 있다.

The Transformer generalizes well to English constituency parsing

 

Code Implementation

https://paul-hyun.github.io/transformer-01/

 

Transformer (Attention Is All You Need) 구현하기 (1/3)

How to implement the transformer model

paul-hyun.github.io

위 링크의 Transformer 구현 1, 2, 3을 참고했다.

 

https://github.com/ndb796/Deep-Learning-Paper-Review-and-Practice/blob/master/code_practices/Attention_is_All_You_Need_Tutorial_(German_English).ipynb 

 

GitHub - ndb796/Deep-Learning-Paper-Review-and-Practice: 꼼꼼한 딥러닝 논문 리뷰와 코드 실습

꼼꼼한 딥러닝 논문 리뷰와 코드 실습. Contribute to ndb796/Deep-Learning-Paper-Review-and-Practice development by creating an account on GitHub.

github.com

이 링크의 코드도 정말 좋지만 현재 파이썬 환경에서 실행이 어려워 사용 X

 

<Results>

Transformer with GELU
Tranformer with ReLU

GELU와 ReLU의 정확도가 큰 차이를 보이지는 않았음.

 

Attention is all you need.pptx
3.62MB

 

Attention is all you need script.docx
0.03MB

 

 

위의 두 파일은 제가 논문 리뷰 발표 때 이용한 PPT 및 스크립트입니다. 본문에서 설명하지 않았던 내용도 추가되어 있습니다.

'Paper Review > 2022' 카테고리의 다른 글

Mention-Based Reasoning Network Part 2  (0) 2022.07.26
Mention-Based Reasoning Network Part 1  (0) 2022.07.25
Comments