
Abstract

Encoder와 Decoder를 포함한 형태로, 복잡한 RNN 혹은 CNN 기반의 시퀀스 간 변형이 일어나는 모델을 많이 사용.
Attention 메커니즘을 기반으로하여, recurrence와 convolution을 제거 Transformer 아키텍처를 제안한다.
번역 과제에서 우수한 성능을 보여주며, 병렬적으로 시퀀스 데이터를 처리하므로 적은 시간이 소요된다고 한다.
- WMT 201년도 데이터를 이용하여 영어를 독일어로, 영어를 불어로 번역하는 과정에서 훨씬 더 개선된 성능을 보여주었다고 한다.
트랜스포머는 기계 번역 뿐만 아니라, 다른 과제에서 일반화가 가능하다는 것을 보여준다.
Introduction

순환 신경망(RNN), 장단기 기억망(LSTM) , 그리고 게이트드 리커런트 신경망(게이트드 RNN) 등은 시퀀스 모델링과 언어 모델링과 기계 번역과 같은 변환 문제에서 효과적으로 사용되어졌다.

각각의 토큰들에 대한 순서 정보 정렬한 후, 반복적으로 입력으로 넣어 h(t)을 갱신시키는 방법으로 동작한다.
순환 모델인경우, 시퀀스의 길이 즉, 토큰의 개수만큼 뉴럴 네트워크에 입력을 넣어야하기 때문에 병렬적인 처리가 어렵다는 문제가 발생하게 된다.
다시 말해, 문장의 길이 만큼 입력을 수행할 필요가 있기 때문에 비효율성을 야기한다.

Attention 메커니즘이 등장하였고, 매번 출력 단어를 만들어낼때마다, 어떤 정보가 중요한지 가중치를 부여하고, 가중치가 적용되어 곱해진 h(t)값을 이용하도록 해서 출력단어를 보다 효과적으로 생성한다.
Attention 메커니즘은 RNN과 같이 사용한다.

Recurrence 특성을 완전히 제거하며, 입력과 출력 사이의 글로벌 의존성을 끌어내기 위해 attention 메커니즘을 전적으로 의존하는 트랜스포머를 제안한다고 한다.
Attention 메커니즘을 활용하기 때문에 더 많은 병렬처리가 가능하게 된다.
Background

“Reducing sequential computation”을 목표로 Extended Neural GPU, ByteNet 및 ConvS2S는 컨볼루션 신경망을 사용하여 모든 입력 및 출력 위치에 대해 숨겨진 표현을 병렬로 계산한다.
이 모델에서는 두 임의의 입력 또는 출력 위치 간의 신호를 연결하는 데 필요한 연산의 수가 위치 간의 거리와 함께 증가하며, ConvS2S의 경우 선형적으로, ByteNet의 경우 로그적으로 증가한다. 이는 먼 위치 간의 의존성을 학습하는 것을 더 어렵게 만든다.
Transformer는 이것이 상수 개수의 연산으로 줄어들지만, Attention 가중치가 적용된 위치의 평균화로 인해 효과적인 해상도가 감소하는 대가를 치르게 된다. 우리는 Multi-Head Attention으로 이 효과를 상쇄한다.
Self-attention은 intra-attention이라고 불리며, 단일 시퀀스의 서로 다른 위치를 연결하여 시퀀스의 표현을 계산한다.
End-to-end memory networks는 recurrent attention 메커니즘에 기반하고 있으며, 간단한 언어 질문 응답 및 언어 모델링 작업에서 좋은 성능을 보이는 것으로 나타났다.
Transformer는 시퀀스 정렬 RNN이나 Convolution을 사용하지 않고 입력과 출력을 표현하기 위해 전적으로 Self-attention에 의존하는 최초의 변환 모델이다.
Model Architecture


