반응형

Ashish Vaswani ∗  Google Brain
Noam Shazeer ∗  Google Brain
Niki Parmar ∗  Google Research
Jakob Uszkoreit ∗  Google Research
Llion Jones ∗  Google Research
Aidan N. Gomez ∗ † University of Toronto
Łukasz Kaiser ∗ Google Brain
Illia Polosukhin ∗ ‡

 

sequence-aligned RNNs or convolution없이

self-attention

additive attention [2]와 dot-product (multiplicative) attention

"encoder-decoder attention" layers

encoder contains self-attention layers

self-attention layers in the decoder

 

Abstract

dominant sequence transduction models은 encoder와 decoder를 포함하는 복잡한 recurrent or convolutional neural networks을 기반으로 한다. (RNN , CNN) 최고 성능의 모델은 또한 attention mechanism을 통해 encoder와 decoder를 연결한다. 우리는 RNN와 CNN없어도 되는 attention mechanisms만을 기반으로 하는 새로운 단순한 network architecture를 제안한다. two machine translation tasks 에 대한 실험에 따르면 이러한 모델은 품질이 우수하면서도 병렬화가 훨씬 용이하고 학습시간이 적게 소요된다. 우리의 모델은 WMT 2014 English-to-German translation task에서 28.4 BLEU를 달성하여 ensembles을 포함한 기존 최고의 결과보다 2 BLEU 이상 향상되었다. WMT 2014 English-to-French translation task에서 , 우리 모델은 8개의 GPU에서 3.5일 동안 훈련한 후 41.8의 new single-model state-of-the-art BLEU score 점수를 달성하며 , 이는 논문에서 최고의 모델 training costs 의 작은 부분이다. 우리는  Transformer가 크고 제한된 학습 데이터를 사용하여 English constituency parsing에 성공적으로 적용함으로써 다른 작업에 잘 일반화됨을 보여준다.

 

1 Introduction

 

Recurrent neural networks, 특히 long short-term memory (LSTM)[13] and gated recurrent [7](GRU) neural networks language modeling 및 machine translation [35, 2, 5]과 같은  sequence modeling및 transduction problems에서 state of the art접근방식으로 확고히 확립되었다. 그 이후로 recurrent language models and encoder-decoder architectures [38, 24, 15] 의 경계를 확장하려는 수많은 노력이 계속되고 있다. 

Recurrent models은 전형적으로 입력과 출력 sequence의 위치를 따라 factor를 계산한다. positions을  computation time에 정렬하면 , previous hidden state ht−1과 position t에 대한 입력의 함수로서 sequence of hidden states ht,를 생성한다. 이러한 sequential nature은 본질적으로 training examples내 parallelization 를 방지하는데, memory constraints 이 examples 긴 batching 를 제한하기 때문에, sequence lengths가 길어질 수록 매우 중요하다. 최근 연구는 factorization tricks [21] and conditional computation [32]을 통해 computational efficiency을 개선했으며 후자의 경우 모델 성능도 개선했다. 그러나 sequential computation의 근본적인 제약은 남아 있다.

Attention mechanisms은 다양한 작업에서 compelling sequence modeling와 transduction models의 적인 부분이 되었으며, input or output sequences [ 2 , 19 ] 에서의 거리에 관계 없이 의존성의 모델링을 가능하게 했다. 그러나 소수의 경우를 제외하고 [27 ] 그러한 attention mechanisms은 recurrent network와 함께 사용된다. 

본 연구에서 우리는 model architecture인 Transformer를 제안한다. Transformer recurrence 를 피하고 대신 input and output사이의 global dependencies을 끌어내기 위한 attention mechanism에 전적으로 의존한다. Transformer 는 8개의 P100 GPU에서 12시간만 학습해도 훨씬 더 많은 병렬화가 가능하고  translation quality 에서 새로운 state of the art에 도달했다. 

 

2 Background

sequential computation을 줄이는 목표는 또한 Extended Neural GPU [ 16 ], ByteNet [ 18 ] and ConvS2S [ 9 ]의 기초를 형성하며 , 이 모두는 convolutional neural networks 을 basic building block 요소로 사용하여 모든 입력 및 출력 위치에 대해 hidden representations을 병렬로 계산한다. 이러한 모델에서 , two arbitrary input또는 output positions 의 신호를 연관시키는데 필요한 작업 수는 ConvS2S의 경우 선형으로 , ByteNet의 경우 logarithmically 간 거리에 따라 증가한다. 이는 distant positions [ 12 ]사이의 의존성을 학습하는 것을 더욱 어렵게 만든다. Transformer에서 이것은 averaging attention-weighted positions로 인해, 유효 해상도가 감소하지만,  section 3.2에서 설명된 대로 Multi-Head Attention으로 대응한다. 

Self-attention는 sequence의 representation 을 계산하기 위해 single sequence의 다른 위치와 관련된 intra-attention attention mechanism이다. Self-attention은 reading comprehension, abstractive summarization, textual entailment and learning task-independent sentence representations [4, 27, 28, 22]를 포함한 다양한 과제에 성공적으로 사용되어 왔다. 

reading comprehension: 독해 

abstractive summarization: 생성 요약

textual entailment:  두 개의 주어진 문장 

Task-Independent Sentence : 

End-to-end memory networks는 sequence-aligned recurrence 대신 recurrent attention mechanism기반으로 하며 simple-language question answering 및 language modeling tasks [34]에서 잘 수행되는 것으로 나타났다. 그러나 우리가 아는 한, Transformer 는 sequence-aligned RNNs or convolution없이 input and output의 representations 을 계산하기 위해 self-attention에 의존하는 첫번째 모델이다. 다음 섹션에서는 Transformer에 대해 설명하고 , self-attention를 유도하며 [17, 18] and [9]와 같이 모델에 비해 이점에 대해 논의한다 .

 

3 Model Architecture

 

 

 

