attention과 self attention
attention 이전 - seq2seq
문제점
1. 하나의 고정된 크기의 벡터에 모든 정보를 압축하려고 하니까 정보 손실이 발생
2. 기울기 소실 문제 존재
-> 입력 문장이 길면 품질이 떨어지는 현상으로 나타남
attention의 motive
입력 sequence가 길어져도 출력 sequence의 정확도가 떨어지는 것을 보정해주자
attention의 아이디어
디코더에서 출력 단어를 예측하는 매 시점마다 인코더의 입력 시퀀스를 다시 참고한다.
이 때, 입력 시퀀스를 동일한 비중으로 참고하는 것이 아닌, 예측 단어와 관련이 있는 입력 단어를 더욱 치중해서 본다.
attention 함수
Attention(Q, K, V) = Attention value
Q = Query, K = Key, V = Value
주어진 Query에 대해 모든 key의 유사도를 각각 구한다.
이 유사도를 key와 매핑되어 있는 각각의 value에 반영하고, 유사도가 반영된 value을 모두 더해 return하고 attention value를 반환한다.
-> 유사도가 반영된 value를 모두 더한 것이 attention value?
https://velog.io/@sjinu/%EA%B0%9C%EB%85%90%EC%A0%95%EB%A6%AC-Attention-Mechanism
[개념정리] Attention Mechanism
Transformer의 기반이 되는 Attention 기법에 대해 정리한 글입니다.
velog.io
self attention
- position-wise FFNN = feed-forward network
- multi-head self-attention = multiple self-attention
- self attention = attention을 자기 자신에게 수행한다는 의미
Query, Key, Value
attention에서의
Q = t 시점의 디코더 셀에서의 은닉 상태
K = 모든 시점의 인코더 셀의 은닉 상태들
V = 모든 시점의 인코더 셀의 은닉 상태들
self attention에서의
Q = K = V입력 문장의 모든 단어 벡터들
self attention의 이점
입력 시퀀스에 대해 스스로 어텐션 과정을 거치면
하나의 문장 내에서 특정 단어들끼리의 유사도를 구함으로써 위와 같이 IT이 무슨 문장인지 또한 파악할 수 있게됨
https://velog.io/@sjinu/Transformer-in-Pytorch
[이론&코드] Transformer in Pytorch
Transformer의 각 구성 요소에 대한 이론적인 내용과, 그에 대응하는 pytorch 기반 code에 대해 작성한 글입니다.
velog.io