대부분의 경쟁력 있는 신경망 시퀀스 변환 모델이 인코더-디코더 구조를 사용한다는 아이디어를 소개하고 있다.
- 인코더-디코더 구조: 모든 경쟁력 있는 시퀀스 변환 모델은 인코더-디코더 구조를 따른다. 이 구조는 두 부분으로 나뉜다.
- 인코더 (Encoder): 인코더는 입력 시퀀스 (x1, …, xn)를 연속적인 표현으로 매핑한다. 이 표현은 z = (z1, …, zn)와 같이 표현된다.
- 디코더 (Decoder): 디코더는 z를 입력으로 받아, 하나씩 원소를 생성하여 출력 시퀀스 (y1, …, ym)를 생성한다. 즉, 디코더는 이전에 생성된 기호들을 추가 입력으로 사용하여 다음 기호를 생성한다.
- 자기 회귀 모델 (Auto-Regressive Model): 각 단계에서 모델은 이전에 생성된 기호들을 추가 입력으로 사용하여 다음 기호를 생성하는 자기 회귀적인 방식을 따른다. 이것은 현재 생성 중인 기호가 이전에 생성된 기호에 의존한다는 것을 의미한다.
결과적으로 Transformer 모델: Transformer 모델은 이러한 구조를 따르며, 인코더와 디코더 모두에서 쌓인 self-attention 및 포인트별 완전 연결 레이어를 사용한다. Figure 1의 왼쪽과 오른쪽 절반에서 해당 구조가 시각적으로 나타낸다.
Encoder and Decorder Stacks

Encoder(인코더)
- 인코더는 N = 6개의 동일한 레이어로 구성된 스택.
- 각 레이어는 두 개의 서브 레이어를 가지고 있다.
- 첫 번째 서브레이어는 멀티헤드(self-attention)이고,
- 두 번째는 간단한 위치별 fully connected feed-forward 네트워크이다.
- 우리는 각 두 개의 잔여 연결(residual connection)이 적용된다.
- 그 뒤에 레이어 정규화 (layer normalization) 를 적용한다.
- 모든 하위 레이어 및 임베딩 레이어의 출력 차원은 dmodel = 512로 설정된다. (dmodel 값은 변경가능한 값이다. 논문에서는 이렇게 진행됨)
Decoder(디코더)
- 디코더도 인코더와 유사한 구조를 가지며, N = 6개의 동일한 레이어로 구성됐다.
- 각 레이어에는 두 가지 하위 레이어가 있으며, 인코더와 동일하게 멀티헤드 어텐션 및 위치별 fully connected feed-forward 네트워크를 사용한다.
- 더불어, 디코더는 인코더 스택의 출력을 기반으로 하는 멀티헤드 어텐션을 수행하는 세 번째 하위 레이어를 삽입한다.
- 잔여 연결과 레이어 정규화도 디코더에서 사용된다.
- 또한, 디코더에서는 자신의 예측 위치 이후의 위치에 대한 어텐션을 방지하기 위해 self-attention 하위 레이어를 수정한다. 이렇게 함으로써 위치 i의 예측은 위치 i 이전의 알려진 출력에만 의존하게 된다.
Attention


- 어텐션 함수는 주어진 쿼리(query)와 일련의 키(key)-값(value) 쌍을 입력으로 받아 출력으로 매핑하는 함수이다.
- 여기서 쿼리, 키, 값, 출력은 모두 벡터이다. 이러한 벡터들은 다양한 정보를 나타낸다.
- 출력은 값(value)들의 가중 합으로 계산된다. 각 값에 할당되는 가중치는 쿼리와 해당 키 간의 호환성 함수(Compatibility function)에 의해 계산된다.
- 쿼리와 키 간의 호환성 함수는 두 벡터 간의 유사도를 측정하고, 유사도에 따라 가중치가 부여된다.
Q: 영향을 받는 벡터
K: 영향을 주는 벡터
V: 주는 영향의 가중치 벡터
Attention - Scaled Dot-product Attention

