본문 바로가기
기계학습/자연어 처리 머신러닝

어텐션 매커니즘 - 딥러닝을 이용한 자연어처리 입문

by tryotto 2020. 1. 28.

# 어탠션 매커니즘




- seq2seq 한계 :

1) 하나의 고정 길이의 컨텍스트 벡터로 압축 -> 정보 손실 발생

2) 원래의 시점으로부터 거리가 멀어질수록 기울기 소실 심화


- 어텐션 매커니즘의 기본 방식 :

    > 디코더에서 출력 단어를 예측할 매 시점마다, 인코더의 전체 문장 재참조

    >단, 전체 문장의 모든 부분 참조 X -> 연관있는 단어만 조금 더 attention 을 갖고 집중


- key-value 방식이란 : 

    > dictionary 자료형. 인덱스 값이 있고, 이에 대응되는 값이 매핑됨


- 어탠션 함수란

    > 식 : Attention(Q, K, V) = Attention Value

- Q : 쿼리

- K : key 값

- V : value 값

   > 쿼리가 주어진다면, 해당 쿼리값이 각각의 key 값들과의 유사도를 구한 뒤, 매핑되는 value 값에 반영해준다

   > 모두 value 값에 반영을 한 뒤엔, 총 value 값들을 합해준다.


- 닷 프로덕트 어텐션 (실제 어텐션 매커니즘의 진행방식)

    > 기본 : 디코더 셀에서 매번 하나의 단어를 출력할때마다, 인코더 셀에 있는 모든 값들을 반영해서 출력해야 한다

How? 각각의 인코더의 셀 값들은, 소프트맥스 함수를 거치게 된다.

        이때, 소프트맥스 함수를 거친 뒤의 각 값들은 출력 단어들을 예측하는데에 도움이 되는 정도를 수치화 한 것이다.

> 이 값들을 하나로 정리해서, 디코더에게 전송한다.

    > 기본 순서

1) 어텐션 값을 구한다

- 디코더의 각 셀에서 예측값을 출력하기 위해 입력받아야 하는 값

    1> 이전 디코더 셀의 은닉값

    2> 이전 디코더 셀의 출력값

    3> 어텐션 값

- 어텐션 값을 구하는 과정

1) 어텐션 스코어를 구한다 : 인코더의 각 셀에 있는 은닉상태들이, 현재 디코더 셀의 은닉상태와 얼마나 유사한지 구함

> 이 과정을 위해, 인코더의 은닉상태값과 디코더의 은닉상태 값을 내적 수행 해준다 (dot 연산)

2) 어탠션 분포를 구한다 : 어텐션 스코어 값들을 소프트 맥스 함수로 취해서 구함

> 이 값들을 일종의 "어텐션 가중치" 라고 할 수 있다

3) 가중 합을 구한다 : (어텐션 분포값) X (인코더 은닉상태 벡터값) = (가중 합)

> 이때, 가중합은 벡터 형식이며, 

   어텐션 매커니즘에서는 "컨텍스트 벡터"라고 불린다 (seq2seq 이랑 다른 의미임)

> 가중 합은 결국 어텐션 값을 의미한다. 즉, 어텐션 값을 이미 구했음

2) 구한 어텐션 값(벡터) 와, 디코더 층의 출력 벡터를 연결한다(concatenate)


- 어탠션 매커니즘의 종류

    > 구별 원리 : 어탠션 스코어를 구하는 과정에서 어떤 연산을 하는가?

    > 종류 :

1) dot

2) scaled dot

3) general

4) concat

5) location-base


- 바다나우 어탠션 매커니즘 : IMDB 텍스트 분류할때 사용함

     > 왜 텍스트 분류를 위해 어탠션 매커니즘 사용?

- 어탠션 매커니즘은 seq2seq 처럼, 문장을 출력할때 주로 사용하는 방식 아닌가?

- 이유 : 일반적인 RNN 의 경우, 맨 마지막에 있는 은닉상태만 활용하다보니 중요한 정보 소실되는 경우 발생

    > 따라서, 모든 은닉상태들을 참고하기 위해 어탠션 매커니즘을 활용