Attention machanism

JunD·2023년 12월 29일

자연어처리(NLP)

목록 보기
4/10
post-thumbnail
  • 오늘 포스팅에선 기존 seq2seq의 장기 의존성 문제를 해결하고 최근 자연어처리에서 가장 관심을 많이 받는 어텐션(Attention)에 대해 정리하고자 한다.

이해하기도 어렵고 설명하기도 어렵다보니 차근차근 알아보도록 하자.

정보 정리, 그림 출처 : https://wikidocs.net/22893



1. Attention 의미

  • Attention이란 사전적 정의로는 '주의, 주목, 관심' 등의 의미로 정의 되어있다. NLP에서 말하는 attention도 사전적 정의와 비슷하다고 할 수 있다.

  • seq2seq의 기본 구조를 보면 기존에는 인코더와 디코더가 여러 RNN(셀)로 구성됨을 볼 수 있다. 하지만 이런 구조는 문제점이 존재한다.

    • RNN기반의 seq2seq 구조의 문제점
      • 기울기 소실(문장이 길 때, 번역 품질의 저하)
      • 하나의 고정된 크기 벡터(context vector)에 모든 문장의 정보를 압축하다보니 결과적으로 정보 손실 발생(= context vector 병목)
  • 따라서, 어텐션을 사용하는 이유는 입력 시퀀스 길이가 길 때 출력 시퀀스(예측한 시퀀스)의 정확도가 떨어지지 않도록 보장 해주기 때문


2. Attention 기본 아이디어

  • 그렇다면 어텐션을 어떻게 사용하는 것일까??

  • 어텐션의 아이디어는 아래와 같다.

    • 디코더의 한 셀에서 나올 단어를 예측할 때 인코더에 입력 되었던 전체 문장을 다시 한 번 참고하는 것!
      (예측할 단어와 연관이 있는 단어를 좀 더 집중해서 보는 것)

3. Attention value

어텐션이라는 게 어떤 건지 대충 느낌은 알 것 같다.
하지만 어찌됐든 어텐션을 사용하려면 예측 과정에서 은닉 상태와 함께 계산할 수 있는 어떤 값이 존재해야 활용할 수 있다는 정도는 인지할 수 있을 것 같다.

그럼 그 값을 어떻게 구하냐??

방금 말한 어떤 값이라는 게 attention value이다.
그림을 보고 Q,V,K의 각 의미에 대해서 설명하겠다.

  • Atttention value = Attention(Q, K, V)로 정의한다.

  • Q : Query (어떤 시점(t)일 때 디코더 셀에서의 은닉 상태) -> (인코더 - 디코더 어텐션인 경우)
  • K : key (모든 시점의 인코더 셀의 은닉 상태)
  • V : value (모든 시점의 인코더 셀의 은닉 상태)

  • 즉, attention value를 구하는 알고리즘은,

    1. 디코더에서 어떤 시점에서 나올 단어를 예측할 때, 그때 셀의 은닉 상태를 가져온다. (D_t로 명명)

    2. 모든 인코더 셀의 은닉 상태(h1,h2,h3....hn)를 가져와서 유사도(sililarity)를 구한 뒤

    3. key에 매핑 되어 있는 각기 다른 value에 유사도를 반영하고 그 값을 모두 더해서 반환(return)한다.

    이때 반환된 값이 attention value이다



4. 어텐션 연산 예시

  • 어텐션도 그 종류에 따라 구하는 여러 방법이 존재한다.
    • Self-attention
    • 마스크드 셀프 어텐션
    • Encoder-Decoder attention (교차 어텐션)
  • 이 중 인코더-디코더 어텐션을 예시로 어떻게 attention value를 산출하는 지 알아보자.

  • 위 그림은 디코더 3번째 셀이 etudiant 단어를 예측하는 과정을 보여준다.

림의 대략적인 과정은 아래와 같다.


(1) -> 예측 시점의 은닉 상태와 인코더의 모든 단어들의 정보(은닉 상태)를 사용

(2) -> 예측 시점의 은닉 상태와 인코더의 모든 단어의 은닉 상태 간 내적을 수행, softmax를 사용하여 확률 값을 산출한다.
(사각형의 크기 = 확률 값)

즉, i am a student의 모든 단어와 3번째 셀 출력 단어인 etudiant와의 연관성을 볼 수 있다는 것이고 보다 정확도 높은 단어를 예측할 수 있는 장점


4-1. attention 세부과정

  • attention score 산출
  • attention distribution와 attention weight 도출
  • attention value 산출

위 세부 과정을 순차적으로 살펴보도록 하겠다.


1) attention score

  • 디코더에서 예측하려는 시점의 은닉 상태를 S_t라고 하고, 인코더 셀의 모든 은닉 상태를 h1,h2,h3.....hn이라고 함

  • 인코더와 디코더의 벡터 dimension이 동일하다는 전재 하에 S_t를 transpose(전치) 처리를 해주고 모든 h1,h2,h3...hn과 각각 내적을 통해 총 n개의 어텐션 스코어를 산출한다. (위 예시에선 4개)

    모든 스코어 값은 스칼라 값


2) attention distribution

  • 이전 과정에서 얻은 attention score에 소프트맥스 함수를 적용하여 어텐션 확률 분포를 얻을 수 있다.

  • 분포에서 얻은 각 확률 값을 attention weight라고 한다.

디코더 t 시점에서의 어텐션 분포는 위와 같이 나타낼 수 있다.

a^t -> t시점 Attention weight,
e^t -> t 시점의 모든 attention score


3) attention value

  • 어텐션 가중치와 각 가중치에 해당하는 은닉 상태의 가중합(weighted sum)을 구하는데, 이게 바로 어텐션 값(attention value)가 되는 것이다.
  • 그림과 같이 attention value를 나타낼 수 있다.

어텐션 명칭 정리

  • attention score (= 정규화 전 Q, K 내적 값)
  • attention distribution(= softmax(attention score) = attention weight)
  • attention value (= sum(attention weight * V))

profile
Data Scientist & Data Analyst

0개의 댓글