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
'👩💻 도비는 공부중 > 📋 연구과제(2023.7 ~ )' 카테고리의 다른 글
[세미나] 발표 회고 | 피드백 정리 | TO DO (0) | 2023.09.11 |
---|---|
ORDER MATTERS: SEQUENCE TO SEQUENCE FOR SETS (0) | 2023.08.22 |
[Pytorch] Implement GEDGNN (0) | 2023.08.08 |
PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space (0) | 2023.07.30 |
[용어정리] 쫌쫌따리 정리하는 개념들 (0) | 2023.07.30 |