(08강) Sequential Models - Transformer
Last updated
Last updated
Further Reading
Further Questions
Pytorch에서 Transformer와 관련된 Class는 어떤 것들이 있을까요?
N개의 단어가 인코더에서 어떻게 한번에 처리가 되는지
인코더와 디코더 사이에 주고받는 정보
디코더가 어떻게 Generate(생성) 하는지
Encoder의 1개 Layer를 살펴보면 위 그림과 같다. Self-Attention과 Feed Forward Neural Network로 구성되어있다.
Self-Attention은 한 개의 단어에 대해서 다른 단어와의 관계까지 고려하는 것이 핵심이다.
각 단어마다 Query, Key, Value 3개의 벡터를 만들고
대상 단어의 Query와 나머지 각 단어의 Key를 내적한 Score 벡터를 각각 구한다.
Dimention의 크기(Key 벡터의 차원)로 나눠준다. 이는 값이 너무 커지지 않게 하기 위함이다.
Softmax -> Attention Weight
Value 벡터와 Weighted Sum 한 값이 최종 encoding vector가 된다.
❓왜 Transformer가 추정이 잘 될까?
CNN, MLP를 할 경우 Input이 Fix되면 Output도 Fix 된다.
Transformer는 Input이 Fix되더라도 주위의 단어에 따라 Output이 달라진다.=> Flexible 하여 더 많은걸 표현하게 된다.
❕ check
n개의 단어가 주어지면 nxn개의 Matrix가 필요하고 이를 한번에 처리할 수 있어야한다.
✔ Multi-headed Attention (MHA) 위 single-attention의 과정을 n번 진행하는 것이다. 하나의 encoding된 vector에 대해 n개의 query, key, value vector를 만드는 것. 이 논문에서는 8개의 attention head를 가진다.
동일한 seq가 주어지더라도 다른 기준으로 여러 지표를 뽑아와야할 필요가 있을 수 있다. 예를 들어 "나는 학교에서 공부를 했다." "나는 집에 와서 휴식을 취했다." 라는 문장이 있을 때 "나"에 대해 위치정보(학교, 집)의 정보가 중점이 될 수 있고, 행동("공부", "휴식")의 정보가 중점이 될 수 있다.
생성된 8개의 head-attention을 concat하여 합치고 이를 원하는 출력의 차원으로 선형변환하는 를 행렬곱을 하여 Z를 구해낸다.
학습 단계에서는 마스킹하는 작업을 하여 미래의 정보를 사용하지 않도록 한다.