[딥러닝 모델] 어텐션(Attention)

박나연·2022년 5월 8일
0

https://wikidocs.net/22893

어텐션 등장의 배경

RNN을 기반으로한 언어 모델에서 크게 두가지 문제가 발생했는데, 먼저 하나의 고정된 크기 벡터에 모든 정보를 압축하려고 하니 정보손실이 발생한다는 점과, 기울기 소실(Vanishing Gradient)문제가 발생한다는 것이다. 이를 해결하기 위해 어텐션이 등장했다.

어텐션은 디코더에서 출력단어를 예측하는 매시점마다, 인코더에서의 전체입력문장을 다시 한번 참고한다. 이때 현재 예측해야할 단어와 연관이 있는 입력단어 부분을 좀 더 집중해서 보게 된다.

어텐션 함수

Attention(Q, K, V) = Attention Value

어텐션을 함수로 표현하면 위와 같은데, 먼저 주어진 '쿼리'에 대래서 모든 '키'와의 유사도를 각각 구한다. 구한 유사도를 키와 맵핑되어 있는 각각의 '값'에 반영해준다. 그리고 유사도가 반영된 '값'을 모두 더해서 리턴한다.(어텐션 값)

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

닷-프로덕트 어텐션(Dot-Product Attention)

위 그림은 디코더의 세번재 LSTM셀에서 출력 단어를 예측하고자 할때 어텐션을 사용하는 모습이다. 인코더의 소프트맥스 함수를 통해 각 단어들이 출력 단어를 예측할때 얼마나 도움이 되는지를 수치화 한 값을 도출하게 된다. 그림에서는 빨간 직사각형의 크기로 소프트맥스 함수의 결과값의 크기를 표현하고 있다. 이렇게 각 입력단어가 디코더의 예측에 도움이 되는 정도가 수치화하여 측정되면 이것을 하나의 정보로 담아서 디코더로 전송하게 된다. 위 그림에서는 초록색 삼각형이다.

1. 어텐션 스코어(Attention Score) 구하기

인코더의 은닉상태(hidden state)를 각각 h1, h2, ... hn이라 하고, 디코더의 현재 시점 t에서의 은닉상태(hidden state)를 st라고 한다. 그리고 t번째 단어를 예측하기 위한 어텐션 값을 at라 정의한다. 이 at를 구하기 위해서 먼저 어텐션 스코어를 구하게 되는데, 어텐션 스코어란 현재 디코더의 시점 t에서 단어를 예측하기 위해, 인코더의 모든 은닉 상태 각각디코더의 현 시점의 은닉상태 st와 얼마나 유사한지를 판단하는 스코어값이다.

닷-프로덕트 어텐션에서는 이 스코어값을 구하기 위해서 st를 전치하고 각 은닉 상태와 내적을 수행한다.

어텐션 스코어 함수

st와 인코더의 모든 hidden state의 모음값 et


2. 소프트맥스(softmax)함수를 통해 어텐션 분포를 구하기

et에 소프트맥스 함수를 적용해서, 모든 값을 합하면 1이 되는 확률 분포를 얻어낸다. 이를 어텐션 분포라고 하고, 각각의 값은 어텐션 가중치하고 한다.

어텐션 분포를 알파 t 라고 할때 이것을 식으로 정의한 것이다.


3. 각 인코더의 어텐션 가중치와 hidden state를 가중합하여 어텐션값(Attention Value) 구하기

지금까지 준비한 정보들을 하나로 합치는 단계이다. 각 인코더의 hidden state와 어텐션 가중치들을 곱하고 최종적으로 더하는 과정이며 weighted sum을 진행하는 것이다.

이 어텐션 값은 종종 인코더의 문맥을 포함하고 있따고 해서 context vetor라고도 한다.


4. 어텐션 값과 디코더의 t시점의 은닉상태 연결하기(concatenate)

최종적으로 구한 어텐션값 at를 st와 결합하여 하나의 벡터로 만드는 작업을 수행한다. 이를 vt라고 정의하고, 이 vt를 yhat 예측연산의 입력으로 사용함으로써 인코더로부터 얻은 정보를 활용하여 더 잘 예측할 수 있게 된다.

5. 출력층 연산의 입력이 되는 s~t(틸데기호)를 계산하기

vt를 바로 출력층으로 보내기 전에 신경망 연산을 한번더 추가했다. 가중치 행렬과 곱한 후 에 하이퍼볼릭탄젠트 함수를 지나도록 하여 출력층 연산을 위한 새로운 벡터인 st를 얻는다.

6. s~t(틸데기호)를 출력층의 입력으로 사용하기

profile
Data Science / Computer Vision

0개의 댓글