.box_article .article_cont p code

상세 컨텐츠

본문 제목

1. Attention is all you need 논문 리뷰

심화 스터디/NLP 스터디2

by dudwnqkr 2021. 9. 18. 09:45

본문

0. Abstract

기존의 Sequence transduction 모델들은 대부분 복잡한 Encoder와 decoder를 포함하는 recurrent하거나 convolutional한 인공신경망을 기반으로 한다. 본 논문에서는 이러한 recurrence/convolutions를 제외하고 Attention 구조 메커니즘 만을 이용한 보다 단순한 Transformer 구조를 소개한다.

1. Introduction

기존의 순환 신경망인 LSTM이나 GRU와 같은 모델들은 sequential modeling과 언어 모델링/기계 번역과 같은 transduction 문제들에서 SOTA 결과를 보였지만 이전 시점의 은닉 상태와 현 시점의 입력으로 새로운 은닉 상태의 sequence가 출력되는 구조로 인해 병렬 처리가 불가능했다. 그에 반해 Attention 메커니즘과 본 연구에서 새롭게 소개하는 Transformer 메커니즘은 이러한 문제를 해결해 입력과 출력 간의 의존성을 반영할 수 있었는데 이를 정리해 비교하면 다음과 같다.

(1) Recurrent model

  • 입력과 출력의 symbol position에 따라서 계산 → token 정보 정렬 후 은닉 상태 벡터인 h_t 업데이트하면서 계산
  • 연속적으로 이어지는 계산이기 때문에, 병렬 처리 난해 → 긴 문장에서는 그만큼 인공 신경망의 input에 넣어줘야 하기 때문에 메모리 한계의 문제점 발생

(2) Attention

  • 출력 정보 중 어떤 정보가 중요한지 가중치 부여 → h_t 에 곱해서 결과 계산
  • 입력이나 출력 sequence의 거리에 상관 없이 단어 간 관계를 연결하는 일종의 '의존성' 모델링 가능

Q: Attention은 어떻게 입력 또는 출력 sequence의 거리에 상관없이 모델링이 가능할까?

A: 기존 RNN과는 달리 각 시점 별 은닉 상태를 모두 이용했기 때문이다. 

 

「Attention의 경우 시점 별 은닉 상태를 모두 이용해 벡터로 변환하기 때문에 정보의 손실이 없고 무엇보다 '고정 벡터'가 아닌 문장의 길이에 비례한 크기의 벡터를 생성하기 때문에 recurrent 모델에서 나타나는 문제를 해결할 수 있음」

 

(3) Transformer

  • recurrence를 제거하고 Attention에 전적으로 의지해 입력과 출력 간 관계를 인식함으로써 의존성을 반영
  • Attention → 한 번의 행렬 곱으로 위치 정보가 포함된 sequence 한 번에 계산 → 병렬 처리 가능!

2. Background

(1) Extended Neural GPU, ByteNet, ConvS2S etc.

  • 앞서 언급된 순차적인 계산의 문제점을 해결하기 위해 등장한 방법
  • CNN 사용 + 모든 입력, 출력 위치에 대한 은닉값에 병렬 처리 구현
  • 임의의 두 입력, 출력 위치를 연결하기 위한 연산 횟수가 거리에 따라(선형 또는 로그 비례) 증가 ⇒ 장거리 의존성을 학습하기 어려움

Q. Transformer는 어떤가?

A: attention-weighted positions를 평균화 해 '연산 횟수'를 감소 시킴 (이 과정에서 발생하는 효율성 문제는 Multi-head Attention의 동시 계산을 통해 해결)

 

(2) Self-attention (= Intra-attention)

target 문장을 만들기 위해 서로 다른 소스 sequence의 hidden 정보를 참고하는 것이 아니라 하나의 sequence에 대해, 그 안에 있는 서로 다른 위치 정보가 서로에게 가중치를 줌 → 한 sequence에 대한 representation을 효과적으로 쓸 수 있게 한다.

[그림 1]. Self-attention의 작동방식

본 연구에서 제시하는 Transformer는 유일무이하게 recurrence를 배제하고 self-attention만 의존하는 변형 모델이다.

3. Model Architecture

