수식이 보이지 않을 때는 페이지를 새로고침해주세요🫡
0. Abstract
--- ---[용어]--- ---
🔸sequence transduction model : 순서가 있는 데이터를 변형하는 모델로, 대체로 인코더와 디코더로 구성된다.
🔸encoder : 입력 시퀀스로부터 context vector(문맥 벡터)를 생성한다. context vector는 입력 시퀀스의 특징들을 압축한 대푯값(representation)이다.
🔸decoder : encoder의 context vector를 전달받아 출력 시퀀스를 생성한다.
--- --- --- --- ---
[본문]
그동안 sequence transduction(연속적인 데이터를 변환하는) 모델들은 대부분 인코더와 디코더를 포함하는 복잡한 순환 신경망 또는 합성곱(convolutional) 신경망을 기반으로 했다.
가장 성능이 좋은 모델은 인코더와 디코더 중간을 attention 메카니즘으로 연결한 모델이었다.
논문의 저자들은 이러한 점에 착안하여 오직 attention 메카니즘만을 사용한 단순하면서도 성능이 좋은 신경망 아키텍쳐를 제안하고 있다.
1. Introduction
--- ---[용어]--- ---
🔸symbol position : sequence에서 특정 데이터의 시점(위치)를 나타낸다. 예를 들어 어떤 데이터 x_1의 시간 시점이 t라면, x_2 데이터의 상징적 위치는 t+1, x_0의 위치는 t-1처럼 나타낸다.
🔸modeling of dependency : sequence 데이터에서 서로 다른 요소 간의 관계를 파악하고 대표하는 능력을 의미한다.
--- --- --- --- ---
[본문]
RNN, LSTM, GRU은 시퀀스 모델링, 언어나 기계번역 같은 시퀀스 변환 과제에서 이전에 최고로 평가받은 모델들이다.
순환 모델들의 등장 이후로, 순환 언어 모델(recurrent language model)과 인코더-디코더 구조를 결합하려는 시도가 이루어졌다.
이런 순환 모델들은 연산 과정에서 시퀀스 데이터의 상징적 위치(symbol positions)를 고려한다. 단계적으로 position을 옮겨가며 학습하기 때문에 병렬 처리가 불가능하다. 따라서 시퀀스의 길이가 길어질수록 메모리 부족이나 연산량 증가의 문제에 직면하게 된다.
최근 연구에서는 factorization tricks(매개변수 수를 줄이고 훈련을 가속화하는 방법), conditional computation(dropout 기법, 강화학습 등이 해당)을 통해 계산 효율성을 향상했다. 그러나 병렬 처리를 하지 못한다는 근본적인 한계는 해결하지 못했다.
Attention 메카니즘은 시퀀스의 다양한 과제의 시퀀스 모델링 및 변환 모델에서 주목받기 시작했다. 그러나 대부분 순환 신경망과 결합하여 사용하는 형태를 보였다.
따라서 본 연구에서는 순환 구조를 완전히 배제하고 온전히 attention 메카니즘으로 input과 output 사이에 global dependencies를 수립할 수 있는 모델 구조를 제안하고 있다. 또한 이는 병렬처리를 가능케 하여 시퀀스 모델링의 계산 효율성을 더 향상시킬 것이다.
2. Background
- ByteNet and ConvS2S
[본문]
두 모델은 기초 구조로 CNN을 사용한다. 두 모델은 임의의 두 input과 output 데이터의 위치를 연관시키기 위해 연산 횟수가 데이터 위치 간 거리에 비례하여 증가하는데, ConvS2S는 선형적으로 그리고 ByteNet는 로그스케일로 증가한다.
반면 트랜스포머에서는 이 계산 횟수가 일관되게 감소한다. 비록 averaging attention-weighted positions 때문에 해상도 감소(reduced resolution)라는 문제가 발생하긴 하지만, 본 논문에서는 이를 Multi-Head Attention으로 상쇄한다고 한다.(Section 3.2)
- Self-attention
[본문]
Self attention이란, 하나의 시퀀스 내에서 서로 다른 위치의
데이터를 관련시켜 시퀀스의 대푯값(representation)을 연산하는 알고리즘이다.
간단한 언어 질의응답, 언어 모델링 과제들에서 좋은 성능을 보인다.
본 연구자들에 의하면 recurrence 구조 없이 온전히 self-attention 메카니즘만을 사용한 변환 모델은 트랜스포머가 최초라고 한다.
3. Model Architecture
--- ---[용어]--- ---
🔸encoder-decoder : 용어 설명
--- --- --- --- ---
[본문]
가장 경쟁력 있는 시퀀스 변환 신경망 모델들은 모두 encoder-decoder 구조를 갖고 있다.
Encoder는 입력 시퀀스의 임베딩 값들을 연속적인 대푯값으로 매칭한다. 그리고 Decoder는 주어진 대푯값 z를 기반으로 출력 시퀀스를 생성한다.
\[ \mathbf{x} = \lbrace x_i | i=1,2,\cdots,n \rbrace \; \xrightarrow{encoder} \; \boldsymbol{z}=\lbrace z_i|i=1,2,\cdots,n \rbrace \]
\[ \mathbf{z} \xrightarrow{decoder} \; \boldsymbol{y}=\lbrace y_i|i=1,2,\cdots,m \rbrace \]
encoder는 z를 생성할 때 병렬 처리를 하고, decoder는 \(y_1,y_2,\cdots,y_m\)을 각각 auto-regressive하게 생성한다. 즉, z를 통해 y1을, z와 y1을 가지고 y2를, z와 y1과 y2를 갖고 y3를 생성해낸다.
3.1 Encoder and Decoder Stacks
--- ---[용어]--- ---
🔸residual connection : 레이어의 입력값을 출력값과 더함으로써 기울기 소실 문제 완화, 학습 안정성 향상을 노리는 기법
--- --- --- --- ---
[본문]
- Encoder : N개의 동일한 layer로 구성되어 있다. 각각의 layer는 2개의 sub-layer를 갖는다.
첫째, multi-head self-attention 메카니즘을 구현한 레이어이다. 둘째는 단순한 Feed Forward Neural Network이다.
두 sub-layer는 residual connection으로 연결되어 있고, 그 결과는 정규화한다. residual conncection을 위해 embedding layer를 포함한 모든 encoder의 sub-layer들은 길이 512(\(d_{model}=512\))의 output을 출력한다.
\[ \text{Each Sub-Layers} = LayerNorm\Big(\mathbf{x} + Sublayer(\mathbf{x})\Big)\]
- Decoder : 마찬가지로 N개의 동일한 layer로 구성되어 있다. decoder는 기존 encoder와 유사한 2개의 sub-layer에 더해 1개의 추가적인 multi-head attention layer가 있다. 여기서는 encoder의 대푯값(representations = z)을 입력받는다.
encoder와 마찬가지로 residual connection과 layer normalization이 각각의 sub-layer 사이에 구성돼 있다.
encoder와는 달리 Masked Multi-Head attention layer가 있는데, 이는 학습 과정에서 다음 위치를 참고하는 것 즉 cheating을 하는 것을 방지하기 위함이다.
3.2 Attention
--- ---[배경지식]--- ---
🔸Seq2Seq Model : sequence 데이터를 입력받아 sequence 데이터를 출력하는 모델 구조(many-to-many)이다. encoder에서 입력 시퀀스를 압축하여 context vector를 출력한 후, decoder는 context vector를 입력받아 출력 시퀀스를 생성한다.
🔸compatability function : attention mechanism에서 Query, Key, Value 벡터를 구하는 함수를 의미한다.
🔸Attention Mechanism : 기존의 context vector로 입력 시퀀스를 압축하는 과정이 여러 한계(고정된 크기(bottleneck), 기울기 소실)를 갖고 있어 고안된 알고리즘으로, 입력 시퀀스와 출력 시퀀스의 관련성을 더 정확하게 모델링한다.
- 구성벡터 : Query, Key, Value. Q,K,V를 만들기 위한 가중치 벡터(\(W_{Query},W_{Key},W_{Value}\))는 무작위로 초기화된다.
- 각 벡터가 가지는 의미는 다음과 같다.
- query : 예측하고자 하는 데이터
- key : 모든 입력 데이터들의 벡터
- value : key의 의미를 나타내는 벡터
- Weight Sum Layer : Softmax의 출력값인 확률값과 V 벡터를 weighted sum하여 최종 Attention Value를 구한다.
전체적인 과정은 아래 그림과 같다.
--- --- --- --- --- --- ---
3.2.1 Scaled Dot-Product Attention
[본문]
본 논문에서는 트랜스포머의 어텐션 메카니즘을 "Scaled Dot-Product Attention"이라 명칭했다.
기존의 어텐션 메카니즘과 크게 다른 것은 없고 softmax 함수에 attention score를 대입할 때, attention score 각 요소들을 Key의 차원의 제곱근만큼 나누어 정규화를 진행해주는 과정이 추가되었다.
\[ \operatorname{Attention}(Q,K,V) = \operatorname{softmax}(\frac{QK^T}{\sqrt{d_k}})V \] --- --- --------- --- ---
효율 측면에서는 dot-product가 우세함을 확인했다. 그럼 성능은 어떨까?
논문에 따르면 d_k(Key의 차원,크기)가 작을 땐 서로 유사했으나 d_k가 커질수록 additive attention의 성능이 더 우세했다고 한다. 이는 d_k가 커질수록 내적을 해야 하는 행렬의 크기가 커지고 또 이는 softmax 함수의 기울기 소실 문제를 야기하기 때문이다.
이런 효과를 상쇄하기 위해 본 논문에서는 scaled dot-product, 즉 \(\sqrt{d_k}\)로 attention score를 나눠주는 정규화를 진행한 것이다.
3.2.2 Multi-Head Attnetion
[본문]
\(d_{model}\)크기의 query, key, value에 대해 attention을 한 번 수행하는 것보다, h번에 걸쳐 서로 다르게 선형 투영(linear project)한 query/key/value에 대해 각각 attention을 수행하는 것이 효과적임을 본 연구자들은 발견했다.
그래서 각각의 \(d_{model}\)크기의 query, key, value를 n_head x head_dimension 크기로 나누어 각각 attention 연산을 수행하고 이를 다시 결합하는 Multi-Head Attention 방식을 선택했다.
그림으로 보면 아래와 같다.
코드 구현 상으로는 그림처럼 여러번에 걸쳐 attention을 다 따로 구하고 마지막에 결합하는 것이 아니라 행렬곱으로 한 번에 처리된다.
Multi-Head Attention이 효과적인 이유는 이러한 연산 과정이 마치 모델을 '여러 관점'에서 학습시키는 것과 같은 효과를 보이기 때문이다.
\[ \operatorname{MultiHead(Q,K,V)}=Concat(\operatorname{head_1},\cdots,\operatorname{head_h})W^O \] \[ \qquad \text{where} \operatorname{head_i} = \operatorname{Attention}(QW^Q_i,KW^K_i,VW^V_i) \] \[ \Big(W^Q_i \in \mathbb{R}^{d_{model}\times d_k}, W^K_i \in \mathbb{R}^{d_{model}\times d_k}, W^V_i \in \mathbb{R}^{d_{model}\times d_v}\Big) \] --- --- --------- --- ---
이렇게 Multi-Head 구조를 사용하여 각각의 head 내에서 차원을 줄이면 single-head일 때와 총 계산비용은 유사하다.
3.2.3 Applications of Attention in our Model
[본문]
트랜스포머는 Multi-Head Attention을 3가지 방법으로 사용한다.
- encoder-decoder attention : query가 이전 decoder layer에서 전달된다. key와 value는 encoder의 output을 사용한다. 이 방법은 decoder로 하여금 항상 input 시퀀스의 attention value(representations)를 반영하도록 한다. 이는 전통적인 seq2seq모델의 encoder-decoder mechanism을 모방한 것이다.
- self-attention layers of encoders : encoder 내부의 self-attention layer는 모든 input 시퀀스의 데이터들이 서로를 주목할 수 있게 해준다. 이는 전체 input 시퀀스에서 각 데이터 간의 연관성을 학습하는 데 도움을 준다.
- masked decoder self-attention : decoder의 self-attention도 역시 encoder의 self-attention처럼 모든 위치의 데이터를 주목할 수 있다. 그러나 예측 단계에서 미래 시점의 데이터를 사용하면 안 되기 때문에 현재 decoder를 기준으로 미래 시점의 위치는 음의 무한대 값으로 설정하여 attention score가 0이 되게 해서 masking한다.
3.3 Position-wise Feed-Forward Networks
[본문]
encoder와 decoder sub-layer 뒤에는 모두 fully connected feed-forward network가 있다.
\[ \operatorname{FFN}(x) = max(0,xW_1+b_1)W_2+b_2 \] --- --- --------- --- ---
kernel size(filter size)가 1x1인 convolution은 이미지 처리 분야에서 차원 축소, 구체적인 피처맵 생성, 매개변수 수 줄이기 등의 용도로 사용된다. 트랜스포머에서도 각 attention value에 대해 더 구체적으로 특징을 추출해내고 또 차원 축소를 위해 FFN을 사용한 것 같다.
3.4 Embeddings and Softmax
[본문]
트랜스포머는 기존의 sequence transduction(시퀀스 변환, 임베딩) model과 유사한 임베딩 방식을 사용한다. decoder의 output을 확률값으로 변환할 때도 보편적인 선형 변환 함수와 softmax 함수를 사용한다.
3.5 Positional Encoding
[본문]
트랜스포머는 순환, 합성곱을 사용하지 않기 때문에 데이터의 위치 정보를 시퀀스의 토큰들에 주입해줄 필요가 있다.
positional encoding 결과를 embedding 결과와 합쳐야 하기 때문에 차원은 d_model과 같고, 구체적인 값은 실험을 통해 결정되었다.
기존의 positional encoding 방식들 모두 사용이 가능하지만, 본 논문에서는 트랜스포머
모델이 훈련 과정에서 입력받은 시퀀스 길이보다 긴 시퀀스를 입력받아도
positional encoding이 잘 이루어지도록 사인파형(sinusoidal version) 인코딩을 선택했다.
4. Why Self-Attention
[본문]
4번 section에서는 encoder-decoder 내부 layer의 구조(self-attention, recurrent, convolution, restricted self-attention)에 따른 성능 비교를 하고 있다.
본 논문에서는 3가지 이유에서 self-attention을 선택했다.
첫째는 total computational complexity per layer이다. sequence length인 n이 representattion dimensionality인 d보다 작을 때, self-attention의 total complexity가 recurrent보다 작다.
만약 n이 커져서 성능을 더 개선해야 한다면 self-attention을 r 크기의 이웃에만 적용하는 방식으로 제한함으로써 계산 복잡서을 줄일 수 있다. 그러나 이는 아래서 언급할 path lenght를 늘리기 때문에 더 연구가 필요하다.
둘째는 parallelization이다. recurrent의 경우 순차적인 연산을 하기 때문에 순차 작업의 시간이 긴 반면, attention mechanism과 convolution은 병렬 처리가 가능하기에 일정한 상수값의 시간이 걸린다.
셋째는 path lenght between long-range dependencies 이다. 더 긴 범위의 시퀀스에서 서로 다른 위치의 관계를 파악하고 대표성을 나타내는 것은 시퀀스 변환 과제에서 큰 과제이다.
이런 dependency를 파악하기 위해서는 입력 및 출력 시퀀스의 모든 위치 조합 간의 경로가 짧아야 한다. attention mechanism은 모든 position 간의 연관성을 내적을 통해 연산하므로 이 path lenght가 가장 짧다.
convolution의 경우 계산 복잡성이나 sequential operations 모두 괜찮으나 path length가 attention mechanism보다 긴 단점이 있다.
5, 6, 7 생략
References
- 코드 참고
- 리뷰 참고