-
Attention is just calculated by dot product!
- hidden state 간의 weighted sum! = attention 개념
-
L4 loss를 가장 줄일 수 있는 h1, h2, h3 형태는 무엇일까? S4 랑 h2랑 만났을 때
-
어떤 단어를 가깝게 놓도록 선형 변환 해야 좋을까?
- 하지만 기존 RNN+Attention은 encoder 쪽( 갈 수록 흐려지는 정보에) attention 하고 decoder 파트는 여전히 멀수록 잊혀진다. h1,2,3에 차곡 차곡 정보를 쌓지만 x1와 같은 앞단의 정보는 갈수록 잊혀질 것!
- —> self-attention으로 해결!
거리에 대한 문제점이 해결됨! attention을 self로도 사용하자
하지만 decoder에서 미래 단어와의 attention은 컨닝이므로 제외!
-
query 랑 key랑 내적
- weighted sum을 통해 가중치가 큰 key의 정보를 갖음
- 양수로 만들기 위해 exp()
- 각 전체 weight합으로 normalize 해서 전체 합이 1이 되게 만듬
- =softmax(QK^T)
-
위 가중치로 value랑 weighted sum = attention 결과는 key 의 가중치 합 이면서 간접적으로나마 query에 정보도 반영 = 왜냐면 가중치가 query와 만들어진 것이기 때문
- 왜냐면 value 값은 key에 v를 통과시킨 값이기 때문
- 같은 문장 내에서 (key)에서 문맥(순서)을 이해하기 위해 positional encoding (단어 순서마다 포스트잇 벡터를 붙여 주는 것!) —> 다음으로 h_new 계산방식과 같은 self attention 활용
-
Transformer의 동작/학습 + Masking
- 첫번째 단어부터 차근차근 예측 (4번째 단어는 뭘까? 라는 식으로 예측 불가) = n 번째 단어를 예측 할때는 n-1단어까지 decoder에 input으로 넣음
- 그래서 첫번째 단어로는 약속된 단어 start of sequence = sos 를 넣고 완성 후에 빼버림, end of sequence도 마찬가지 = 번역을 종료하도록
- ~n-1 단어를 넣어서 n 단어를 예측 하는 방식으로 학습 시킴
- 단어 길이 만큼 넣고 한칸씩 미는 방식으로 단어예측을 한번에 병렬 학습 가능
- 학습 할 때 미래단어를 안 쓰기 위해서 뒤 단어 쓰지 않음 = masking
-
Multi-head attention: attention 의 의미/중요도가 사람마다 다를 수 있음
- 그래서 서로 다른 사람의 시선으로 앙상블 하는 느낌
-
Masked Multi-headed attention
- 실제 문장 예측을 해야되니까 뒷 단어에 masking(-inf) 를 주어서 모델에 입력하는 것
-
Encoder-decoder attention
- 똑같은 MHA 를 사용하되 Q로는 해당 decoder layer에서 얻은 임베딩 벡터를 KV는 마지막 encoder layer의 출력 임베딩 벡터를 사용!
- 다음 단어가 뭐가 출력되야 되는지 출력문장의 Q로 물어보고 입력문장의 KV를 보고 알아냄
-
Positional Encoding
- 토큰의 순서 정보도 반영해서 encoding 하자
- 위치 정보를 조금만 고려하게끔
- 단어 임베딩 벡터에 * root(512) + 위치 임베딩