[NLP/자연어처리] Seq2Seq(2) - 어텐션 매커니즘(Attention Mechanism)

2021. 5. 24. 17:13·AI Study/NLP
목차
  1. 0. 기본 Seq2Seq 에서의 단점
  2. 1. 어텐션(Attention)함수
  3. 2. Attention 매커니즘 방법
반응형

2021.05.24 - [Study/NLP] - [NLP/자연어처리] Seq2Seq(1) - RNN을 이용한 시퀀스 투 시퀀스

 

[NLP/자연어처리] Seq2Seq(1) - RNN을 이용한 시퀀스 투 시퀀스

이전 RNN, LSTM, GRU에 대한 글을 보려면 아래 참조 2021.05.20 - [Study/NLP] - [NLP/자연어처리] 순환신경망 (Recurrent Neural Network, RNN) [NLP/자연어처리] 순환신경망 (Recurrent Neural Network, RNN) 해..

everywhere-data.tistory.com


해당 글은 딥러닝을 이용한 자연어 처리 입문 의 내용을 바탕으로 정리한 내용이며, 시각적인 자료로 Jay Alammar의 블로그를 첨부했습니다.

 

0. 기본 Seq2Seq 에서의 단점

앞의 글에서 배운 seq2seq 모델은 인코더를 통해 나온 마지막 hidden state값을 context 벡터로 두고 해당 벡터를 디코더에 입력함으로 출력 시퀀스를 만들어내는 과정이었다. 이러한 RNN에 기반한 seq2seq모델에는 문제점이 두가지가 있었는데, 하나의 고정된 크기의 벡터에 모든 정보를 압축하려고 하니 정보 손실이 발생한다는 점, RNN의 고질적인 문제인 기울기 소실(Vanishing Gradient) 문제였다. 

즉, 기계번역 분야에서 입력 문장이 길어지면 번역 품질이 떨어지는 현상을 나타냈다. 이를 위한 대안으로 어텐션(Attention) 매커니즘이 발표되었다.

1. 어텐션(Attention)함수

어텐션의 기본 아이디어는 디코더에서 출력 단어를 예측하는 매 시점(time step)마다, 인코더에서 전체 입력 문장을 다시 한번 참고한다는 점이다. 그러나 전체 입력 문장을 동일한 중요도로 참고하는 것이 아니라 해당 시점에서 예측할 단어랑 연관있는 입력 단어 부분에 더 가중치를 주어 참고할 수 있는 것이다. 

어텐션에는 Q(Query), K(Key), V(Value)를 기준으로 설명을 하게 되는데, 그림으로 표현하면 다음과 같다. 

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

어텐션을 함수로 표현하면 Attention(Q, K, V) = Attention Value로 표현할 수 있다. 오늘 배우는 seq2seq + 어텐션 모델에서 Q, K, V의 정의는 다음과 같다.

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

어텐션 함수도 다양한 종류가 있는데, 오늘은 가장 유명하고 널리 알려져 있는 루옹 어텐션 함수에 대해서 알아보고자 한다. 우선 간단한 시각화 영상을 보면 아래와 같다. 

 

출처 : Jay Alammar

위의 동영상의 내용처럼 인코더 블럭에 나온 hidden state가 다음 encoder cell에만 전해지는게 아니라 전체 hidden state가  context vector로 decoer에 입력으로 들어간다. 디코더의 매 시점마다 비슷한 과정이 이루어져 결과값을 예측힌다. 전체적인 어텐션 메커니즘에 대해 상세히 알아보자

2. Attention 매커니즘 방법

 

어텐션 매커니즘에 대해 상세히 알아보도록 하자. 

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

동영상을 기준으로 인코더의 시점이 각각 1, 2, 3이라고 했을 때 인코더의 hidden state를 각각 $h_1, h_2, h_3$이라고 하자. 디코더의 현재 시점 $t_4$에서 나오는 hidden state가 있다고 하자. 둘의 은닉 상태의 차원은 동일함을 가정하자. 

decoder hidden state로 나온 값의 transpose한 값과, encoder의 각 시점의 hidden state를 곱해서 Attention Score를 구한다. 어텐션 스코어 함수를 정의해보면 다음과 같다. 

$$ attention score(s_t, h_i) = s_t^Th_i $$

$s_t$ 와 인코더의 모든 은닉 상태의 어텐션 스코어의 모음값을 $e^t$라고 정의하면 $e^t$의 수식은 다음과 같다. 

$$e^4 = [s_4^T, h_1, s_4^T, h_2, s_4^T, h_3] $$

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

