본문 바로가기

👩‍💻 도비는 공부중/📋 연구과제(2023.7 ~ )

Attention Is All You Need

논문: Attention Is All You Need

 


Attention

RNN ➝ LSTM ➝ Seq2Seq ➝ Attention ➝ Transformer ➝ ... 

 

☑ 기존 Sequence model의 문제점

┕ RNN의 sequential 특징: 입/출력 sequence token(symbol) 위치 따라 연산

   이전 step h(t-1)과 현재 입력 t로 h(t) 시퀀스 생성 ➔ parellelization 불가능, 메모리 제약..

시퀀스 길이가 길어질수록 병렬화 중요해

 

┕ 입력 문장을 하나의 context vector c로 압축 ➔ bottle neck 원인

┕ RNN cell에서 참고하도록 만들어 성능 개선 가능 ➔ 문장이 길어져도 손실 정도 줄일 수 있지만, 여전히 병목 현상 문제..

출력 할 때마다 입력 문장을 참고하도록 개선 (Neural Machine Translation by Jointly Learning Align and Translate)

 

☑ Transformer

 RNN / CNN 없이 오직 Attention 만 사용해서 개선


Model Architecture

(Encoder-Decoder)

 

 

Encoder

 

1. Input Embedding & Positional Encoding

- input token 을 d(model) 차원 벡터로 변환하기 위한 임베딩 과정

 

 

- sequence data를 처리하기 위해서 순서에 대한 정보 필요

┕ 기존 RNN 사용 시, 위치에 대한 정보 제공 O ➔ RNN을 사용하지 X ??? ➔  Positional Encoding

 

 

❍ RNN 사용 O: 

    ┖  인코더 (LSTM, RNN)를 고정된 크기로 사용

    ┖  입력 단어 개수만큼 인코더 레이어 거쳐 매번 hidden state 만들어

 입력 단어 자체가 하나로 연결되어 한번에 입력되어 attention 구해

중간에 context vector로 압축하는 과정 생략네트워크 자체에서 LSTM 같은 RNN 구조를 사용할 필요 없다

 

-  주기 함수 활용한 공식 사용

정해진 함수 사용하지 X, 위치에 대한 임베딩 값을 학습하도록 만들어 네트워크에 넣을 수 O

 

논문: sin() 사용

 

2. Multi-Head Attention ➔ Add & Norm

 

-입력 문장 각 단어에 대해 self-attention

Q, K, V 모두 인코더의 값, 각 position은 그 전 layer의 모든 position 참조

 

==  어떤 한 단어와 모든 단어 사이의 연관성 학습

 

- Residual learning

전반적인 학습 난이도 낮추고 초기 모델 속도 올려

 

 

 

3. FeedForward ➔ Add & Norm

 

- Attention layer와 함께 Fully connected feed-forward network 사용

- ReLU activation 있는 2개의 선형 변환으로 구성

  position에 대해서 동일 | 각 층마다 다른 param(W1, W2) 사용 ➔ kenel size = 1 인 2 개의 convolution ??

(input, output 차원은 512, hidden layer dim = 2048)

 

 

 N 개의 encoder layer 중첩해 사용


Decoder

 

1. Masked Multi-Head Attention

(Decoder 파트의 self-attention)

┕ sequence model의 auto-regressive property 보존 masking vector 사용해 이전 단어들만 참조하도록

(이전 단계의 출력을 사용하여 다음 단계의 출력 생성하는 특성)

 

┕ sclaed-dot product 에서 softmax의 input value 중 illegal connection 해당하는 값을 -∞로 설정

 

2. Encoder - Decoder Attention

- Q는 디코더, K & V는 인코더의 출력값에서 가져와

- 디코더의 벡터로 인코더의 모든 position  값 참조 ➔ 디코더의 sequence vector가 인코더와 어떤 연관성을 가지는지 학습

 

3. Feed-Forward ➔ Add & Norm

 

4. Linear ➔ Softmax ➔ Output Probabilities


Multi-Head Attention

 

- 어떤 단어(Q)가 다른 단어(Key)에 대해 연관성을 가지는가?

 

- Q, K, V를 h번 linear layer를 거쳐 병렬적으로 scaled-dot product attention

 

❍ 일반적으로 사용되는 additive attention | dot-product(multiplicative) attention

┕ 보다 빠르고 공간 효율적

 

더보기

Scaled Dot-Product

: 내적 연산은 고속 처리 가능 -> 다른 attention 방법보다 빠르다

: 정규화를 위한 scaling, 내적 연산을 통해 계산된 유사도 정규화 | 내적 연산 결과의 차원 수로 나누어 scaling

가중치의 분산 조절해 학습 안정화, 성능 향상

: 병렬 처리 가능 => 입력 시퀀스의 각 단어 사이 독립적 계산 가능

: 다양한 입력 시퀀스의 길이 처리 가능 (입력 길이에 대한 제한이 없다)

 

❍ Dot-Product Attention

❍ Additive Attention

Q, K 결합 후, 학습 가능한 가중치 행렬 적용 > 활성화 함수 > att score 계산

❍ Multi-Head Attention

- 여러개의 독립적인 att 병렬 수행 후 결합

- Scaled Dot-Product att 기반


Self-Attention

각 원소와 다른 원소들과의 관련성 계산 메커니즘

 

(논문에서 기대하는 효과)

 

1. layer 당 전체 계산 복잡도

 

2. sequential parallelize

 

3. network: long-range dependency

  input | output sequence position 조합 간의 path가 짧을수록, long-range dependency 학습하기 쉬움

 

+ more interpretable model O


 Training

 

 

❍ English-German

┕ WMT 2014 English-German Dataset

4.5 million sentence pairs

 

byte-pair encoding

 

❍ English-French

┕ WMT 2014 English-French Dataset

36M sentences & word=piece vocabulary tokens

 

 

❍ 8 NVIDIA P100 GPU

 

 

❍ Adam optimizer

 

❍ Regularization

 sub-layer output: dropout

 

┕ embedding & positional encoding: dropout

┕ 학습 중 label smoothing

 


Conclusion

 

- Encoder-Decoder 구조에서 일반적으로 사용되는 RNN layer ➔ multi-headed self-attention으로 대체

- Attention을 전적으로 사용하는 최초의 시퀀스 변환 모델 'Transformer' 제시

 


[ref] github