머신러닝, 딥러닝 ML, DL/이론

[Deep Learning] 어텐션 메커니즘 (Attention Mechanism) 아이디어 이해하기

킹남지 2021. 8. 31. 16:37
반응형

전 포스팅에서 seq2seq에 대해 정리했습니다. (https://kingnamji.tistory.com/28)

seq2seq의 인코더가 context vector를 만들 때 정보의 소실이 일어나는 점을 확인했습니다.

이번 포스팅에서는 깊은 내용보다는 아이디어에 주목해 최대한 이해에 집중하겠습니다.

 

아이디어

어텐션(Attention)은 말 그대로 필요한 정보에 주목해 그 정보로부터 sequence 변환을 수행하는 구조입니다.

어텐션 매커니즘은 기계번역을 위한 seq2seq모델에 처음 도입됐습니다.

 

예시

필요한 정보에만 주목한다는 점을 seq2seq모델을 만들 때 사용한다고 하고 예시를 들어 봅시다.

한국어 "나는 고양이를 좋아한다."를 영어 "I like cats"로 번역한다면, 'cats'를 예측할 때  '고양이'라는 단어에 주목하면 더 좋겠죠. 

 

이처럼 어텐션의 기본은 Encoder가 '고양이'를 받아서 벡터로 만든 결과(Encoder의 출력)Decoder가 'cats'를 예측할 때 입력되는 벡터(Decoder의 입력)와 유사할 것 이라는 가정입니다.

 

 

seq2seq의 Encoder와 Decoder를 개선하는 방향으로 이해해보겠습니다.

Encoder 개선

기존의 Encoder는 어떤 입력이든 고정된 길이의 벡터(Context Vector)로 변환해 정보의 소실이 일어났습니다.

( 마지막 시점의 hidden state를  Decoder로 전달했습니다. )

 

따라서 가장 기본적인 개선 아이디어는 모든 시점의 hidden state를 이용하는 것입니다. Encoder가 시점의 개수만큼의 벡터를 담은 Matrix를 반환하도록 만들어줍니다.  이 Matrix는 각 시점의 hidden state에 해당하는 벡터들의 집합이라고 볼 수 있습니다.

개선 예시

 

Decoder 개선

Encoder의 출력을 Decoder가 잘 활용할 수 있도록 개선할 방법을 알아보겠습니다.

 

기존 Decoder의 첫 hidden state는 Encoder의 마지막 hidden state 였습니다. 

 

Encoder의 개선에서 모든 시점의 hidden state를 활용할 수 있게 됐으므로, 이제 Decoder는 모든 시점의 hidden state를 활용할 수 있습니다.

 

개선 1

첫번째 우리가 개선해야할 점은 Decoder가 입력의 정보 중 필요한 정보에만 주목해 변환을 수행하도록 하는 것 입니다.  그러기 위해서 어떤 계산을 수행하는 층이 추가됩니다.

어떤 계산이 추가된 Decoder

어떤 계산을 통해 필요한 정보만 골라 Affine layer로 넘겨주게 됩니다. 이렇게 우리는 각 시점에서 Decoder에 입력된 값과 대응 관계인 정보에 주목할 수 있습니다. 

 

이 개선에는 한가지 문제가 따릅니다. 어떤 시점의 입력에 중요한 정보를 선택하는 작업은 미분할 수 없다는 점입니다. 일반적으로 오차역전파법을 사용하기 위해서는 미분이 가능해야합니다. 

 

이런 문제를 해결하는 아이디어는 간단합니다. '하나를 선택' 하는 것이 아니라, '모든 것을 선택' 하면 됩니다. 그때 모든 정보에 중요도를 매겨 '가중치'를 별도로 부여합니다. 그리고 가중합을 계산해, '맥락 벡터'를 계산합니다. 이 맥락 벡터에는 그 시점의 변환을 수행하는 데 필요한 정보가 담기게 되는 것이죠.

맥락 벡터를 구하는 예시

개선 2

맥락 벡터를 얻기 위해, 각 정보의 중요도를 나타내는 가중치를 구할 수 있도록 준비해야 합니다. (수작업이 아닌, 데이터로부터 자동으로 학습할 수 있게 준비해야 합니다.)

 

가중치를 구하기 위해 먼저 개선된 Encoder의 hidden state 행렬과 Decoder의 각 시점의 hidden state 벡터의 유사도를 계산합니다. 이때 유사도를 계산하기 위해 내적을 사용합니다. (유사도 계산의 척도는 내적 외에도 많습니다.)

그 후 유사도를 정규화하기 위해 Softmax 함수를 적용합니다.

 

이렇게 우리는 각 정보의 중요도를 나타내는 가중치를 구할 수 있게 됐습니다.

 

Decoder의 개선의 어떤 계산을 1. 각 정보의 중요도 가중치 구하기 2. 맥락 벡터 계산의  두가지 내용으로 나눠서 확인했습니다.

이 어떤 계산을 해주는 계층을 '어텐션(Attention)' 계층으로 부르겠습니다.

 

Attention 계층을 갖춘 Decoder

 

이번에는 seq2seq 모델에서 입력과 출력이 서로 대응되는 정보에 큰 가중치를 매길 수 있도록 해주는 어텐션 매커니즘의 아이디어에 집중해 정리해봤습니다.

 

읽어주셔서 감사합니다 ^^

 

 

[참고자료]

[1] 밑바닥부터 시작하는 딥러닝2 (사이토 고키)

[2] https://arxiv.org/abs/1409.0473

[3] https://www.youtube.com/watch?v=Eb0bT7IXJh0 

반응형