성능이 높은 대부분의 sequence 변형 모델들은 Encoder-Decoder 구조를 갖는다. 여기서 Encoder는 입력 sequence를 mapping한 다음 연속형으로 표현하고 이를 바탕으로 Decoder는 출력 sequence를 생성한다. 이전 seq2seq 구조에서는 Encoder와 Decoder에서 각각 하나의 RNN이 t개의 시점(time-step)을 가지는 구조였다.

 

Transformer의 전체적인 구조는 Encoder-Decoder에 stacked self-attention 메커니즘과 point-wise, fully connected layers 등을 사용한다. 이를 시각화하면 다음과 같다.

[그림 2]. Transformer의 구조

3.1 Encoder and Decoder Stacks

Encoder

인코더는 6개의 동일한 층을 반복해 구성된다. 각 층에는 2개의 sub-layer가 있으며 1)multi-head self-attention mechanism과 2) pointwise fully-connected 순전파 네트워크이다.

  • 각 단어의 위치 정보를 인코딩해 임베딩 출력 값과 함께 사용 → input
  • Multi-Head attention: self-attention을 병렬적으로 사용
  • Encoder의 전체적 flow: Multi-Head self-Attention에 도착해 Attention 수행 → Residual Connection & Layer Normalization 수행 → Feed-Forward 도착 → Residual Connection & Layer Normalization 수행 → output : 이 과정을 6번 반복한다.
  • 각 sublayer의 결과 값 = LayerNorm(x+Sublayer(x))
  • Sublayer(x): sublayer에서 입출력 dimension은 512 (임베딩 벡터의 차원과 Sublayer의 출력 벡터 차원이 같아야 하므로 본 논문에서는 512 차원으로 통일)

Decoder

Decoder도 Encoder와 같이 6개의 동일한 층으로 구성된다. Encoder와 다르게 총 3개의 sub-layer를 갖고 있으며 2개는 기존의 Encoder의 sub-layer와 동일하고 추가로 3) Encoder의 ouput에 대해 Multi-head Attention을 계산하는 sub-layer (Cross Attention)이 있다.

  • [그림 2]. 과 같이 Multi-Head Attention layer에서는 Encoder의 output stack을 참고
  • 인코더와 비슷하게 Residual Connection & Layer Normalization이 각 sub-layer 뒤에 있음
  • Encoder 구조 + 뒤에 오는 단어를 미리 알지 못하게(앞에 있는, 아는 단어로만 예측했다고 확실히 하기 위해서) 마스킹한 Attention layer

3.2 Attention

Attention이란, query, key-value를 출력 값에 mapping하는 것. 결과적으로 최종 출력은 value의 가중치를 통해 계산 되며 각 가중치는 key와 query 간의 일종의 호환 정도에 따라 결정된다.

[그림 3]. Transformer의 Attention

3.2.1 Scaled Dot-Product Attention

[수식 1]. Scaled Dot-Product Attention

계산 과정

같은 차원을 갖는 query와 key의 스칼라 곱을 계산 → 스케일링의 목적으로 sqrt(d_k) 값으로 나눠 줌 → Softmax 계층을 통해 확률화 (가중치) → 또 다른 입력인 value에 가중치 계산

3.2.2 Multi-Head Attention

[수식 2]. Multi-head attention

Single Attention 보다 각 query, key, value에 대해 서로 다르게 학습해 linear projection 하는 것이 더 낫다. 서로 다른 위치에서 서로 다르게 나타나는 representation 정보를 반영 가능하기 때문이다.

 

계산 과정 

project된 query, key, value에 대해 (이게 나눠 주는 개념: 여러 개의 가중치로 선형 결합 계산을 해 쪼개지는 것) 병렬적으로 Scaled Dot-Product Attention 수행 → 각 출력 값을 연결 → 다시 한 번 project(가중치와 선형 결합)를 통해 최종 출력 값 산출 

→ 각 head의 차원이 감소해 multi로 계산됨에도 불구하고 single attention과 계산 비용은 비슷

3.2.3 Applications of Attention in Our Model

본 연구에서 새롭게 소개하는 Transformer는 Multi-head Attention을 다음과 같은 3가지 방식으로 활용한다.

 

1) Encoder-Decoder Attention 층에서 query는 이전 Decoder에서, key와 value는 Encoder의 출력값에서 가져온다.

