어텐션 - Dacon 정리

Sunghee Park·2023년 1월 29일
0

MLDL

목록 보기
6/6

어텐션

RNN 인코더-디코드

  • 번역기나 텍스트 요약과 같이 입력과 출력 문장의 길이가 다른 경우에 사용

  • 입력 문장의 정보가 하나의 컨텍스트 벡터로 모두 압축되면 인코더는 컨텍스트 벡터를 디코더로 전송합니다. 디코더는 컨텍스트 벡터를 받아서 번역된 단어를 한 개씩 순차적으로 출력합니다.

RNN에 기반한 seq2seq 모델 문제

  • 하나의 고정된 크기의 벡터에 모든 정보를 압축해야해서 정보 손실이 발생
  • RNN의 고질적인 문제인 기울기 소실 문제

⇒ 문장이 길면 번역 품질이 떨어짐

⇒ 입력 시퀀스가 길때 출력 시퀀스의 정확도가 떨어지는 것을 보정하기 위한 어텐션

1. Attention

  • 디코더에서 출력단어를 예측하는 매 시점마다, 인코더에서의 전체 입력 문장을 다시 한번 참고
  • 전체 입력 문장을 전부다 동일한 비율로 참고하는 것이 아닌, 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분에 더 집중해서 봄

1-1. 어텐션 함수

  • key-value 자료형
  • 어텐션 함수 :

Attention(Q, K, V) = Attention Value

  • 주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 구함

  • 구해낸 유사도를 키와 매핑된 각각의 '값(Value)'에 반영

  • 유사도가 반영된 '값(Value)'을 모두 더해서 리턴 ⇒ 어텐션 값이라고 함

  • seq2seq + 어텐션 모델에서 Q, K, V

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

1-2 닷-프로덕트 어텐션

(1) 어텐션 스코어

  • 인코더 시점 1,2,,,N

  • h1,h2,,,hN : 인코더 은닉상태

  • St : 디코더 은닉상태

  • 디코더의 현재 시점 t에서 필요한 입력값

    : 시점 t에서 출력 단어를 예측하기 위한 디코더의 셀은 두개의 입력값을 필요로 함 ⇒ t-1의 은닉상태t-1에서 나온 출력 단어

    ⇒ 어텐션 메커니즘은 출력 단어 예측에 Attention Value값도 필요함

  • 어텐션 값 at : t번째 단어를 예측하기 위한 어텐션 값

(at가 현재 시점 t에서 출력 예측에 어떻게 반영되는지)

at = 현재 디코더의 시점 t에서 단어를 예측하기 위해 인코더의 모든 은닉 상태 각각이 디코더의 현 시점의 은닉 상태 st와 얼마나 유사한지를 판단하는 스코어 값

ex) 닷 프로덕트 어텐션에서 at 구하기

st를 전치하고 각 은닉 상태와 내적을 수행 → 모든 어텐션 스코어 값은 스칼라

→ st와 인코더 i번째의 은닉 상태의 어텐션 스코어 계산

  • 어텐션 스코어 함수 정의

  • st와 인코더 모든 은닉 상태의 어텐션 스코어의 모음 값=et

et의 수식 :

#hi는 T시점마다 다른건가???

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

et에 소프트맥스 함수를 적용, 모든 값을 합하면 1이 되는 확률 분포를 얻음 ⇒ 어텐션 분포라고 함

⇒ 각각의 값은 어텐션 가중치라고 함

  • 소프트맥스 함수를 적용하여 얻은 출력값

I, am, a, student의 어텐션 가중치⇒ 각각 0.1, 0.4, 0.1, 0.4 가 됨(합 1)

디코더의 시점 t에서의 어텐션 가중치의 모음값인 어텐션 분포를 αt
이라고 할 때,

αt=softmax(et)

(3) 각 인코더 어텐션 가중치와 은닉 상태의 가중합으로 어텐션 값 구하기

  • 지금까지 준비해온 정보들을 하나로 합치는 단계 ⇒ 가중합을 진행하는 것
  • 어텐션의 최종 결과값을 얻기 위해 각 인코더의 은닉상태와 어텐션 가중치값들을 곱하고,
  • 최종적으로 모두 더함
  • 어텐션의 최종 결과 : 어텐션 함수의 출력값 at에 대한 식

  • 이러한 어텐션 at는 종종 인코더의 문맥을 포함하고 있다고 하여

컨텍스트 벡터라고도 불림

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

  • 어텐션 함수의 최종값인 at를 st와 결합하는 메커니즘
  • vt: at와 st를 결합해 하나의 벡터로 만드는 작업

⇒ vt를 yhat의 예측 연산의 입력으로 사용해 인코더로부터 얻은 정보를 활용해 더 정확한 예측 가능

(5) 출력층 연산의 입력이 되는 st계산

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

  • Wc : 학습가능한 가중치 행렬 bc : 편향

(6) st를 출력층의 입력으로 사용

st를 출력층의 입력으로 사용해 예측 벡터를 얻음

Reference : 딥 러닝을 이용한 자연어 처리 입문

0개의 댓글