AI.ML

[NLP 스터디] 4주차 정리 - 15. Attention Mechanism

송다은 2023. 10. 3. 12:20
  • 기존 RNN에 기반한 seq2seq 모델의 2가지 문제점
    • 하나의 고정된 크기의 벡터에 모든 정보를 압축하려고 하니까 정보 손실이 발생
    • RNN의 고질적인 문제인 기울기 소실(vanishing gradient) 문제

→ 이를 보안한 기법 : Attention

어텐션 아이디어

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

어텐션 함수

  • 어텐션을 함수로 표현하면 아래와 같다.
    • Attention(Q, K, V) = Attention Value
    • Q = Query : t 시점의 디코더 셀에서의 은닉 상태
    • K = Keys : 모든 시점의 인코더 셀의 은닉 상태들
    • V = Values : 모든 시점의 인코더 셀의 은닉 상태들
      1. 주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 구함
      2. 구해낸 이 유사도를 키와 맵핑되어있는 각각의 '값(Value)'에 반영
      3. 유사도가 반영된 '값(Value)'을 모두 더해서 리턴 → attention value

→ t 시점의 디코더 셀에서의 은닉 상태와 모든 시점의 인코더 셀의 은닉 상태들의 유사도를 각각 구하여 인코더 셀에 반영하고 이 값을 모두 더한 값 : attention value

닷 - 프로덕트 어텐션

간략한 구조

  • 디코더의 3번째 LSTM 셀은 출력 단어를 예측하기 위해 인코더의 모든 입력 단어들의 정보를 다시 한번 참고할 예정.
  • 소프트맥스 함수를 통해 나온 결과값은 I, am, a, student 단어 각각이 출력 단어를 예측할 때 얼마나 도움이 되는지의 정도를 수치화한 값

닷 프로덕트의 순서

1) 어텐션 스코어를 구한다

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

  • 닷 - 프로덕트 어텐션에서는 위 스코어를 구하기 위해 디코더의 현 시점 은닉 상태를 전치(S T_t)하고 인코더의 은닉상태(h_i)와 내적을 수행한다 → 모든 스코어는 스칼라 값
  • 어텐션 스코어 함수를 정의하면 아래와 같다.

 

2) 소프트맥스 함수를 통해 어텐션 분포를 구한다.

  • 어텐션 분포 : e^t에 소프트맥스 함수를 적용 → 모든 값을 합하였을 경우 1이 되는 확률 분포를 얻음, 이를 어텐션 분포라고 함
  • 어텐션 가중치 : 어텐션 분포를 토대로 결정한 가중치
  • 어텐션 가중치의 모음값인 어텐션 분포를 a_t라고 할 때 정의한 식이다.

3) 각 인코더의 어텐션 가중치와 은닉 상태를 가중합하여 어텐션 값을 구한다.

  • 어텐션의 최종 결과값을 얻기 위해서 각 인코더의 은닉 상태어텐션 가중치 값들을 곱하고, 최종적으로 모두 더함
    • 이때 위에서 정의한 어텐션 값은? → t 시점의 디코더 셀에서의 은닉 상태와 모든 시점의 인코더 셀의 은닉 상태들의 유사도를 각각 구하여 인코더 셀에 반영하고 이 값을 모두 더한 값

4) 어텐션 값과 디코더의 t 시점의 은닉 상태를 연결한다.

  • 어텐션 값과 디코더의 현 시점 은닉 상태를 결합하여 하나의 벡터로 만듦 ⇒ v_t
    • v_t를 예측 연산의 입력으로 사용하여 인코더로부터 얻은 정보를 더 활용할 수 있음

5) 출력층 연산의 입력이 되는 s_t를 계산한다.

  • 가중치 행렬과 곱한 후에 하이퍼볼릭탄젠트 함수를 지나도록 하여 출력층 연산을 위한 새로운 벡터(s_t)를 얻음
  • 식은 아래와 같다.

 

6) s_t를 출력층의 입력으로 사용하여 예측 벡터를 얻는다.

바다나우 어텐션

  • 어텐션 함수의 Query가 디코더 셀의 t 시점의 은닉 상태가 아니라 t-1 시점의 은닉 상태임을 주목

Attention(Q, K, V) = Attention Value

t = 어텐션 메커니즘이 수행되는 디코더 셀의 현재 시점을 의미.

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

  • 바다나우 어텐션 연산 순서

1) 어텐션 스코어를 구한다.

W_a, W_b, W_c는 학습 가능한 가중치 이다.

아래는 각각 W_c와 W_b이다.

각 은닉 상태를 가중치 행렬과 곱한 후 나온 결과를 더하여 하이퍼볼릭탄젠트 함수를 지나도록 한다.

가중치 행렬의 전치행렬(W_a의 전치행렬)과 곱하여 디코더의 은닉상태와 인코더의 은닉상태의 유사도가 기록된 어텐션 스코어 벡터 e_t를 얻는다.

 

 

2) 각 인코더의 어텐션 가중치와 은닉 상태를 가중합하여 어텐션 값을 구한다.

e_t에 소프트맥스 함수를 적용하여 모든 값을 합하면 1이 되는 확률 분포를 얻는다. → 어텐션 분포 얻고 이때 각각의 값이 어텐션 가중치이다.

3) 각 인코더의 어텐션 가중치와 은닉 상태를 가중합하여 어텐션 값을 구한다.

 

각 인코더의 은닉 상태와 어텐션 가중치값들을 곱하고, 최종적으로 모두 더하고 이는 인코더의 문맥을 포함하고 있다고 하여 컨텍스트 벡터라고 부른다.

 

4) 컨텍스트 벡터로부터 s_t를 구한다.

컨텍스트 벡터와 현재 시점의 입력인 단어의 임베딩 벡터를 연결(concatenate) → 현재 시점의 새로운 입력으로 사용

이전 시점의 셀로부터 전달받은 은닉 상태와 현재 시점의 새로운 입력으로부터 s_t를 구함