수영장의 수영_데이터 분석 블로그

[NLP] 07. Attention Mechanism 본문

Goorm 자연어처리 전문가 양성 과정 2기/NLP

[NLP] 07. Attention Mechanism

슈빔멘 2022. 1. 16. 17:08

seq2seq

인코더 - 디코더로 이루어져 있는 모델로, 앞서 배운 RNN에 기반한 모델로 볼 수 있음

 

1. 입력 시퀀스를 인코더가 받는다

2. 인코더를 거쳐 컨텍스트 벡터라는 고정된 크기의 벡터로 압축한다

3. 디코더를 거쳐 컨텍스트 벡터를 출력 시퀀스로 반환한다

 

-> 컨텍스트 벡터는 하나의 고정된 벡터기 때문에 모든 정보를 압축하기 어렵다

-> 기울기 소실 문제에서 자유롭지 못하다

=> 곧 어텐션의 기본 아이디어가 됨

 

 

Attention 기본 아이디어

- 어텐션은 쿼리(Query), 키(Key), 값(Value) 세 가지로 구성된다

- 디코더에서 출력 단어를 예측하는 매 time step마다, 인코더의 전체 입력문장을 다시 참고한다

- 특히 전체 입력문장 중에서도, 출력할 단어와 연관성이 높은 단어를 더욱 집중해서 참고한다

 

Attention(Q, K, V) = Attention Value

 

Q = Query : t 시점의 디코더 셀에서의 은닉 상태
K = Keys : 모든 시점의 인코더 셀의 은닉 상태들
V = Values : 모든 시점의 인코더 셀의 은닉 상태들

 

-> 예를 들어, t 시점에서는 'I am' 다음에 올 단어 'student'를 예측해 출력해야한다고 가정하자

-> 어텐션의 종류는 다양하지만 가장 기본적인 닷-프로덕트 어텐션을 공부해보겠음

 

- 닷-프로덕트 어텐션

1) Attention Score 계산하기

어텐션 스코어 : 디코더 내 현재 시점 t에서 단어를 예측하기 위해, 인코더의 모든 hidden state 각각과 디코더의 현 hidden state의 유사도를 판단하는 스코어

 

- 디코더 은닉 상태 : St

- 인코더 은닉 상태 : h1 ~ hn

 

=> 인코더의 각 시점 별 은닉 상태를 디코더의 은닉상태와 dot product 해준다

=> 어텐션 스코어 모음 값을 et에 저장한다

Attention Score 모음값

 

2) Attention Distribution 계산하기

softmax를 적용해 어텐션 분포를 얻는다

 

어텐션 분포 : 어텐션 스코어에 소프트맥스 함수를 적용시킨 확률 분포

 

-> e^t에 소프트맥수를 걸어 0~1 사이값이 되는 확률 분포를 얻어낸다

-> 이 때 각 값의 총 합은 1이된다

-> 각 값은 어텐션 가중치(Attention Weight)라고 부른다

Attention Distribution

 

3) Attention Value 계산하기

어텐션 값 : 지금까지 계산한 어텐션의 최종 결과로, 인코더의 문맥(정보)를 담고 있다 하여 Context Vector로도 불린다

 

Weighted Sum (가중합)

-> 각 인코더 hidden state (h1 ~ hn)와 어텐션 가중치 값들을 곱한다

-> 곱한 값들을 모두 더한다

=> 이 값이 Attention Value가 된다

Attention Value

 

4) Attention Value와 디코더의 은닉 상태(t)를 연결하기

 

- 어텐션 값을 통해 인코더의 input 문장 중 어떤 부분을 집중(attention)할 지 알 수 있게 되었다

- 이제 이 어텐션 값은 쿼리에 해당하는 디코더의 hidden state와 연결해준다 (concatenate)

 

=> 이렇게 반환된 Vt는 디코더에서 그 다음 단어를 예측하는 task의 입력 값으로 사용된다

=> 이 때 바로 Vt를 출력층에 입력하는 것이 아니라, 신경망 연산을 한 번 거쳐서 input한다

 

=> 가중치 행렬과 Vt를 곱한 뒤 tanh 함수를 씌운다

=> 최종 출력층 input st~을 반환하게 된다

 

가중치 행렬 Wc의 크기 : (hidden state 크기, hidden state 크기 * 2)

Vt의 크기 : (hidden state 크기 * 2, 1)

 

 

5) 예측 벡터를 출력해내기

=> 최종적으로 소프트맥스 함수에 가중치/편향을 걸어주면 예측 벡터가 출력된다

 


Attention 종류

깍 많다

트랜스포머 모델에서 scaled dot Attention이 사용되고, 바다나우 (concat) 어텐션도 종종 봤다

나머지는,, 나중에 필요하면 공부해야지 머