Sequential Model
Why is it hard to train?
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F978cc89f-e412-4dae-949d-ec8c9b63d4fa%2Fimage.png)
- 항상 data가 멀쩡하게 들어오지는 않기 때문에!
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F20a62e8c-e773-4c25-861c-2d93c205b2b2%2Fimage.png)
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F0e0247fa-e674-427a-bca5-cf83f60ea5bf%2Fimage.png)
- sequential한 data를 처리하고 encoding하는 방법이기 때문에 NMT(Neural Machine Translation)뿐만 아니라 이미지 분류, detection 등에도 사용됨
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2Fb4747d04-a389-4b21-92a3-77a76f6121b3%2Fimage.png)
- Seq2seq(Sequence-to-Sequence): 입력된 시퀀스로부터 다른 도메인의 시퀀스를 출력하는 다양한 분야에서 사용되는 모델
- Transformer구조에서는 재귀적으로 돌지 않음
Encoder
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2Fe6d21eb1-9953-4921-80ee-2995f0878b70%2Fimage.png)
- 각 encoder는 Feed Forward NN와 Self-Attention로 이루어져있다
- Feed Forward NN: MLP와 동일
- Self-Attention이 가장 중요한 부분
Self-Attention
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F41557a51-55af-4193-b9b2-2a96d14554bb%2Fimage.png)
- x1벡터를 z1벡터로 변환할 때 나머지 x2,3벡터도 같이 고려하는게 특징
예시)
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2Fed8bd356-288d-4ff7-9f86-3aab11103457%2Fimage.png)
- 단어를 학습할 때 it이 animal과 높은 관계가 있다는 것을 알아서 학습한 것을 확인할 수 있다
Self-Attention의 과정
- self-attention은 학습할 때 1가지 단어(input)에 대해 embedding 벡터로 3가지 벡터(query, key, value)를 만들어냄(== 3개의 neural network)
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F80db5407-a042-4955-95b3-ed6571432937%2Fimage.png)
- 그리고 encoding하고자 하는 단어의 query 벡터와 (자기자신을 포함한)나머지 모든 단어의 key 벡터를 내적해서 score를 구함
--> 두 단어가 얼마나 align되어있는지(유사도)를 구함
- score를 normalize해줌(몇으로 나눌지는 key vector에 dependent)
key vector가 몇 차원을 만들지는 hyperparameter
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F44aadb60-2cb9-4b63-9f8f-cd86f1f25821%2Fimage.png)
- softmax로 score를 normalize한 scalar 값과 value를 곱한 value 벡터의 weighted sum이 output
query와 key는 차원이 같아야하나(for 내적) value는 scalar를 곱하기 때문에 차원이 상관없음
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2Fb60e15ed-a625-478a-ad5d-b57a2c4f446a%2Fimage.png)
- embedding된 벡터(input)의 dimension과 encoding돼서 self-attention으로 나오는 벡터(output)의 dimension이 항상 같아야됨
그래서 그림에서 5)에서 input, output의 dim을 맞추기 위해서 matrix WO를 곱해줌
이를 MHA(Multi-headed attention)이라고 부른다
Positional encoding
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F0b971f31-6def-4313-bfde-b03f108ee104%2Fimage.png)
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F890804a1-1ce9-45ad-afff-c421f6a07c22%2Fimage.png)
- encoder는 order independent하기 때문에 positional encoding을 input에 더해줌
(key/query에서 자신을 포함한 다른 모든 input을 곱해버리기 때문에 abc, bac, cab, cba 모두 똑같은 값을 가짐)
- 어디에 얼마나 더할지는 pre-defined
Layer-Norm
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F5ad3944b-ef5c-4862-b46d-53aee82ff9af%2Fimage.png)
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2Fe770b5d1-69c5-4285-b32d-ce4e67d81c64%2Fimage.png)
- 같은 layer에 있는 hidden unit은 동일한 μ와 σ를 공유
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2Fa1489a2e-10c7-469c-ac27-1cfb7f37bfc4%2Fimage.png)
- 현재 input xt, 이전의 hidden state ht−1, a=Whhht−1+Wxhxt, parameter g,b로 위와 같이 normalize해준다
- gradient exploding/vanishing 문제를 완화하고 안정적인 값을 가져 더 빨리 학습시킬 수 있다
Feed Forward Neural Network
![](https://pozalabs.github.io/assets/images/Sample-of-a-feed-forward-neural-network.png)
- 각 input마다 fully-connected network를 지남
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F97e529e6-7da3-4057-b7cd-bd6e93671f27%2Fimage.png)
- linear transform -> ReLU -> linear tranform을 거쳐 score가 나온다
Decoder
구조
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F026ba8b7-62d5-41c7-9ba4-7e63dc72f809%2Fimage.png)
작동원리
![](http://jalammar.github.io/images/t/transformer_decoding_1.gif)
![](http://jalammar.github.io/images/t/transformer_decoding_2.gif)
- 최상위 encoder의 key, value가 decoder를 거쳐 output이 나온다
- initial output이 나오면 그걸 posidional encode해준 후 decoder에 넣어서 다음 output을 출력한다
이걸 decoder가 동작을 complete했다는 special symbol을 출력할 때까지 반복
Teacher Forcing
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F3e296e1b-b4af-41e0-9c70-bfbe0bc08c0c%2Fimage.png)
- Teacher Forcing: 훈련시에는 golden sentence, 즉 정답 문장이 있기 때문에 각 디코더에 ground truth를 넣어준다
입력을 ground truch로 넣어주면 더 정확한 예측이 가능하고, 학습속도도 빨라진다
- Exposure Bias Problem: 추론(inference) 단계에서는 ground truth를 사용할 수 없기 때문에 전 단계의 자신의 출력값을 기반으로 예측을 이어나가야 한다
이런 학습-추론단계에서의 차이(discrepancy)가 존재해 모델의 성능과 안정성을 떨어뜨릴 수 있다
하지만 노출편향이 생각보다 큰 영향을 미치지 않는다는 결과도 있다
Quantifying Exposure Bias for Neural Language Generation
(Masked) Self-attention
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F9555f376-db17-473e-8163-0392a0a6b0f5%2Fimage.png)
- Decoder에서 token을 기반으로 다음 단어를 추론할 때 뒤쪽 단어를 참고하는 것은 cheating
- 따라서 self-attention은 이전 단어들만 dependent하고 뒤쪽 단어들엔 independent하게 만들어줌
Add & Normalize
- Residual connection이랑 값을 normalize해주기 위해 사용
Encoder-Decoder Attention
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F8ddf9005-4bb7-46ea-aec2-9ce5353a099f%2Fimage.png)
- Encoder에서 나온 K, V와, decoder에서 target input을 이용해 첫 MHA에서 나온 Q를 MHA에 넣음
--> Q, K를 dot product해서 유사성을 찾기 위하여!
Train
Test
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F3c2440b4-61e7-415a-a8c9-f976d36f290d%2Fimage.png)
- 이미지 분류할 때 encoder만 활용
- NMT와의 차이: 문장 대신 이미지를 input으로 쓰기 때문에 이미지의 sub-patch를 만들어 linear layer를 통과시킨 결과를 하나의 입력인 것처럼 사용(positional encoding도 사용)
DALL-E
![](https://velog.velcdn.com/images%2Fhanlyang0522%2Fpost%2F81a583ac-2b46-4003-9167-06f78d9022f8%2Fimage.png)
- 문장을 주면 그에 맞는 image를 만들어냄
- decoder만 활용, image는 16x16 grid로 만들고, 문장도 단어들의 sequence로 집어넣는다고 함
- GPT-3를 이용