대부분의 competitive neural sequence transduction models은 encoder-decoder structure [ 5 , 2 , 35 ]를 가지고 있다. 여기서 encoder 는 symbol representations (x_1 ,...,x_n ) 를 연속 representations sequence  z = (z_1 ,...,z_n )에 매핑한다. 그런 다음 z 가 주어지면 decoder 는 한번에 하나의 요소씩 symbols 의 output sequence (y_1 ,...,y_m )를 생성한다. 각 단계에서 모델은 auto-regressive[10]으로 , 이전에 generated symbols 를 다음을 생성할 때 additional input으로 사용한다. Transformer 는 각각 Figure 1의 왼쪽과 오른쪽 절반에 표시된 바와 같이 encoder and decoder 모두에 대해 stacked self-attention and point-wise fully connected layers를 사용하는 전체적인 architecture 를 따른다. 

3.1 Encoder and Decoder Stacks

Encoder: encoder 는 N = 6 identical layers stack 으로 구성된다. 각 층에는 두 개의 sub-layer이 있다. 

첫번째는 multi-head self-attention mechanism 이고,

두번째는 simple하고 position-wise fully connected feed-forward network이다. 

우리는 two sub-layers 각각 주위에 residual connection [ 11 ] 을 사용하고 , 이어서 layer normalization [ 1 ]를 사용한다. 

즉 각 sub-layer의 출력은 LayerNorm(x + Sublayer(x))이며, 여기서 Sublayer(x)은 sub-layer 자체에 의해 구현된 함수이다. 

이러한 residual connections은 용이하게 하기 위해 embedding layers뿐만 아니라 모델의 모든 하위 레이어는 d model = 512의 output을 생성한다. 

Decoder : decoder 는 또한 N = 6 identical layers의 stack으로 구성되어 있다. 각 encoder layer 의, two sub-layers에도 decoder 는 third sub-layer을 삽입하여, encoder stack의 output 에 대해 multi-head attention 를 수행한다. encoder와 유사하게, 우리는 각 sub-layers 주위에 을 사용하고 , 이어서 layer normalization을 사용한다. 또한 decoder stack 의 self-attention sub-layer을 수정하여 positions 가 subsequent positions로 추가하는 것을 방지한다. 이러한 masking은, output embeddings이 한 position만큼 offset 된다는 사실과 결합되어 position i 에 대한 predictions 이 i보다 작은 positions 에서 알려진 출력에만 의존할 수 있도록 한다. 

3.2 Attention

attention functions는 query, keys, values, 및 output are all vectors output에 query와 key-value 쌍 집합을 mapping 하는 것으로 설명할 수 있다. output 은 각 value에 할당된 weighted 가 해당 keys와 query의 compatibility function에 의해 계산되는 값의 weighted sum으로 개선된다. 

 

3.2.1 Scaled Dot-Product Attention

우리는 우리의  particular attention을  "Scaled Dot-Product Attention"
(Figure 2)라고 부른다. input 은 dimension d_k의 queries and keys,  dimension d_v의 values 으로 구성된다. 우리는 query 의 dot products읍 all keys로 계산하고 , 각각을 √dk로 나눈 다음, softmax function를 적용하여 값에 대한 가중치를 구한다. 

가장 일반적으로 사용되는 두가지  attention functions은  additive attention [2]와 dot-product (multiplicative) attention이다. Dot-product attention은 1/√dk의 scaling factor를 제외하고  우리의 algorithm과 동일하다. Additive attention은  single hidden layer가 있는 feed-forward network를 사용하여 compatibility function를 계산한다. 이 두가지는 이론적으로 복잡성은, 유사하지만, highly optimized matrix multiplication code를 사용하여 구현할 수 있기 때문에 실제로 dot-product attention 는 훨씬 빠르고 공간 효율적이다. 

d_k의  small values의 경우 두 mechanisms 이 유사하게 수행되지만,  additive attention는 d_k[3]의 larger values 에 대한 scaling 없이 dot product attention보다 우수하다. => 작을 때 이 두 비슷하는데 큰 value일 경우 additive attention유리하다. 이러한 효과에 대응하기 위해 우리는 dot products by 1/√dk으로 scale 한다. 

dot products 커지는 이유를 설명하기 위해 q와 k의 components 이 평균 0과 분산이 1인 independent random variables라고 가정한다. 따라서 dot product은 q * k = \sum_{d=1}^{d_k} q_i k_i 평균 0과 분산 dk를 갖는다.

3.2.2 Multi-Head Attention

d_model-dimensional keys, values 및 queries를 사용하여 single attention function을 수행하는 대신, 우리는 학습된  d_k, d_k 및  d_v dimensions 에 각각 다른 linearly project the queries을 사용하여 queries, keys 및 values h times  linear projections것이 유익하다는 것을 발견하였다. 이러한 queries, keys 및 values의 각 projected 버전에서 attention function을 병렬로 수행하여 d_v-dimensional output values을 산출한다. 이것들은 연결되고 다시 투사되어 Figure 2에서와 같이 최종 값이 산출된다. Multi-head attention를 통해 모델은 서로 다른 위치의 서로 다른 표현 sub-spaces의 정보에 공동으로 attend 할 수 있다.  single attention head우로 averaging산출은 이것을 엊게한다. 

MultiHead(Q, K, V ) = Concat(head_1, ..., head_h)W^O

where head_i = Attention(QW^Q_i, KW^K_i, V W^V_i)

여기서 projections 은 parameter matrices이다. 

이 작업에서는 h = 8 parallel attention layers 또는 heads를 사용한다. 각각의 경우 d_k = d_v = d_model/h = 64를 사용한다. 각 head의 reduced dimension로 인해 총 계산 비용ㅇㄴ 전체 dimensionality를 갖는 single-head attention 비용과 유사하다. 

3.2.3 Applications of Attention in our Model

