Seq2seq의 한계 고정된 크기의 벡터(Context Vector)에 모든 정보를 압축함으로써 발생하는 정보의 손실 Fixed-length vector → 번역시 병목현상 → 긴 문장의 번역시 성능 떨어짐 |
Attention Mechanism 디코더에서 출력 단어를 예측하는 매 시점(time step)마다, 인코더에서의 전체 입력 문장을 다시 참고 전체 입력 문장을 전부 다 동일한 비율로 참고하는 것이 아닌, 해당 시점에서 예측해야 할 단어와 연관이 있는 입력 단어 부분을 좀 더 집중(attention)해서 양방향 RNN Encoder와 단방향 RNN decoder 사용 |
Transformer Attention mechanism 활용 RNN을 사용하지 않고, attention mechanism을 병렬화 시킨 self-attention |
Sequence Modeling
sequence로부터 또 다른 sequence를 생성하는 task
대표적인 ex) Maqchine Translation, Chatbot 등
대부분 Recurrent neural network, LSTM, GRU가 주축으로 사용
Recurrent model은 sequence 순으로 데이터가 입력되는데, 이전 데이터의 hidden state $h_t$가 다음 데이터의 hidden state $h_{t+1}$를 구할 때 사용
⇒ 어떠한 시점 $t$에서 구한 hidden state $h_t$는 그 전 sequence들 $(1,2,...,t-1)$의 정보를 함축하고 있음
문제점
sequence position t에 따라 순차적으로 입력에 넣어줌
⇒ 긴 sequence 길이를 가지는 데이터를 처리할 때, memory와 computation에 많은 부담 발생
∴ context vector의 maximum length를 제한해야 함
∴ 긴 sequence 데이터를 처리해야할 때, 제한된 크기의 vector로 모든 정보를 담아내야하기 때문에 정보의 손실 증가, 이에 따라 성능의 병목현상 발생
RNN의 고질적 문제인 gradient vanishing 문제도 존재
Attention Mechanism
paper| https://arxiv.org/abs/1409.0473
input or output 데이터에서 sequence distance에 무관하게 서로 간의 의존성(dependency)를 모델링
(위 사진| franch와 english 번역시, attention 사용할 때 correlation matrix)
딥러닝 모델들은 파라미터가 많아서 해석하기 힘든데 이런식으로 시각화가 가능
모델이 다음 target 단어를 생성하는 것과 관련있는 정보에 집중할 수 있게 함
고정된 크기의 vector에 input값의 정보를 담아야했던 기존 seq2seq과는 달리 문장의 길이에 robust함
Attention Is All You Need
paper| https://arxiv.org/abs/1706.03762
code| https://github.com/tensorflow/tensor2tensor
좋은 성능을 보이는 Neural sequence transduction model들은 대부분 encoder-decoder 구조를 지님
Transformer도 이 구조를 따르고, 내부는 self-attention & fully connected layer만으로 구성
Abstract
기존 sequence transduction model들 → encoder&decoder를 포함한 recurrent or cnn에 기반
가장 성능 좋은 model 역시 attention mechanism으로 encoder와 decoder를 연결한 구조
attention mechanism에만 기반한 구조인 Transformer 제안
⇒ more parallelizable & train시간 감소
english-german & english-french translation task에서 SOTA달성
다른 task에서도 일반적으로 잘 작동
1 Introduction
RNN, long-term memory, gated RNN이 sequence modeling & transduction 문제에서 SOTA를 달성해 옴
recurrent model은 memory등의 이슈로 긴 sequence length에서 parallelization이 불가능
factorization trick(인수분해 trick) & conditional coputation(조건부 결합)을 통해서 계산 효율성 많이 개선 (conditional coputation은 모델 성능도 동시에 개선)
But 여전히 sequential computation의 근본적인 제약은 존재
Attention mechanism
다양한 task에서 sequence modeling & transduction model에서 주요하게 다뤄짐
input or output sequences 길이,거리에 관계없이 dependency 모델링 가능
⇒ input과 output sequence간 길이를 신경 안써도 됨
But 소수 상황 제외하고, recurrent network와 같이 사용되었음
Transformer
recurrence 사용 X, input과 output간 global dependency를 뽑기위해 attention mechanism 사용
병렬화 가능 → 적은 시간으로 translation quality에서 SOTA 달성할 수 있었음
2 Background
reducing sequential computation
- Extended Neural GPU, ByteNet, ConvS2S에서도 reducing sequential computaion이 다뤄짐
- But 이 연구들 모두 CNN을 basic building block으로 사용
- 먼 위치 사이의 dependency을 배우기 힘들게 만듦
⇒ Transformer에서는 Multi-Head Attention을 통해 constant number of operation으로 축소됨
self-attention
- intra-attention이라고도 불림
- sequence의 표현을 계산하기 위해 single sequence의 서로 다른 위치와 관련된 attention mechanism
- 성공적으로 다양한 task(reading comprehension, abstractive summarization, textual entailment, learning task-independent sentence representations)에 사용됨
end-to-end memory network
- sequence-aligned recurrence대신 recurrent attention mechanism에 기반
- 간단한 질의응답, 언어 모델링 task에서 잘 수행됨을 보여줌
sequence-aligned: 입력 vector와 출력 vector의 차원이 같아야함
But 일반적으로 번역 task를 진행할 때, 원본 문장과 번역한 문장이 일대일로 대응되서 길이가 같기는 힘듦
∴ recurrent attention mechanism 사용
참고| https://dos-tacos.github.io/concept/alignment-in-rnn/
⇒ Transformer은 self-attention에만 의존한 최조의 transduction model
3 Model Architectire
encoder, decoder 모두 stacked self-attention, point-wise, fc-layer를 사용
seq2seq 구조: encoder와 decoder에서 각각 하나의 RNN이 t개의 시점(time step)을 가지는 구조
Transformer 구조: encoder와 decoder라는 단위가 N개로 구성 (논문에서는 각각 6개 사용)
RNN은 사용하지 않더라도 여전히 encoder-decoder 구조 유지
Encoder & Decoder Stacks
Encoder
6개의 동일한 layer로 이뤄짐
각 layer는 두개의 sub-layer 존재
- 1-sub-layer: multi-head self-attention mechanism
- 2-sub-layer: 간단한 position-wise fully connected feed-forward network
- 각 sub-layer 이후 residual connection 사용 후, layer normalization 진행
- 각 2개의 sub layer에 residual connection 이용 (residual connection: input을 output으로 그대로 전달하는 것)
이때, sub-layer의 output dimension을 embedding dimension과 맞춰줌
$d_{model}=512$ - $LayerNorm(x+Sublayer(x))$
$Sublayer(x)$는 sub layer 가체가 구현하는 함수
residual connection(잔차연결)
서브층의 입력과 출력을 더하는 것
cv에서 많이 사용
layer normalization
Layer normalization은 Batch normalization과 달리 배치 크기나 시퀀스 길이에 독립적으로 적용
입력 시퀀스의 각 시점에서 독립적으로 정규화를 수행하므로, 시점 간 상관관계가 강한 RNN에서 좋은 성능을 보임
Transformer에 batch normalization 적용
논문| https://arxiv.org/abs/2003.07845v1
Decoder
6개의 동일한 layer로 구성
- 인코더의 multi-head attention layer랑 Feed Forward Network외 하나의 layer 더 존재
- encoder의 stack output에 대해 Multi-head attention 수행
- decoder에서는 encoder와 다르게 순차적으로 결과를 만들어 내야함
∴ self-attention을 변형 ⇒ masking 해주기
자기 자신보다 미래에 있는 단어들을 참고하지 못하도록 하기 위해서 masking
Attention
attention → 특정 정보에 좀 더 주의를 기울이는 것
ex) source:영어, target:한국어
Hello, Good morning = 안녕, 좋은 아침
model은 '아침'이라는 token을 decode할 때, source에서 morning에 더 큰 중요도를 갖게 하는 방법이 attention
Transformer에서 사용되는 Attention
- Encoder Self-Attention → encoder에서 이루워짐
- Masked Decoder Self-Attention → decoder에서 이뤄짐
- Encoder-Decoder Attention → decoder에서 이뤄짐
Self-Attention은 Query, Key, Value가 동일한 경우를 말함
∴ Encoder-Decoder Attention에서 Query는 decoder의 vector, Key&Value는 encoder의 vector이므로 self-attention이라고 안부름
(여기서 동일하다는 경우는 vector 값이 같은게 아니라 vector의 출처가 같다는 의미)
Multi-head : Transformer가 attention을 병렬적으로 수행하는 방법
Attention 함수는 주어진 Query에 대해서 모든 Key와 유사도를 각각 구하게 됨
→ 구한 유사도를 가중치로 해서 key와 맵핑되어있는 각각의 Value에 반영
→ 유사도가 반영된 value를 모두 가중합하여 return
Self-attention: 자기 자신에게 attention을 수행한다는 의미
Scaled Dot-Product Attention
attention function에는 여러 종류가 있는데
Transformer에서는 내적만 하는 어텐션 함수 $score(q,k) = q∙k$가 아닌 이것을 특정 값으로 나눠준 $score(q,k) = q∙k / \sqrt(n)$ 사용
$d_k = d_{model} / num_heads$
⇒ 문장에서 연관성이 반영된 값이기 때문에 문맥을 알 수 있도록 해줌
Multi-Head Attention
위 그림을 수식으로 나타내면
$MultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^O$
$head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)$
하나의 attention function을 사용하는 것보다 Query, Key, Value를 linear projection을 통해 중간에 매핑해줘서 각 다른 값들을 입력으로 하는 여러개의 attention function들을 만드는 것이 더 효율적
Applications of Attention in our Model
Transformer는 세가지 방식으로 multi-head attention 사용
- encoder-decoder attention layer에서
Query는 이전 decoder layer에서, key, value는 encoder의 output에서 가져옴
→ decoder의 모든 위치에서 input sequence의 모든 위치를 참조할 수 있도록 함
query가 decoder layer의 output인 이유: query가 조건에 해당하기 때문 - self-attention layer를 포함한 encoder
self-attention layer에서 모든 key, value, query는 동일한 위치(encoder의 이전 layer의 output)에서 옴
encoder의 각 위치는 encoder의 이전 layer에 있는 모든 위치에 대응 가능
if 첫번째 layer, positional encoding이 더해진 input embedding이 됨
→ encoder의 각 위치들은 이전 레이어의 모든 위치들 참조 가능 - self-attention layer를 포함한 decoder
masking사용 → decoder의 각 위치들은 decoder 내의 다른 위치들을 참조 할 수 있지만, 이전부터 자기 위치까지만 참조 가능
→ auto-regressive 성질을 살리면서도 정보가 잘못 흐르는 것을 막기 위해서
Position-wise Feed-Forward Networks
encoder & decoder의 각 계층은 개별적이고 동일하게 적용되는 fully connected feed-forward network를 포함
position마다(개별 단어마다) 적용되기 때문에 position-wise
$$FFN(x) = max(0,xW_1+b_1)W_2 + b_2$$
두개의 linear transformation사이에 ReLU
linear transformation $f_1=xW_1 + b_1$ |
→ | ReLU $f_2 = max(0,f_1)$ |
→ | linear transformation $f_3 = f_2W_2 + b_2$ |
x: 멀티 헤드 어텐션의 결과로 나온 (seq_len, $d_{model}$)의 크기를 가지는 행렬
$W_1$: 가중치 행렬. ($d_{model}, d_{ff}$)
$W_2$: 가중치 행렬. ($d_{ff}, d_{model}$)
input & output 차원 $d_{model}$은 512, hidden layer $d_{ff}$ 차원은 2048
통과하고 나와도 입력 크기였던 (seq_len, $d_{model}$)로 크기는 동일
Embeddings and Softmax
다른 sequence transduction 모델과 마찬가지로, 학습된 embedding 사용해서 input & output token을 dimension $d_{model}$의 vector로 변환
decoder output을 예측된 다음 token 확률로 변환하기 위해 학습된 linear transformation & softmax를 사용
두개의 embedding layer와 pre-softmax linear transformation 사이에 같은 weight matrix를 공유
Positional Encoding
RNN이 자연어 처리에서 유용했던 이유 = 단어의 위치에 따라 단어를 순차적으로 입력받아 처리 → 각 단어의 위치 정보(position information)를 가질 수 있었음
But Transformer은 Recurrent model을 사용하지 않고, attention mechanism만 사용 → 단어 입력을 순차적으로 받지 X → sequence 정보를 담아낼 수 X
∴ sequence 정보를 데이터에 추가해줘야 함
∴ 단어의 위치정보를 얻기 위해 각 단어 embedding vector에 위치 정보를 더해서 model의 input으로 사용
⇒ 이것이 positional encoding
token의 상대적(or 절대적) 위치에 대한 정보를 제공하기 위한 역할
positional encoding 선택 방식: 방식은 다양. 본 논문에서는 $sin, cos$ 사용
sin, cos 함수의 값을 embedding vector 에 더해주므로서 단어의 순서 정보를 더해줌
sin 함수는 (pos, 2i) 즉 embedding vector내 각 차원의 인덱스가 짝수인 경우
cos 함수는 (pos, 2i+1) 홀수인 경우 사용
$pos$: 입력 문장에서의 embedding vector의 위치
$i$: embedding vector 내의 차원의 인덱스
$d_{model}$: Transformer의 모든 층의 출력 차원 (논문에서는 512)
고정된 offset k에 대해 $PE_{pos+k}$가 $PE_{pos}$의 선형 함수로 표현될 수 있기 때문에 모델이 상대적인 위치를 참조할 수 있을 것이라 가정했기 때문에 이 함수 선택
⇒ 각 embedding vector에 positional encoding 값을 더하면 같은 단어라도 문장 내 위치에 따라서 Transformer의 입력으로 들어가는 embedding vector 값이 달라짐 → Transformer의 input이 순서 정보가 고려된 embedding vector가 됨
4 Why Self-Attention
self-attention을 사용하는 이유
- 각 layer당 전체 계산 복잡성
- parallelize될 수 있는 연산량
- long-range dependency 사이의 path length
장거리 의존성을 학섭하는 것은 많은 시퀀스 변환 task에서 핵심 과제 - + 부가적인 이점: 해석 가능한 모델
Self-Attention은 모든 위치를 순차적으로 실행되는 operation의 constant number로 연결하는 반면,
recurrent layer는 $Q(n)$의 sequntial operation을 요구함
계산 복잡성 측면에서, self-attention layer는 recurrent layer보다 더 빠름
(sequence 길이 n이 representation dimensionality d보다 작을 때)
5 Training
Training Data & Batching
약 450만 문장 쌍으로 구성된 standard WMT 2014 English-German dataset 사용
larger WMT 2014 English-French dataset도 사용
train batch는 약 25,000개의 source token, 약 25,000개의 target token이 포함된 문장 쌍을 포함함
Optimizer
Adam 사용
Regularization
train시, 3가지 regularization 사용
- Residual Dropout:
1. 각 sub-layer의 출력이 sub-layer input에 추가되고, 정규화되기전에 dropout 적용
2. encoder & decoder stack에서 embedding과 positional encoding의 합에 dropout 적용 - 3. Label Smoothing:
진행하면 모델이 불확실함을 배우지만, accuracy & BLEU score를 향상시킴
6 Results
Machine Translation → 성능 good
Model Variations → 다양한 구성요소의 중요성을 평가하기 위해서
English Constituency Parsing → 다른 task으로 일반화 가능한지 평가하기 위해서 실험 → 성능 good
7 Conclusion
- Encoder-Decoder Architecture에서 일반적으로 사용되는 recurrent layer를 multi-headed self-attention으로 대체
- In Translation Task, Recurrent or Convolutional을 기반으로한 Architecture보다 훨씬 빠르게 train 가능
'공부 끄적끄적 > 논문리뷰' 카테고리의 다른 글
[X:AI] U-Net: Convolutional Networks for Biomedical Image Segmentation (0) | 2023.04.03 |
---|---|
[X:AI] ELMo; Deep Contextualized Word Representations (0) | 2023.03.31 |
[2022D&A] DCGAN (0) | 2022.08.17 |
[2022D&A]CLIP 논문 (0) | 2022.08.06 |
[2022D&A] VGG 논문 (0) | 2022.04.13 |