→ Multi-head Attention을 Decoder 파트에 사용함으로써 Decoder가 input sequence의 모든 position을 고려할 수 있음.

 

2) Encoder는 Self-attention 층을 포함

→ 해당 층에서 key, value, query 벡터는 모두 Encoder의 이전 층의 출력에서 오기 때문에 Encoder의 각 위치에서 이전 층의 모든 위치를 고려할 수 있음.

 

3) Self-attention 층이 Encoder에서는 각 위치에서 이전 층의 모든 위치를 고려하도록 한다면, 해당 층은 Decoder에서 현재 위치를 포함한 이전 위치들의 원소를 참고할 수 있도록 한다.

→ auto-regressive 속성을 보존하기 위해 Decoder는 출력을 생성할 시 다음 출력을 고려해서는 안되기 때문에 이를 위해 scaled dot-product attention에서 마스크(음수 무한대까지)를 씌움으로써 각각의 단어가 앞 부분의 단어만 사용하도록 함.

3.3 Position-wise Feed-Forward Networks

3.2에서 언급한 Attention sub layer말고도 Transformer의 Encoder와 Decoder 각 층에서는 fully-connected feed-forward network를 포함한다. 이 네트워크는 선형 변환 과정에서 사용되는 모수는 같은 위치에 대해선 동일하지만 계층 마다 다른 모수를 사용 때문에 position-wise라고 일컫는다.

[수식 3]. Position-wise Feed-Forward Networks

위의 [수식 3]을 통해 확인할 수 있듯이 2개의 선형 변환과 ReLU 활성화 함수 (max(0,x))로 구성되어 있다.

3.4 Embeddings and Softmax

다른 sequence transduction model과 유사하게, input과 output tokens를 model의 차원을 갖는 벡터로 변환하기 위해 학습된 embedding을 사용한다. 또한 Decoder의 출력으로 다음 token의 확률을 예측하기 위해 softmax 함수를 사용한다.

→ 이 과정에서 임베딩 계층과 Softmax 이전의 선형 변환 과정에서 동일한 가중치 행렬을 공유

3.5 Positional Encoding

  • Transformer 모델 구조에서 input과 ouput를 받는 경우에 가장 먼저 처리하는 단계

Transformer 모델은 recurrence나 convolution을 사용하지 않기 때문에 단어의 위치정보를 가지고 있지 않는다. 따라서 sequence의 순서성을 이용하기 위해, position에 대한 정보를 sequence의 token에 주입해야 줘야 한다. 이를 위해 Encoder와 Decoder의 input embedding에 “positional encoding”을 더해준다.

 

논문에서는 다른 frequency의 sin, cos 함수를 사용해 이를 구현한다.

[수식 4]. positional encoding

보다 자세한 설명은 다음 링크를 참고하길 바란다:)

https://skyjwoo.tistory.com/entry/positional-encoding%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

 

positional encoding이란 무엇인가

Transformer model을 살펴보면, positional encoding이 적용된다. 다음 그림은 transformer 모델에 대한 구조도 인데, positional encoding을 찾아볼 수 있다. 출처는 https://www.tensorflow.org/tutorials/text/..

skyjwoo.tistory.com

4. Why Self-Attention

Self-attention의 세 가지 필요성

  1. 계층 당 총 계산 복잡도(Complexity per Layer): sequence의 길이 n이 표현 차원 d보다 작을 때 Recurrent 보다 나음 (실제로 NLP에서는 그러한 경우가 많음)
  2. 병렬화할 수 있는 계산의 양(Sequential Operations): O(1)의 상수 값을 가지므로 선형 복잡도를 갖는 Recurrent 보다 나음
  3. 장거리 의존성을 학습(Maximum Path Length)

[표 1]. Self-attention의 성능 비교

부수적인 이익으로, Self-attention은 더 해석 가능한 모델을 산출할 수 있다. 

5. Training

생략

6. Result

생략

7. Conclusion

Transformer는 recurrence와 convolution을 모두 제거한, 오직 Attention에만 의존하는 새로운 종류의 모델이다. 기계번역 태스크 이외에 다른 NLP 태스크에서도 기존 RNN이나 CNN을 사용하는 모델보다 훨씬 학습 효율이 좋을 뿐더러 높은 성능을 가진다.

관련글 더보기

댓글 영역