Posts List

[머신러닝/딥러닝] 10-2. Attention in RNN-Encoder-Decoder

Attention in RNN-Encoder-Decoder

Attention 모델이란?

앞서 배웠던 Encoder-Decoder 구조를 살펴보자.

일단 Encode, Decode란 말부터 이해해보자.

먼저, Encode란 말은 '암호(code)화 하는 행위' 라고 할 수 있고, Decode는 당연히 암호(code)를 푸는 행위다. 

그럼 RNN에서 Encode, Decode는 무슨 의미를 가질까? 
위 그림에서 'I love you'의 입력은 RNN을 거치면서 암호화 된다. 이 암호화된 벡터를 RNN에서는 Context Vector(혹은 thought vector)라 한다. 그리고 Decoder는 Context vector를 보고 '나는 널 사랑해'의 형태로 암호를 풀어야 하는 입장이다.

이렇게 Encode-Decode 과정으로 문장을 번역했을 때 2가지 문제가 발생한다.

  • 어찌됐든 1개의 벡터로 문장을 표현하기 때문에 정보의 손실이 발생한다.
    (CNN에서 convolution을 통해 down sampling 되는 것과 비슷한 느낌)

  • LSTM에서 어느정도 해결했다곤 하지만, RNN의 고질적인 문제인 vanishing gradient는 여전히 존재한다.

위 같은 문제점 때문에, 기계 번역 분야에서 입력 문장이 길며 길 수록 품질이 떨어지는 문제가 나타났다. 이것을 보정하기 위해 제안된 기법이 바로 Attention이다.

Attention의 기본 아이디어는 decoder에서 단어를 출력할 때 마다 입력 sequence를 한번씩 참고하는 것이다. 예를 들면 위 그림에서는 '너'를 예측하기 위해 'I', 'love', 'you'를 한번씩 참고하면서 연관성이 있는 단어가 있는지 집중(attention)하는 방법이다. 그 원리를 한번 살펴보자.

Attention의 원리

일반적인 Encoder-Decoder RNN의 context vector는 마지막 hidden state가 그대로 Decoder에 입력됐었다. Attention 기법context vector를 encoder 각 state의 convex sum로 표현한 것이 핵심이다.

위 그림을 바탕으로 Attention 기법의 원리를 살펴보자.

  • Encoder의 hidden state h1, h2, h3...를 구해둔다.

  • Decoder의 hidden state와 Encoder의 hidden state의 Attention score α를 구한다.
    ※ α가 크다는 것은 Decoder이 hidden state와 Encoder의 hidden state와이 관계가 강하다는 뜻이다. 
    ※ α들의 합은 1이 되도록 softmax 취한다.
  • Encoder의 hidden stateAttention score를 곱하여 Context vector를 계산한다.

  • 여기까지 과정으로 각 Context vector를 구했다면 이제 Decoder에서 활용할 일만 남았다.

  • y_t를 예측하기 위해 s_t-1, y_t-1, c_t가 필요하다.

  • 여기서 c_t는 s_t-1과 h_t간의 amount of well matched의 벡터라고 할 수 있다.

  • 즉, st는 yt를 예측하기 위해 ht'에 얼마나 주목(attention)할 것인가를 반영한다는 뜻이다.
※ 이 때 비교 기준인 s_t-1을 Query, 비교 대상인 h들을 Key, 그리고 출력되는 값을 Value라고 한다. Transformer model에서 다시 한번 다루도록 한다.

위 같은 특징 덕분에 Attention 기법은 다소 긴 문장이더라도, attention score를 통해 잘 예측할 수 있는 성능을 보인다.  

지금까지는 이해를 돕기 위한 그림을 사용했는데, 논문에서는 아래와 같이 표현하기도 한다.

위 그림은 Je를 예측하기 위해 context vector를 확인해보니, 'I'의 attention score가 0.5로 가장 높은 것을 확인하는 모습을 보여준다.

그리고 위 그림은 각 단어를 예측할 때 어떤 encoder hidden state에 집중(attention)했는지를 보여주는 사례이다. ( amount of attention이 높은 것들이 진한 선으로 연결되어 있는 것을 확인할 수 있다.)

Visual Attention

위 사례들을 살펴보면 단어를 예측하기 위해 어떤 input을 참고했는지를 알 수 있다. 즉, RNN 예측 결과를 설명할 수 있는 부가적인 효과가 발생한다. (이런 분야를 explainable AI라 하기도 한다.)

이 효과를 CNN과 같은 컴퓨터 비전 문제에 적용하면 재미있는 결과가 나온다.

사실 "Deep learning은 성능은 좋지만 해석이 불가능한 모델이다." 라는 것이 일반적이다. 하지만 Attention 기법을 사용한다면 어느정도 예측 근거를 가시화 할 수 있다.

위 그림은 이미지를 문장으로 출력하거나 분류(classification)했을 때, 어떤 pixel을 참고 하였는지를 가시화 한 사례이다.

※ Encoder는 이미지를 입력받아 feature map을 출력하는 CNN이 적용되었고,
   feature map들의 convex vector를 Attention하는 RNN이 Decoder인 사례이다.

댓글 쓰기

0 댓글