Attention(Q, K, V) = softmax(QKt/ √dk)V
"스케일드 닷-프로덕트 어텐션" 어텐션 메커니즘의 종류로
- 입력은 차원이 dk인 쿼리와 키, 그리고 차원이 dv인 값들로 이루어져 있다.
- 쿼리와 모든 키의 내적을 계산한 후, 이를 √dk로 나눈다.
- softmax 함수를 적용하여 값들에 대한 가중치를 얻는다.
- 실제로는 여러 개의 쿼리에 대해 동시에 어텐션 함수를 계산하며, 이들을 행렬 Q로 묶고, 키와 값도 각각 행렬 K와 V로 묶는다. 출력 행렬은 다음과 같이 계산한다.
Additive Attention vs Dot-Product Attention
- 가장 흔히 사용되는 두 가지 어텐션 함수는 가산 어텐션(Additive Attention)과 닷-프로덕트 어텐션(Dot-Product Attention) 이다.
- 닷 프로덕트 어텐션은 스케일링 요소인 √1/dk를 제외하면 우리의 알고리즘과 동일하다.
- 가산 어텐션은 하나의 은닉층을 가진 피드포워드 네트워크(feed-forward network)를 사용하여 호환성 함수를 계산한다.
- 두 방식은 이론적인 복잡도에서 비슷하지만, 닷 프로덕트 어텐션은 고도로 최적화된 행렬 곱셈 코드를 사용할 수 있어 실질적으로 훨씬 빠르고 메모리 효율적이다.
- dk 값이 작을 때는 두 메커니즘이 비슷한 성능을 보이지만, dk 값이 클 경우 스케일링 없이 닷 프로덕트 어텐션은 가산 어텐션보다 성능이 떨어진다.
- dk 값이 클수록 내적의 크기가 커져 소프트맥스 함수가 매우 작은 기울기를 갖는 영역으로 들어가게 되는 경향이 있기 때문이라고 추측한다. 이를 보완하기 위해 우리는 닷 프로덕트를 √1/dk로 스케일링한다.
Attention - Multi-Head Attention

dmodel 차원의 키, 값, 쿼리에 대해 수행하는 대신, 우리는 쿼리, 키, 값을 각각 dk, dk, dv 차원으로 학습된 선형 투영을 사용하여 h번 수행하는 것이 더 유익하다는 것을 발견했다.
Multi-Head Attention
- 쿼리, 키, 값 각각에 대해 어텐션 함수를 병렬로 수행하며, dv 차원의 출력값을 생성합니다. 이 출력값들은 병합되고, 다시 한 번 투영되어 최종 출력값을 생성한다.
- 선형 변환은 각각 다른 학습 가능한 선형 투영(projections)을 사용하여 이루어진다. 이때, 선형 투영에 의해 쿼리(Q), 키(K), 값(V)은 서로 다른 차원인 dk, dk 및 dv로 투영된다.
- 각 변환된 버전의 쿼리, 키 및 값에 대해 병렬로 어텐션 함수를 수행하면, 각 버전의 출력은 dv 차원의 값들로 나타낸다.
- 이러한 값을 연결(concatenate)하고, 다시 한 번 선형 투영을 수행하여 최종 결과를 얻는다.
- 멀티헤드 어텐션은 모델이 서로 다른 위치에서 다양한 표현 서브스페이스로부터 정보를 동시에 참조할 수 있도록 해준다. 단일 어텐션 헤드를 사용하면 평균화가 이를 방해한다.
MultiHead(Q, K, V ) = Concat(head1, ..., headh)WO
headi = Attention(QWiQ , K WiK , V WiV )
- 여기서 WiQ, WiK, WiV는 학습 가능한 파라미터 행렬로, 각각 dmodel 차원에서 dk, dk 및 dv 차원으로 투영한다.
- WO는 최종 출력에 대한 파라미터 행렬이다.
- h = 8개의 병렬 어텐션 레이어, 즉 헤드를 사용합니다. 각각의 경우 dk = dv = dmodel/h = 64로 설정된다. 각 헤드의 차원이 줄어들었기 때문에, 전체 계산 비용은 단일 헤드 어텐션을 전체 차원으로 수행하는 경우와 유사하다.
Attention - Applications of Attention in our Model
Position-wise Feed-Forwafe Netwokrs
Embeddins and softmax
Positional Encoding
Why Self-Attention
Tranining
Results
Conclusion