[Transformer]
배경
- 기존의 seq2seq는 context vector에 소스문장 압축
- 병목 현상이 발생
- Attention is all you need -> 기존의 rnn, lstm 등을 사용하지 않고 attention만을 사용한 아키텍처를 사용해보자
아키텍처
인코더
- 입력 :Input Embedding + positional Encoding
rnn은 순차적으로 데이터가 입력되어 위치정보가 포함되어있지만, Transformer는 입력이 한번에 들어가기 때문에 위치정보를 따로 지정해줘야함
- Layer : Multi head Attention -> add&Norm -> Feed Forward -> add&Norm
- 인코더는 N개의 Layer로 구성
- 각 Layer는 서로 다른 파라미터를 가진다.
- 마지막 인코더 레이어의 출력은 모든 디코더 레이어에 입력으로 들어간다.
디코더
- 입력 :Output Embedding + positional Encoding
- Layer : Masked multi head Attention -> add&Norm -> Multi head Attention -> add&Norm -> Feed Forward -> add&Norm
- 디코더는 N개의 Layer로 구성
- 각 Layer는 서로 다른 파라미터를 가진다.
- 마지막 인코더 레이어의 출력은 모든 디코더 레이어에 입력으로 들어온다.
Transformer에 사용되는 3 가지 Attention
1. Encoder Self Attention
2. Masked Decoder Self Attention
3. Encoderr - Decoder Attention
Attention의 원리
입력 : Query, Key, Value
쉽게 생각하면 무엇과 가장 연관이 있는지를 보려는 대상은 Key이다. 즉 query가 어떤 key와 연관이 있는지 가중치를 구하고 value를 곱해 attention 값을 구한다.
multi head attention은 말 그대로 여러 head를 사용하는 것이다. Query, Key, Value를 서로 다른 Linear layer에 태워서 서로 다른 attention 값을 추출하고 head의 개수 만큼 attention 값을 얻을 수 있다.
마지막으로 head의 개수 만큼 attention 값을 concat 후 Outut Linear layer을 거치게 되면 최종 multi-head attention 값을 구할 수 있다.
Masked Decoder Self Attention의 경우 마스크 행렬을 이용해 특정 단어를 무시하도록 한다.
마스크 값에 음의 무한대를 넣어 softmax 함수의 출력이 0%에 가까워지도록 한다.
'딥러닝' 카테고리의 다른 글
[논문 리뷰] EmotionFlow: Capture the Dialogue Level Emotion Transitions (0) | 2023.01.14 |
---|---|
[딥러닝][NLP] Tokenizer 정리 (0) | 2023.01.13 |
[MLOps][딥러닝][실험] Wandb 간단한 사용법 (0) | 2022.12.12 |
Pretrained Language Model 정리2 (0) | 2022.10.09 |
Pretrained Language Model 정리1 (0) | 2022.09.28 |
댓글