DL_general

attention과 self attention

홍시맛쿠키 2023. 3. 2. 12:06

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

transformer 내 encoder

- 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