본문 바로가기
딥러닝 with Python

[개념정리] 어텐션(Attention)이란

by CodeCrafter 2024. 2. 12.
반응형

1. 어텐션(Attention)이란

- 어텐션 메커니즘의 기본 아이디어는 입력 시퀀스(Input sequence)에서 각 단어에 대한 '중요도'를 계산하여, 그 중요도에 기반해 출력 시퀀스(Output Sequence)를 생성하는 것입니다. 이를 통해 모델은 입력 시퀀스의 특정 부분에 주목(Attention) 할 수 있는 것입니다. 

 

- 이것을 Encoder - Decoder의 관점으로 본다면, Decoder에서 출력값을 예측하는 시점마다 Encoder에서의 전체 입력값을 다시 한번 참고하는 것을 말합니다. 

 

- 이 어텐션 메커니즘은 기존 자연어 처리에서 RNN 기반의 Encoder 와 Deocder 구조간의 정보 전달간, Hidden State의 전달이 원활하지 않았음에서 도출되었는데요.

 아래 그림은 RNN을 기반으로 한 Seq2Seq(Sequnce to Sequence) 모델의 Encoder - Decoder 구조를 나타내고 있습니다

 [출처 : https://codingopera.tistory.com/41]

 

 *여기서 Encoder란 input data를 받아 압축 데이터(context vector)로 변환 및 출력해주는 역할을 하는 것을 말하며, Decoder란 압축 데이터(Context vector)를 입력 받아 output data를 출력해주는 것을 말합니다. 

 

- 이때, Encoder의 경우 모든 RNN 셀의 hidden states들을 사용하는 반면, Decoder의 경우 현재 RNN셀의 hidden state 만을 사용하게 됩니다. 

 * 인코더는 입력 시퀀스를 받아 처리하고, 각 순서 단계에서 hidden states를 생성하게 됩니다. 이 hidden states란 입력 시퀀스의 문맥 정보를 담고 있습니다. 인코더는 이렇게 입력 시퀀스 전체의 정보를 압축하여 내부적으로 표현하게 됩니다.

 * 디코더는 인코더로부터 전달받은 정보를 기반으로 출력 시퀀스(예: 번역된 문장)을 생성하게 됩니다. 디코더는 현재 순서 단계에서의 hidden state르 사용하는데, 이는 타겟 시퀀스의 생성 과정에서 어떤 단어가 다음에 올지 결정하는데 중요한 문맥 정보를 제공하는 것입니다. 

  ** Hidden state : 이전 시간 또는 순서 단계에서의 정보를 기억 하는 방법

 

- 즉, RNN 계열 구조에서는 디코더가 인코더의 모든 hidden states에 접근을 할 수 없고, 바로 Encoder의 마지막 hidden states에만 접근할 수 있기에 일종의 정보 손실이 발생하게 되는 겁니다.

 

 

 

- 이러한 문제점을 극복하기 위해 나온 개념이 바로 Attention입니다.

 

- 인코더의 hidden states가 decoder에 모두 전달되지 못하는 것을 극복하고자 아래와 같은 구조를 만들게 되었습니다. 즉, 인코더의 hidden states(초록색)와 Decoder의 hidden states(빨간색)을 dot product(내적)하여 상수 값(scalar)를 도출하게 됩니다. 

 이렇게 계산된 것들을 Attention score라고 합니다. 

 

 

- 이제 이렇게 계산된 attention score들을 soft max 함수에 넣어 0~1사이의 값으로 만들어 줍니다. 이를 attention distribution이라고 합니다. 

 

- 그 다음 Encdoer의 hidden states들에 Attention distribution을 곱하고 전체를 합하여 attenttion value를 만들어 줍니다. 그리고, 디코더의 Context를 추가해주기 위해 Decoder의 Hidden state를 Attention value에 Concatenate해줍니다. 그리고 이를 linear projection 후  tanh와 같은 activation function을 거치게 되면 최종적인 출력 y가 도출되게 됩니다. 

 

 

위 과정을 정리해보면 아래와 같습니다.

 

1) Encoder의 hidden states들과 Decoder의 Hidden states들을 내적(dot product) ==> Attention score (Scalar) 계산

2) 계산된 Attention score들을 soft max 함수 넣기 ==> Attention Distribution(Scalar) 계산

3) 계산된 Attention Distribution과 Encoder의 Hiddne state를 곱함 ==> Attention Value(Vector) 계산

4) 계산된 Attention value와 Decoder의 hidden state를 Concatenate 

5) 4)에서 도출된 벡터에 weight를 곱하고 bias를 더하는 linear projection을 실시하고, tanh 등의 activation function을 적용하여 최종적인 output을 도출

 

 

이와 같은 과정을 거친 것이 어텐션 메커니즘이며, 이를 통해 디코더는 output을 만들 때 인코더의 모든 hidden states를 참조하여 가장 관련 있는정보에 주목(attention)할 수 있는 것입니다. 

반응형

댓글