재귀적인 구조가 없고 attention 구조에 기반
![](https://velog.velcdn.com/images/chanu48/post/e122e8af-ef52-42ee-9a40-2952537894d6/image.png)
- Encoder에서는 한 번에 n개의 단어를 처리할 수 있음
Self-Attention
![](https://velog.velcdn.com/images/chanu48/post/8a0694f6-759e-4bc2-b6d2-ed06a886b392/image.png)
- Self-Attention에서는 xi에서 zi로 변환할 때 다른 x들을 모두 고려
- Feed-Forward는 독립적
![](https://velog.velcdn.com/images/chanu48/post/f046b854-77c1-48ee-84ca-f6773035a545/image.png)
![](https://velog.velcdn.com/images/chanu48/post/c1e2daed-f8c1-4cbc-96d1-4919305837f8/image.png)
- Score 벡터 생성 (내적)
- Thinking이라는 단어가 다른 단어와 얼마나 유사한지 유사도를 구하는 것
![](https://velog.velcdn.com/images/chanu48/post/a4667383-8b18-4063-8925-f8076cf8bdfe/image.png)
- Score 벡터를 dk로 나눠줌
- 나눈 score 벡터에 softmax 적용
![](https://velog.velcdn.com/images/chanu48/post/694f5a5d-c982-4580-a8fd-4e6cb5329554/image.png)
- value 벡터와 softmax 함수 값 weighted sum
- 주의해야 할 것은 Query 벡터와 Key 벡터는 차원이 같아야 한다. (내적을 해야하기 때문)
- Value 벡터는 가중합을 하기 때문에 차원이 다를 수 있음
![](https://velog.velcdn.com/images/chanu48/post/759ef5ca-b211-4fff-99cc-9435831173dc/image.png)
- 단어들을 나누지 않고 문장 단위의 행렬로 연산 가능
Transformer은 n개의 입력에 대해 n2연산을 해야하므로 computational cost가 크다.
Multi-head Attention
![](https://velog.velcdn.com/images/chanu48/post/e87d8d63-d707-4f3d-a8cc-c36d65cb5d3e/image.png)
- head 개수만큼 나눠서 처리 후 마지막에 Wo를 곱해 Z 벡터 도출
Positional Encoding
Transformer은 문장 순서에 대해서는 independent
문장의 position 정보를 더해줌 (bias)
Decoder
Encoder에서 Key, Value Matrix를 받음
학습 단계에선 masking을 사용해 이전 단어들만 고려
![](https://velog.velcdn.com/images/chanu48/post/d6bd3ab8-d210-4259-88e9-b19a8826c44f/image.png)
- 단어들의 분포를 만들어 최종 output 도출
※ 모든 이미지의 출처는 네이버 커넥트재단 부스트캠프 AI Tech 5기입니다. ※