Transformer 는 3가지 다른 방식으로 multi-head attention을 사용한다. 

  • "encoder-decoder attention" layers에서 , queries 는 이전  decoder layer에서 나오고 , 메모리 keys 와 values값은 encode의 출력에서 나온다. 이를 통해 decode의 모든 positions가 input sequence의 모든 위치에 배치될 수 있다. 이는 [38, 2, 9]와 같은 sequence-to-sequence models에서 일반적인 encoder-decoder attention mechanisms을 모당한다. 
  • encoderd에는 self-attention layers가 있다. self-attention layer에서 모든 keys, values및 queries 는 동일한 place에서 발생하며, 이 경우 encoder에 있는 이전 layer의 output이다. encoder 의 각 위치는 encoder의 previos layers에 있는 모든 position을 관리할 수 있다. 
  • 마찬가지로, decoder의 self-attention layers를 통해 decoder의 각 position 는 해당 position 까지 decoder의 모든 position 에 집중될 수 있다. 우리는 auto-regressive property을 보존하기 위해 decoder에서 왼쪽으로 향하는 흐름을 막아야 한다. 우리는  illegal connections에 해당하는 softmax input의 모든 values을 masking out((setting to −∞) 하여 scaled dot-product attention 에서 이를 구현한다. Figure 2참조

3.3 Position-wise Feed-Forward Networks

attention sub-layers 외에도 encoder 및 decoder 의 각 layers에는 완전히 연결된  feed-forward network 포함되고 있으며 이는 각 위치에 개별적으로 동일하게 적용된다. 이것은 중간에 ReLU activation 가 있는 두가지 linear transformatins으로 구성된다. 

linear transformations은 다른 position에서 동ㅇ일하지만 layers마다 다른 parameter를 사용한다. 이것을 설명하는 또 다른 방법은 kernel size 가 1인 두개의 convolutions 을 사용하는 것이다. 입력과 출력의 차원은 d_model = 512이고, inner-layer has dimensionality은 d_ff = 2048이다. 

3.4 Embeddings and Softmax

다른 sequence transduction models과 유사하게, 우리는 학습된 embeddings 을 사용하여 input tokens과 output token을 차원 d_modeldml vectors로 변환한다. 또한 일반적으로 학습된 linear transformation과 softmax function를 사용하여 decoder output을 predicted next-token probabilities로 변환한다. 우리의 모델에서 , 우리는 [30]과 유사한 두 embedding layers와  pre-softmax linear transformation사이에서 동일한 weight matrix를 공유한다.  embedding layers에서 , 우리는 그러한 weight에 √d_mode를 곱한다. 

3.5 Positional Encoding

우리의 모델은 recurrence and no convolution이 없기 때문에, 모델이 sequence의 순서를 사용하기 위해서는 sequence에서 token의 상대적인 위치 또는 절대적인 위치에 대한 정보를 주입해야 한다. 이를 위해, 우리는 encoder and decoder stacks의 하단에 있는 input embedding에 "positional encodings"을 추가한다. positional encodings은 embedding과 동일한 dimension d_model을 가지므로 둘을 합칠 수 있다. positional encodings, learned and fixed [9]의 많은 선택이 있다. 

본 연구에서는 서로 다른 frequencies의 sine및 cosine functions를 사용한다. 

pos 는 position 

i는 dimension

즉 , positional encoding 의 각 dimension은 sinusoid에 해당한다. 2π to 10000 · 2π까지 geometric progression으로 진행된다. fixed offset k에 대하 P Epos+k는 P Epos의  linear function으로 표현될 수 있기 때문에 모델이 상대적 위치에 따라 attend 하는 것을 배울 수 있다고 가정했기 때무에 이 함수를 선택했다. 

우리는 또한 학습된 positional embeddings[9] 을 대신, 사용하여 실험했고 두 버전이 거의 동일한 결과를 산출한다는 것을 발견했다. (see Table 3 row (E))

우리는 모델이 학습 중에 마주치는 것보다 더 longer sequence 길이로 추론할 수 있기 때문에 sinusoidal version을 선택했다. 

 

 

 

4 Why Self-Attention

이 Section에서, 우리는 self-attention layers 의 다양한 aspects 을 typical sequence transduction encoder or decoder와 같은 xi, zi ∈ R^d에 하나의 variable-length sequence of symbol representations 를 mapping하는데 일반적으로 사용되는 recurrent and convolutional layers와 비교한다. self attention 의 사용에 동기를 부여하면서 세가지 필요성을 생각한다. 

  1. 계층당  layer 총 computational complexity 이다. 
  2. 또 다른 하나는 필요한 최소 sequential operations 수로 측정할 때 parallelized할 수 있는 계산의 양이다.
  3. network에서 long-range dependencies사이의 경로 길이이다. long-range dependencies학습하는 것은 많은 sequece transduction tasks에서 핵십 과제이다. 이러한 종속성을 학습하는 능력에 영향을 미치는 한 가지 주요 요인은 network에서 forward and backward signals가 통과해야 하는 경로의 길이이다. input and output sequences의 positions 조합 사이의 이러한 경로가 짧을수록, long range dependencies [12] 학습하기가 더 쉬워진다.따라서 우리는 또한 다른 layer types으로 구성된 network에서 두 input and output positions 사이의 maximum path length를 비교한다. 

Table 1에서 언급한 바와 같이, self-attention layer 은 all positions 를 sequentially executed operations의 constant number로 연결하는 반면, recurrent layer은 requires O(n) sequential operations을 필요로 한다. computational complexity에서 , self-attention layers은 sequece length n이 representation dimensionality d보다 작을 때 recurrent layers 보다 빠르다. (n < d) 이는  word-piece [38]및 byte pair [31] representations과 같은 machine translations에서 state-of-the-art models에 의해 문장 표현에 가장 많이 해당된다.  very long sequences를 포함하는 tasks 에 대한 computational performance을 개선하기 위해, self-attention는 각 output position를 중심으로 하는 input sequence r size의 neighborhood 만 고려하는것으로 제한될 수 있다. 그러면 maximum path length to O(n/r)으로 증가한다. 우리는 향수 연구에서 접근 방식을 더 조사할 계획이다. 

kernel width k < n인 single convolutional layer는 모든 input and output positions 쌍을 연결하지 않는다. 그렇게 하려면 contiguous kernels의 경우 O(n/k) convolutional layers의 stack 또는 dilated convolutions [18]의 경우 O(logk(n))가 필요하며 , network의  two positions사이의 가장  경로 의 길이를 증가시킨다. Convolutional layers는 일반적으로 recurrent layers보다 k배 더 비싸다. 그러나 Separable convolutions [6] 은 complexity 을 O(k · n · d + n · d^2 )로 상당히 감소시킨다. k = n인 경우에도 a separable convolution 의 complexity은 model에서 취하는 접근 방식은 self-attention layer과 point-wise feed forward layer의 조합과 같다. 

부수적인 이익으로, self-attention는 더 해석 가능한 모델을 산출할 수 있다. 우리는 model의 attention distributions 를 검사하고 appedix에서 예를 제시하고 논의한다. individual attention heads는 분명히 다른 작업을 수행하는 방법을 배울 뿐만 아리라 , 많은 주의력이 sentences의 syntactic 및 semantic structure 와 관련된 행동을 보이는 것으로 보인다. 

 

5 Training

이 Section에서는 model을 위한 training regime에 대해 설명한다.

5.1 Training Data and Batching

우리는 4.5 million sentence pairs으로 구성된 standardW MT 2014 English-German dataset 에 대해 학습했다. Sentences 은 약 37000 tokens의 shared source target vocabulary을 가진 byte-pair encoding [3]을 사용하여 인코딩 되었다. English-French의 경우 36M sentences과 tokens into a 32000 word-piece vocabulary [38]로 분할 한 larger WMT 2014 English-French dataset를 사용했다. Sentence pairs 은 대략적인 sequence length로 배치되었다. 각 training batch에는 약 25000 source tokens과 25000 target tokens을 포함하는 sentence pairs가 포함되어 있었다. 

5.2 Hardware and Schedule

우리는 8 NVIDIA P100 GPUs가 있는 하나의 machine에서 모델을 학습하였다. 본 문서 전체에 설명된 hyperparameters 를 사용하는 기본 모델의 경우 각 학습 단계는 약 0.4초가 소요되었다. base model을 총 100,000 steps 또는 12기간 동안 학습했다. big models(described on the bottom line of table 3)의 경우 step time은 1.0 초이다. big models들은 300,000 steps(3.5일) 동안 학습을 받았다. 

5.3 Optimizer

β1 = 0.9, β2 = 0.98 및 ε(엡실론)=10^-9와 함께 Adam 옵티마이저[20]를 사용했다. 학습 과정에 따라 learning rage을 다음과 같은 공식에 따라 변화시켰다. 

공식 (3)

이는 첫번째 warmup_steps 학습 단계에 대해 learning rate를 선형적으로 증가시키고 그 이후 단계의 inverse square root에 비례하여 감소시키는 것에 해당한다. 우리는 warmup_steps = 4000을 사용했다. 

 

5.4 Regularization

우리는 학습중에 세가지 유형의  regularizatoin을 사용한다. 

Residual Dropout sub-layer에 추가되고 , 정규화하기 전에 각 sub-layer의 출력에 dropout [33]을 적용한다. 또한 encoder and decoder stacks의 embedding 및 positional encoding 합계에 dropout을 적용한다. 기본 모델의 경우 P_drop = 0.1의 비율을 사용한다.

Label Smoothing 학습중에 , 값 εls = 0.1 [36]의 label smoothing 을 사용했다 . 이는 모델이 더 확신하지 못하는 것을 학습함에 따라 복잡성을 감소시키지만 정확도와 BLEU score를 향상시킨다. 

 

6 Results

6.1 Machine Translation

WMT 2014 English-to-German translation task에서 big transformer model (Transformer (big) in Table 2) 은 이전에 보고된 models(ensembles 포함)보다  2.0 BLEU이상 우수하여 28.4 라는 new state-of-the-art BLEU score 를 달성했다. 이 모델의 구성은 Table 3의 맨 아래 줄에 나열되어 있다. 학습은 8개의 P100 GPUs에서 3.5일이 걸렸다. 심지어 우리의 기본 모델도 competitive models보다 훨씬 적은 비용으로 이전에 published models과 ensembles을 능가한다. 

WMT 2014 English-to-French translation task에서 big models은 BLEU score of 41.0을 달성하여 이전  state-of-the-art model 의 training cost 의 1/4미만으로 이전에 published single models을 능가한다. English-to-French학습을 받은 Transformer (big) model은 0.3 대신 dropout rate P_drop = 0.1을 사용했다. 

base models의 경우  10분 간격으로 작성된 마지막 5개의 checkpoints를 평균화하여 얻은 single model을 사용했다. beam size가 4이고 penalty α = 0.6 [38]인 beam search를 사용했다. 이 hyperparameters 는 development set에 대한 실험 후에 선택되었다. 우리는 추론 중 maximum output 를 input length + 50 으로 설정하지만, 가능하면 조기종료한다 [38]. 

Table 2는 결과를 요약하고 translation quality및 training costs을 논문의 다른 모델 아키텍처와 비교한다. 우리는 학습 시간, 사용된 GPU 수 및 각 GPU 의 sustained  single-precision floating-point capacity  추정치를 곱하여 모델을 훈련하는 데 사용되는 floating point operations를 추정한다. 

GPU : We used values of 2.8, 3.7, 6.0 and 9.5 TFLOPS for K80, K40, M40 and P100, respectively. 

6.2 Model Variations

Transformer의 다양한 구성 요소의 중요성을 평가하기 위해 development set, newstest2013에서 English-to-German translation 의 번역의 성능 변화를 측정하는 다양한 방식으로 기본 모델을 변경했다. 이전 section에서 설명한 대로 beam search 을 사용했지만 checkpoint averaging 은 사용하지 않았다. 우리는 이러한 결과를 Table 3에서 제시한다. 

Table 3 rows (A)에서 , 우리는 3.2.2 section에서 설명한 것과 같이 계산의 양을 일정하게 유지하면서 attention heads 의 수와 attention key 및 value dimensions를 변화시킨다. single head attention 이 최적의 설정보다 0.9 BLEU나 나쁘지만 head가 너무 많으면 품질도 떨어진다. Table 3 rows (B)에서는 attention key dk 를 줄이면 model quality가 저하된다는 것을 관찰했다. 이는 호환성 판별이 쉽지 않고 dot product 제품보다 정교한 호환성 기능이 유리할 수 있음을 시사한다. 또한 rows (C) and (D) 에서 예상대로 큰 모델이 더 낫고 dropout이 과적합을 방지하는 데 매우 도움이 된다는 것을 관찰했다. row (E) 에서 우리는 sinusoidal positional encoding을 학습된 positional embeddings [9]으로 대체하고 기본 모델과 거의 동일한 결과를 관찰한다. 

6.3 English Constituency Parsing

Transformer 가 다른 작업으로 일반화할 수 있는지 평가하기 위해 English constituency parsing 분석데 애한 실험을 수행했다. 이 작업은 출력이 강력한 구조적 제약을 받으며 입력보다 상당히 길다는 특정한 과제를 제시한다. 또한 RNN sequence-to-sequence models은 small-data regimes[37]에서 state-of-the-art results 를 얻을 수 없었다.

우리는 약  40K training sentences인 Penn Treebank [25]의 the Wall Street Journal (WSJ) portion에서 d_model = 1024 인 4-layer transformer 를 학습시켰다. 또한 약 17M sentences [37]으로 더 high-confidence and BerkleyParser corpora

를 사용하여 준 semi-supervised setting에서 학습했다. WSJ 전용 설정에는 6K tokens의 vocabulary를 , semi-supervised setting에는 32K tokens의 어휘를 사용했다. 

Section 22 development set에서  attention and residual (section 5.4), learning rates and beam size 를 선택하기 이ㅜ해 소수의 실험만 수행했으며, 다른 모든 parameters는 English-to-German base translation model에서 변경되지 않았다. inference하는 동안 maximum outputput length 를 input length + 300으로 늘렸다. 우리는 WSJ 전용및 semi-supervised setting 모두에 대해 beam size of 21 and α = 0.3를 사용했다. 

Table 4의 결과는 task-specific tuning이 부족함에도 불구하고 우리의 모델이 놀라울 정도로 잘 수행되어 Recurrent Neural Network Grammar [8]을 제외하고 이전에 보고된 모든 모델보다 더 나은 결과를 산출한다는 것을 보여준다. 

RNN sequence-to-sequence models [37]과 대조적으로 , Transformer 는 40K sentences으로 구성된 WSJ training set 에 대해서만 학습하는 경우에도 BerkeleyParser [29]를 능가한다. 

7 Conclusion

본 연구에서는 encoder-decoder architectures에서 가장 일반적으로 사용되는 recurrent layers 를 multi-headed self-attention으로 대체하여 entirely on attention 기반으로 하는 첫 번째 sequence transduction model인 Transformer를 제시하였다. 

 translation tasks의 경우, Transformer 는 recurrent or convolutional layers를 기반으로 한 architectures 보다 훨씬 더 빠르게 훈련할 수 있다. WMT 2014 English-to-German and WMT 2014 English-to-French translation tasks에서 우리는 새로운 state of the art을 달성했다. 이전 작업에서 우리는 최고의 model은 이전에 보고된 모든 ensembles를 능가한다. 

우리는 attention-based models의 미래가 기대되면 다른 작업에 적용할 계획이다. 우리는 Transformer를 text가 아닌 inputs and ouptuts 양식과 관련된 문제로 확장하고 이미지, 오디오 와 같은 큰 inputs and ouptuts을 효율적으로 처리하기 위해 제한된 local attention mechanisms을 조사할 계획이다. generation 를 덜 순차적으로 만드는 것은 우리의 또 다른 연구 목표이다. 

모델을 학습하고 평가하는 데 사용한 코드는 https://github.com/tensorflow/tensor2tensor에서 확인할 수 있다. 

 

 

 

Attention Is All You Need

 

Attention Is All You Need

The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder and decoder through an attention mechanism. We propose a new

arxiv.org

번역할 경우 파파고의 예제를 많이 사용하였다. 

반응형
반응형

Rnn은 사용하지 않는다.

학습이 빠르고 성능이 좋다.

 

왜 빨랐을 가 ?

RNN을 사용하지 않았다.

병렬화 : 일을 최대한 한방에 처리한다.

 

Rnn은 순서로 해서 하나하나 입력해서 한다. 

중간에 context vector이 있다.

context vector : 고정된 크기 

긴 문장은 잘 안된다.

 

RNN based encoder decoder with attention: 

동적으로 사용한다.

하지만 느리다. 

 

Transformer :

rnn 을 제거하였다. 

한번에 학습한다.

 

RNN은 단어의 위치와 순서 저보를 잘 할 수 있기 떄문이다.

 

Positional encoding

sign, cosin 을 이용하면장점이 있다.

-1 ~ 1까지의 값이고 

에러가 없이 상대적인 encoding이 가능하다.

 

self attention 

encoding에서 주어진 연산

query ,key , value는 행렬곱으로 한방에 할 수 있다.

상관관계를 곱할때 query * key 곱해서 attention score이라고 한다.

숫자로 나오고 단어 연관성이 높다 낮으면 연관성이 낮다.

 

순차적으로 해서 병렬 처리에 가장 큰 장점입니다.

 

multi- head attention

 

병렬로 동시에 수행하여 

 

encoder는 가중치를 공유하지 않고 

 

decoder 동이란 layer 

순차적으로 출력한다.

masked multi-head attention : 지금 까지 출력한 값들에만 대해서 masked 붙여진 것이다.

multi- head attention : 가장 큰 차이점은 현재 query 로 사용하고 최종 출력값을 key  value로 한다.

 

label smoothing : 1에 가깝지만 1이 아니고 0에 가깝지만 0이 아닌 

 

 

 

https://www.youtube.com/watch?v=mxGCEWOxfe8

 

반응형
반응형

 

 

Attention is all you need 알수 있다 싶이 Attention 이 중요하다.

Transformer  은 Attention 을 이용한 기법이다.

 

2021년 기준으로 최신 고성능 모델들은 Transformer 아케텍처를 기반으로 하고 있다 

GPT: Transformer의 decoder 아키텍처를 활용

BERT : Transformer의 encoder 아키텍처를 활용

 

Attention 기법으로 하는게 훨씬 더 좋았다.

Attention 기법으로 고성능 

 

기존 Seq2Seq 모델들의 한계점 :

context vector v에 소스 문장의 정보를 압축합니다, 

 병목이 발생하여 성능 하락의 원인이 됩니다.

context vector  고정된 크기 

 

단어 들로 구성된 sequence 들어왔을 때 -> contect vector를  -> 출력 문장의 다른 한쪽의 sequence를 만든다.

영어 출력 문장이 나온다.

매번 단어 이력할 때 마다 hidden state값을 갱신하는것을 볼 수 있다. 

단어를 입력 할때마다 단어를 받아서 hidden state를 새롭게 갱신한다. 

hidden state 이전 까지 입력 데이터 정보가 있다. 

마지막 단어가 들어왓을 때 hidden state는 모든 문장의 정보를 가지고 있어서 하나의 context vector로 사용할 수 있다.

decoder부분은 contect vector 로 시작해서 출력을 수행하는 decoder 부분은 매번 출력 단어가 들어올때마다 context vector로 출발해서  hidden state 를 같이 입력해서 갱신하고 eos 나올 때 까지 반복 한다.

 

다양한 문장에 대해서 고정된 크기를 가지는 것은 병목현상이 일어나는 원인 일 수 도 있다 .

 

조금 개선 부분 : 

디코더가 context vector를 매번 참고할 수 도 있습니다. 

  다만 여전히 소스 문장을 하나의 벡터에 압축해야 합니다.

context vector 를 매번 decode에서 RNN CELL에 매번 참조하도록 만들어서  조금 더 성능을 개선 가능하다.

정보가 손실 되는 정보를 적게 할 수 있다 .

 

하지만 CONTEXT vector에 압축해야 하기 떄문에 여전히 병목 현상이 생긴다. 성능이 저한된다.

 

해결방안 : 

decoder에서는 하나의 문맥마다 있는 것이 아니라 소스 문장에서의 출력 전부를 입력  (gpu 는 많은 메모리와 빠른 병렬 처리를 지원한다.)

 

seq2seq with attention

seq2seq 모델에  attention 매커니즘을 사용

  디코더는 인코더의 모든 출력을 참고 

단어가 출력되서 hidden state값을 가진다 . 

출력 단어를 전체 소스 문장을 반영하겠다.

context vector와 모든 hidden state값을 반응해서

가중치와 hidden state값을 곱해서 중요한것을 고려해서 한다. 

하나의 weighted sum vector를 구해서 하는것이다. 

 

attention : 기법을 출력 과정을 구하는 과정 

energy  :  매번 모든 decoder가 출력단어를 만들때마다 모든 j(인코더의 모든 출력 들)를 고려한다.

   이전에 출력한 정보와 encoder의 모든 값을 비교해서 에너지 값을 구할 수 있다.

가중치  :  energy softmax 확률적으로 어떤 값이 중요한지  어떤 값과 연관성이 있는지 

가중치가 반영된 encoder의 값과 더해서 해주는 것이다.

Softmax해서 비율값을 구할 수 있다.

비율 만큼 x값을 곱한 것을 

Hidden state값을 전부 반영해서 다음 출력값을 예측 

=>  energy 값은 소스 문장에서 나왔던 모든 출력값중에서 어떤 값과 가장 연관성이 있는지에 대해서 수치를 구하는 것이고 

그 값들을 softmax에 넣어서 상대적인 확률 값을 구한것이 가중치라고 할 수 있다. 가중치를 각각의 소스 문장의 hidden state와 곱해줘서  더 해준값을 실제로 decoded의 입력으로 해준다. 

Attention 추가 적인 장점: 시각화 (가중치. 를 사용해 각 출력이 어떤 정보를 참고 했는지 알 수 있다.

밝은 것 : 확률값이 높다.

어떤 요소가 어떤 초점. 을 두었는지 

 

Transformer

rnn이나 cnn 을 전혀 필요로 하지 않습니다.

 

모든 문장을 넣어주서 순서를 주기 어렵습니다. 

대신 Positional Encoding을 사용합니다. 

Positional Encoding을 사용해서 순서를 준다.

BERT 와 같은 향상된 네트워크에서도 채택되고 있습니다.

인코더와 디코더로 구성됩니다.

  ATTENTION 과정을 여러 레이어에서 반복하도록 만든다. N번 만큼 

 

단어를 넣기 위해서는 보통 임베딩 과정을 한다.

입력 차원 단어 one hot encoding 을 하면 차원 많이 찾지해서 -> embedding으로 continous한 

단어가 Input Embedding Matrix로 만들어진다. 

Matrix은 단어의 개수만큼 생긴다. 

데이터가 담긴 배열로 된다.

원본에는. 512로 한다. 바꿀 수도 있다.

 

Seq2seq 와 같은 Rnn기반의 모델을 사용한다고 하면 사용하는 것 만으로 각각의 단어가 순서에 맞게 들어가기 때문에 자동으로 각각의 hidden state값을 순서 정보를 가지게된다. 

Rnn을 사용하지 않으면 위치 정보를 포함하고 있는 임베딩 사용 필요 : Positional Encoding

Input embedding matrix와 같은 크기로 Positional Encoding을 element-wise더해줌으로써 각각의 단어가 어떤 순서로 존재하는 것을 알려준다.

입력 받은 값은 실제 단어와 위치 그런 입력을 받아서 각각의 단어를 수행하고 encoder파트에서   수행하는 것은 self-attention 이라고 한다.

Self - attention : 각각의 단어가 서로에게 어떤 연관성을 가지고 있는 지를 가지고 수행한다 . => encoder 파트  

임베딩이 끝난 이후에 어텐션을 진행 

Attention 은 문맥에 대해서 잘 학습하도록 만드는 것이다.

 

성능 향상을 위해. 잔여 학습(Residual learning)을 사용

이미지 분류에서 resenet과 같은 것이 사용되고 있는 기법 으로 어떤 값을 layer를 거쳐서 반복적으로 갱신하는 것이 아니라 특정 layer를 건너 띄어서 그대로 복사하는 것이다. 

Residual connetion: 특정 layer 를 건너 띄어서 입력할 수 있도록 해주는 것 해줌으로써 기존 정보 를 입력 받으면서 추가적으로 잔여된 부분만 학습하기 떄문에 학습 난이도가 낮고 초기에 모델 수렴 속도가 높게 되고 더욱더 global optimal 찾게 되고 residual learning 을 사용할때 속도가 높아진다.

 

Encoder :

embeding  positional Encoding

attention

residual learning + norm

feed forward layer : 노드 간의 연결이 순환을 형성하지 "않는 " 인공신경망이다.. (위키백과)

residual learning + norm 

결과값이 나온다.

 

각 레이어는 서로 다른 파라미터를 가집니다. 

중첩해서 사용가능 

 

입력과 출력의 dimension은 동일하다.

 

입력값 들어온다음 여러개 encoder layer를 반복해서 가장 마지막에 인코더에서 나오게 된 출력값은 decoder로 들어간다.

Decoder의 입력에게 어떤 단어가 중요한지 초점을 알려주기 위한것이다. 

Decoder도 여러개 layer로 구성이 되고 마지막에 나오게 된것이 번역 결과 

Layer 1의 입력값은 encoder에서 마지막으로 출력한 값을 받는다.( 기본 transformer 아키텍처 )

Decoder 도 각 단어를 받아서 상대적인 위치를 알려주기 위해 Positional Encoding을 사용 

하나의 decoder에서는 두개의 attention을 이용 :

1 번쨰  Multi-head attention 은 encoder와 같은 self-attention으로 각각의 단어가 서로와 서로에게 떠한 가중치를 구하도록 만들어서 출력하게 되는 값을 학습해서 전반적으로 만들어서 하게 된것이다. 

2번째  Multi-head attention 은 encoder에 대한 정보를 attention 할 수있도록 만든다.각각의 출력 단어가. Encoder의 출력정보를 받아와서 사용하도록 만든다.소스 문장에서와 어떤 문장의 연관성이 있는지 

 

Transformer는 마지막 인코더 레이어의 출력이 모든 디코더 레이어에 입력됩니다.

Encoder = decoder동일하게 보통 맞춰준다.

 

RNN 을 사용하지 않으며 인코더와 디코더를 다수 사용한다는 점 이 특징입니다.

 

기본적으로 RNN을 사용할 떄는 고정된 크기를 사용하고 입력 단어의 개수만큼 ENCODER를 거쳐서 HIDDEN STATE를 만들었다고 하면 

TRANSFORMER는 입력 단어 전체가 하나로 쭉 연결되어서 한번에 입력이 되고 한번에 ATTENTION 값을 구한다. 위치에 대한 정보를 한꺼번에 해서 병렬 적으로 

계산 복잡도가 낮게 한다.

Decoder를 여러번 사용해서 eos가 나올때 까지 디코더를 이용 

 

Multi -head attention : 여러개 head를 가진다 .

Scaled Dot -Product attention : 

query  : 물어보는 것 attention mechanism의 간단히 설명하면 단어간의 어떤 연과성을 가지는지 를 구한다. 물어보는 주체 

key  : 물어보는 대상 

value 

I am a teacher에서 

I가 얼마나 연관성이 있는지 를 알려면 

Query : I

Key :  i am a teacherr 각각의 단어  가중치 값을 구하지고 하면 

value 값 

물어보는 주체 ( q)와 각가의 단어 (k) 들어오고 행렬곱을 수행한 뒤에 간단하게 scaling을 해주고 mask를 씌운후 softmax를 하고 각각의 key중에 어떤 연관성을 가지는 지 비율을 구하고 확률값과 value를 곱해서 가중치가적용된 attention value를 구할 수 있다. 

 

H개의 value key query 를 구할 수 있다 . Linear를 행렬 곱해서 h (서로 다른 헤드 끼리 value key쌍을 구해서 돌려준다.)

Dimension이 줄어지지 않도록 한다.

 

각각의 단어를 출력하기 위해서 encoder한테 물어보는것이다 . Key value

decoder에서는 query가 되고 

 

h개는 attention 을 수행하기 위한 각각 다른 feature들을 구하기 위해서 

 

동작 원리 : 

attention 을 위해 쿼리 , 키 , 값마다 만들 필요가 있습니다.

단어 4차원 

head 2개 가정 

query 와 key 각각 곱해서 attention energy 값을 곱해서  / scaling 으로 나누고 가중치 곱하기 * value

더해서 attention 값이 나오고 weighted sum

마스크 행렬 (mask matrix)를 이용해 특정 단어는 무사힐 수 있도록 합니다. 

곱해줘서 어떤한 단어는 참고하지 않도록 만들어줄 수 있다. 

예: I라는 단어는 love you를 attentin 하지 않도록 무시한다면 attention energies에서 가능한 음수 무한의 값을 넣어주면 softmax함수의 출력이 0%에 가까워지도록 합니다. 고려하지 않도록 한다 .

각 head마다 query key value를 넣어서 수행한 값들을 나열하게 되면 입력과 같은 dimension으로 된다.

 

차원이 동일하게 된다. 

 

multi -head attention 인데 사용하는 위치에 따라서  세가지 종류의 attention 레이어 :

encoder self- attention :

   각각의 단어가 서로 에게 어떤 연관성을 가지는지 attention 을 통해서 구해도록 만들고

  전체 문장에 대한 presention을 만든다는 것이 특징이고 

masked decoder self-attention:

   각각의 출력단어를 모든 단어와 연결하지 않고 앞쪽에 등장했던 단어들만 참고 

   나는 축구를 했다 에서 축구를 할때 "했다"를 연결하면 일종의 cheating처럼

   단어는 앞쪽의 단어만 하고 

encoder - decoder attention : query 가 decoder에 있고 각각의 key 와 value은 encoder

 I like you -> 난 너를 좋아해 

 어떤 정보에 대해 더 많은 가중치를 주는 지 구할 수 있어야 한다.

 decoder의 query 값이 encoder의 key value값이 참조한다고 해서

 

self-attention 은 인코더와 디코더 모두에서 사용됩니다 

매번 입력 문장에서 각 단어가 다른 어떤 단어와 연관성이 높은지 계산 할 수 있습니다.

트리 구조로 각각의 단어들이 어떤 연관성을 가지는지 

 

encoder part에서 입력값이 들어와서 위치에 대한 정보를 반영해준 첫번째 layer에 넣어주고 

encoder 는 n번 만큼 중첩이 되고 마지막 layer의 값을 decoder에 넣어주고 decoder도 n번 만큼 중첩이 되고 

가장 마지막에 나온 layer를 linear와 softmax를 취해서 각각의 출력 단어를 만들어 낼 수 있는 것이다. 

 

positional encoding:  주기함수 활용

각 단어의 상대적인 위치 정보를 네트워크에게 입력합니다.

 

 

 

 

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

 

반응형
반응형

Transformer :

 

Rnn : 단점

- 순차적 특성을 유지하지만 데이터 거리가 멀수록 정보 손실이 된다 

- 순차적인 특성 때문에 병렬처리를 할 수 없고 , 계산 속도가 느림

위의 것 때문에 나온것이

 

Attention : 거리가 멀면 정보에 대해서 보완하는 것 

self-attention : 

 

Transoformer: Attention 만을 사용한 모델로 ,해서 상대적으로 , 연산량이 줄고 성능도 매우 높음

Model Architecture:

Encoder:

총 6개의 layer 같은 sublayer 

512 dimension 

positional Encoding:

multi-head Attention :

  h 8개 

selected Dot -Product Attention 

embeding을 통해서  query  key value 3가지를 얻게 된다.

key value의 dimenstion은 64가 되고 h(head) 8개로 되여있어서 

query  key =>를 dot - product 진행

query 라는 단어가 있으면 key에서 얼마나 연관성이 있는지 

Attention score

softmax : 연관성을 지내는지 확률적으로 하는 수식 

value 곱해서 얼마나 큰 , 작은 영향을 주는지 

총 8개 값을 나오고 linear 거치고 concate

 

add & norm : 

add : 이전의 값을 더해준다. 위치 정보가 조금 손실될 수 있는것을 방지하기 위해서

norm:  layernorm residual 부분을 multi-head attention 합쳐서 normalize 된 부분

 

feed forward : relu 와 2개의 linear 이용했다.

 

encoder에서 총 512개 나온다. 

Decoder:

encoder part에서 나온 key , value를 multi-head attention 에 넣을 것이다.

masked multi-head self- attention : 

영어 문장을 -> 프랑스로 번역 하는 task를 하고자 하면 

encoding 영어로 I love you 프랑스 에 sequential 하게 i love you 를 입력해야 하는데 

Transformer문장을 matrix로 만들어서 통체로 입력하기 때문에 decode가 time-step을 통해서 순서를 해당하는 것만 참조를 해서 연산을 수행해야 하는데 불어로   I love you문장을 다 알고 있기 때문에 원래는 I 에 해당하는 것만 해야 하는데 불어는 love you를 지우고 한다. cheating 못하게 이미 나온것 들만 self-attention 지울 것은 계속 지워주고 또 새로 나온것은 그것을 다시 참조 있게 하고 여전히 안나온것은 참조하지 못하게 하고 하기 위해서 mask를 씌운다. 

학습을 효과 있게 하기 위해서 이다.

 

 

 

Transformer는 문장을 matrix로 만들어서 통체로 입력하기 때문에 matrix 순서 값이라는 time-step 

정보를 넘겨줄 수 없다 . Transformer는 matrix여서 어떤 단어가 어떤 순서라는 것을 의미적으로 하기 위해서 positional-encoding을 추가했다.

 

3. why self-attention

1. layer당 전체 연산량이 줄어든다.

2. 병렬화가 가능한 연산이 늘어난다.

3. Long-range (긴 sentence)의 term 들의 dependency 도 잘 학습할 수 있게 된다.

4. attention을 사용하면 모델 자체의 동작을 해석하기 쉬워진다.

 

4. Training

optimizer: Adam optimizer

Regularization :

  - Residual Dropout : 중간을 random하게 sub-layer

  - label smoothing : https://ratsgo.github.io/insight-notes/docs/interpretable/smoothing

레이블 스무딩이란 Szegedy et al. (2016)이 제안한 기법으로 말 그대로 레이블을 깎아서(스무딩) 모델 일반화 성능을 꾀합니다.  

   정확하지 않은 input 일 수 있지만 accuracy는 좀 더 높은 파트 일 수 있다.

 

5. Results

6. Conclusion

Transformer: Recurrent, convolution을 사용하지 않고 , attention만 상용한 모델

다른 모델들 보다 훨씬 빠른 학습속도 그리고 좋은 성능을 지님

번역 뿐만 아니라 이미지 등 큰 입력을 갖는 분야에도 적용될 것이 기대됨

 

 

 

 

https://www.youtube.com/watch?v=EyXehqvkfF0&t=552s

 

 

 

반응형

+ Recent posts