$e^4$ 벡터에 소프트 맥스 함수를 적용해서, 모든 값을 합하면 1이 되는 확률분포를 얻어낸다. 이를 어텐션 분포(Attention Distribution)이라고 하며, 각 값을 Attention Weight 이라고 한다. 이를 수식으로 나타내면 아래와 같다. 

$$ \alpha^t = softmax(e^t)$$

 

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

각 어텐션의 Encoder hidden state의 값과 sofmax를 거친 어텐션 가중치값들을 곱하고, 최종적으로 모두 더해 context vector를 생성한다. 요약하면 가중합을 한다고 할 수 있다. 그러면 최종적인 Attention Value가 된다. Context Vector라고도 한다. (앞에서 말했던 seq2seq의 인코더 마지막 은닉상태를 말하는 context vector랑은 의미가 다르다.)

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

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

어텐션 값, 즉 context vector를 구해 디코더 t시점의 hidden state와 concat하여 하나의 벡터로 만든다. 이를 다음 시점(또는 최종 출력값) 연산의 입력으로 사용함으로써 인코더로부터 얻은 정보를 활용하여 다음 시점을 더 잘 예측할 수 있게된다. 그 다음으로 fully connected 함수를 사용하여 입력할 때의 차원 수와 맞춰주어야 한다. 

 

초반 어텐션 매커니즘은 RNN기반의 seq2seq성능을 보장하기 위한 목적으로 소개되었지만, 현재는 어텐션 스스로가 기존의 seq2seq를 대체하는 방법이 되어가고 있다. 그걸 self-attention이라고 하는데, transformer 부분에서 자세히 다룰 예정이다.

반응형

'AI Study > NLP' 카테고리의 다른 글

[NLP/자연어처리] Seq2Seq4 - 트랜스포머(Transformer)_Decoder  (0) 2021.05.26
[NLP/자연어처리] Seq2Seq(3) - 트랜스포머(Transformer)_Encoder  (0) 2021.05.26
[NLP/자연어처리] Seq2Seq(1) - RNN을 이용한 시퀀스 투 시퀀스  (0) 2021.05.24
[NLP/자연어처리] LSTM(Long Short-Term Memory), GRU(Gated Recurrent Unit)  (0) 2021.05.21
[NLP/자연어처리] 순환신경망 (Recurrent Neural Network, RNN)  (0) 2021.05.20
  1. 0. 기본 Seq2Seq 에서의 단점
  2. 1. 어텐션(Attention)함수
  3. 2. Attention 매커니즘 방법
'AI Study/NLP' 카테고리의 다른 글
  • [NLP/자연어처리] Seq2Seq4 - 트랜스포머(Transformer)_Decoder
  • [NLP/자연어처리] Seq2Seq(3) - 트랜스포머(Transformer)_Encoder
  • [NLP/자연어처리] Seq2Seq(1) - RNN을 이용한 시퀀스 투 시퀀스
  • [NLP/자연어처리] LSTM(Long Short-Term Memory), GRU(Gated Recurrent Unit)
자동화먹
자동화먹
많은 사람들에게 도움이 되는 생산적인 기록하기
자동화먹의 생산적인 기록많은 사람들에게 도움이 되는 생산적인 기록하기
    반응형
  • 자동화먹
    자동화먹의 생산적인 기록
    자동화먹
  • 전체
    오늘
    어제
    • 분류 전체보기 (144)
      • 생산성 & 자동화 툴 (30)
        • Notion (24)
        • Obsidian (0)
        • Make.com (1)
        • tips (5)
      • Programming (37)
        • Python (18)
        • Oracle (6)
        • Git (13)
      • AI Study (65)
        • DL_Basic (14)
        • ML_Basic (14)
        • NLP (21)
        • Marketing&Recommend (4)
        • chatGPT (0)
        • etc (12)
      • 주인장의 생각서랍 (10)
        • 생각정리 (4)
        • 독서기록 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    GPT
    Transformer
    데이터분석
    gcp
    머신러닝
    노션
    pytorch
    cnn
    빅데이터
    nlp
    자연어처리
    dl
    notion
    기초
    딥러닝
    seq2seq
    노션첫걸음
    Jupyter notebook
    Google Cloud Platform
    LSTM
    데이터베이스
    ML
    파이토치
    git commit
    Python
    파이토치로 시작하는 딥러닝 기초
    python기초
    git
    빅데이터분석
    Github
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
자동화먹
[NLP/자연어처리] Seq2Seq(2) - 어텐션 매커니즘(Attention Mechanism)

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.