728x90
반응형
2. overall procedure
- encoder의 경우
- input 문장을 넣고 embedding 벡터로 바꿔줌
- positional encoding을 더해주어 각 단어의 순서에 대한 정보를 부여함.
- 더해서 multi-head attention을 수행
- 이 때, 같은 embedding의 값을 Q,K,V로 분배. (Q,K,V)는 서로 같은 값.
- ex) head가 3개면, 각 Q,K,V에 해당하는 가중치 3개씩 존재함 (Linear) ⇒ 총 9개의 다른 값이 생기게 됨
- 이때, V는 encoding의 embedding에서 나온 값에 가중치 곱한 것을 의미.
- 하나의 head당 Q와 K를 곱해서 softmax 함수를 거친 후, V값과 곱함
- 이 각각 곱한 3개의 head 값들을 concat하고 linear를 통해 값을 냄.
- 7번에 대한 값과 2번에 대한 값을 더한 후 정규화 함.
- 이후 순전파하고 또 8번 값과 순전파한 값을 더하고 정규화
- 반복
- decoder의 경우
- 학습 시) 정답 문장을 embedding으로 넣음. positional encoding을 더해서 각 단어의 순서에 대한 정보 부여.
- 더하고, encoder와 같이 각 Q,K,V 생성.
- 똑같이 Q와 K를 곱함
- mask를 거치게 되는데, 얘는 decoder embedding으로 받은 뒷부분의 단어들은 0으로 만들어줌.
- 그 단어만 뽑은 값과 그 앞의 단어들만 softmax를 통해 확률로 변환하고, V값과 곱해줌
- 각각 나온 3개의 head 값들을 concat하고 linear을 통해 값 추출
- 6번의 값과 1번의 값을 더하고 정규화
- 두번째 multi head attention의 경우, Q는 7번의 값을 통해 만들고, K와 V는 encoder의 마지막에서 나온 값을 사용함.
- 이후, 똑같이 K와 Q 곱하고 softmax 통해 확률 구해서 V값과 곱함.
- 똑같이 더하고 정규화
- FC layer갔다가 또 FC 전의 값과 이후 값을 더해주고 정규화.
- 그 나온 아웃풋 값을 다시 첫번째 masked 계층으로 ㄱㄱ
- 첫번째 아웃풋과 decoder embedding 값을 활용해 반복.
3-1. Encoder: Self-Attention(Multi-Attention)


- postional encoding을 더해준 각 단어의 벡터(1x4)와 각각의 Q,K,V의 가중치(4x2라고 가정)를 곱함. ⇒ 각각의 다 다른 Q,K,V가 만들어질 것임 (1x2) 크기



- Q,K,V의 값을 만들고, Q와K끼리의 내적곱을 해줌.
- 이후 scaling 해주고, Softmax 함수에 넣으면 각 단어에 대한 가중치가 만들어짐
- 이 단어의 가중치 값들과 V값을 곱해줌 ⇒ 각 단어에 대한 output(z) 생성.
- 벡터로 내적곱을 표현하면 저렇게 나옴.

- head 개수에 따라 각 해당하는 가중치 개수가 생기게 됨 ⇒ 서로 비슷한 값들의 가중치들이 만들어지기에 결국, 각 head에 해당하는 z 벡터도 값이 다 비슷비슷할거임⇒ 같은 데이터를 쓰지만 다른 가중치를 넣어 다양성 반영을 할 수 있다.(필터와 같은 역할)

- head가 8개이므로 8개의 output이 나오고, 처음 embedding 벡터 크기와 맞춰주기 위해 W0를 곱해줌 ( 그냥 동일한 차원으로 만들어주는 역할로 존재)
3-3. Encoder: Feed Forward Network
4-1. Decoder: Masked Self-Attention
4-2. Decoder: Encoder-Decoder Attention
4-3. Decoder: Feed Forward Network
- Add+Norm 해서 각 단어에 대한 값 추출.
+ Positional Encoding는 어떻게 만들어질까? (+추가 궁금증)

1. positional encoding base
2. positional encoding의 규칙
3. 위치 벡터 생성 방법 및 문제점
4. Sin&Cos 함수 사용
→ 벡터값이 너무 크면 안되고, 항상 같은 위치의 벡터값을 지녀야 함.
⇒ 그래서 나온 것이 cos&sin 함수
2. 항상 같은 위치 벡터 값
- 한가지 문제점
- 같은 위치에 있는 단어는 항상 같은 위치 벡터값을 지녀야 함
- ex) I love you와 I like me 중에서 love와 like의 위치벡터는 같음.
- 하지만 주기함수이기 때문에 서로 다른 위치의 단어의 경우에도 같은 위치 벡터값이 생성됨. (그림참고)
→ postional encoding은 스칼라가 아닌 벡터로 이루어져있어 단어 벡터와 같은 차원을 지님.
- 그렇기 때문에 차원이 4개로 표현한다고 가정하면 각 요소는 서로 다른 4개의 주기를 갖게 됨 (짝수 홀수)
- 따라서 겹치지 않게 됨.
- 한가지 문제점
5. 왜 concat 안하고 더해줬는가

트랜스포머 transformer positional encoding
트랜스포머 Transformer Attention is All You Need Postional Encoding
https://www.blossominkyung.com/deeplearning/transfomer-positional-encoding
728x90
반응형
'Deep Learning > [논문] Paper Review' 카테고리의 다른 글
YOLO: You Only Look Once: Unified, Real-Time Object Detection (1) | 2023.07.06 |
---|---|
Fast R-CNN (0) | 2023.07.06 |
Inception V2/3 (0) | 2023.07.06 |
ELMO (0) | 2023.07.06 |
SegNet (0) | 2023.07.06 |