본문 바로가기

* [R_Python] 데이터분석 정리/[Python] 딥러닝

Attention

- Attention을 이해하기 위해선 기존 seq2seq 메커니즘에 대해 이해하면 좋음
 
※ Seq2Seq : - 입력된 시퀀스 데이터로부터 다른 도메인의 시퀀스 데이터를 출력하고자 할 때 주로 사용
    ex) 번역기, 이미지 캡셔닝 등 
   - 구조는 인코더-> 컨텍스트 벡터 -> 디코더를 갖는 구조로 되어있으며, 
      인코더 디코더에선 주로 RNN계열의 LSTM, GRU가 사용됨
[seq2seq 구조]

그림출처 : https://velog.io/@nkw011/seq-to-seq

 
- Seq2Seq 에서 크게 2가지 단점때문에 이를 보완하고자 Attention이 대안으로 등장
※ 기존 Seq2Seq의 단점
(1) 정보 손실 : 인코더 -> 컨텍스트 벡터로 가면서 정보 함축됨. 이로 인한 정보 손실
(2) RNN을 사용하므로써 발생할 수 있는 문제 : 기울기 소실 - RNN의 고질적 문제,
     가장 최근 단어를 기억하는데 특화 되어 문장이 길어지면 앞에 내용을 잃어버릴 수 있음
 
 
ㅁ Attention의 주요 아이디어
- Transformer(Attention is all you need) 의 기반이 되는 매커니즘
- Attention은 출력 단어를 예측할 때, 인코더에서 입력된 전체 문장을 참고하면서, 중요한 단어에 집중(Attention)함
 
 
ㅁ Attention 메커니즘
(현재 문제 가정) 
- I am a student를 입력 ▶ je suis 는 이미 출력된 상태
- etudiant를 예측해야하는 상황 

\\\

(1) 인코더에서 각 시점당 임베딩 벡터를 입력으로 받음
- 임베딩 벡터를 받는다는 것은 기존 어휘사전에 있는 다른 단어들과 연관성 정보를 입력 받는다는 의미로도 볼 수 있음
- LSTM에서 각 셀은 t-1(이전)시점의 은닉상태와,
    t(현재시점)의 입력 벡터(ex.임베딩벡터) 를 입력으로 받아서 t(현재시점)의  은닉 상태 생성 
 
 
(2) Attention Score를 구함
- 인코더의 모든 은닉상태와 디코더의 현재 은닉상태가 얼마나 유사한지 구하는 값
- 문맥적, 단어간 유사성을 판단할 수 있는 것 같음. 
   ( 디코더 t시점의 단어(etudiant)를 예측에 필요한 점수이며,
     인코더의 모든 은닉 상태 (i, am, a, student의 hidden state)가 
     현 시점의 은닉 상태 (suis를 입력 후 나온 hidden state)와 얼마나 유사한지 판단하는 값) 

 
※ 유사도를 구하는 방법에 따라 어텐션 이름이 달라짐
   디코더, t시점 은닉상태 X 인코더 각각의 은닉상태(를 내적하여 유사도 계산 → 닷-프로덕트 어텐션
 
- Attention Score를 구할 때 사용하는 값들을 지칭하는 용어가 있음
  → Query, Key, Value 임 (여기서 Key, Value는 일반 Dictionary 자료 구조 형태와 동일한 형태임)
  ※ Query : 한 마디로 "디코더의 현 시점 은닉상태(the current hidden state of the decorder)"라고 볼 수 있음. 
  ※ Key :  인코더의 모든 시점의 은닉 상태
  ※ Value : 인코더의 모든 시점의 은닉 상태
 
 
 

 

(3) softmax함수를 통해 Attention 분포를 구함

(4) 인코더의 "어텐션 가중치"와 은닉 상태 가중합으로 어텐션 값 구함

 

 

→ Query, Key, Value는, 각 입력 벡터 시퀀스에 쿼리, 키, 밸류를 만들어주는 행렬(가중치 행렬)을 곱해서 나온 결과 값.
 
(5) 어텐션 값과 디코더 t (현재)시점의 은닉 상태를 Concate함
 

05

(6) 출력하기 전, Concate한 값을 한 번더 신경망에 보낸 후, 하이퍼볼릭 탄젠트를 통과

 

(7) (6)의 결과값을 출력층의 입력으로 사용한 뒤 , softmax를 씌워 예측 벡터를 얻음

 
 
 
https://ratsgo.github.io/nlpbook/docs/language_model/tr_self_attention/

Self Attention

pratical tips for Natural Language Processing

ratsgo.github.io

https://d2l.ai/chapter_attention-mechanisms-and-transformers/attention-scoring-functions.html