본문 바로가기
Data Science/논문리뷰

[논문리뷰] Attention is all you need (1) - seq2seq, Attention Mechanism

by Toritol 2022. 10. 25.
728x90

Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., ... & Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems30.

 

 해당 논문은 2017년에 구글에서 발표한 논문으로, 기존 seq2seq 모델의 한계점을 해결하기 위해 Transformer 모델이라는 것을 제안하였습니다. 해당 논문을 리뷰하기 전에 (1) seq2seq, (2) attention mechanism의 개념에 대해 간단하게 살펴보고자 합니다. 이번 글은 Transformer 모델을 이해하기 위해 알아야 할 개념들을 공부하는 것이 목적이므로, "딥러닝을 이용한 자연어 처리 입문 (wikidocs.net)"의 글을 주로 참고하여 간단히 정리하였음을 미리 알려드립니다.

 

1. seq2seq (Sequence-to-Sequence)

  seq2seqRNN (Recurrent Neural Network) 기반의 모델로, 텍스트, 음성 등의 비정형 데이터를 대상으로 활발히 적용하고 있으며 음성 인식과 기계 번역이 대표적인 활용 분야입니다. 다음 그림 (Figure 1)은 seq2seq의 기본적인 구조입니다.

Figure 1. seq2seq의 기본 구조 (출처: 딥러닝을 이용한 자연어 처리입문)

 seq2seq는 크게 Encoder, Context vector, Decoder로 구성되어있습니다. Encoder는 데이터를 순차적으로 입력받아 인코딩하며, 마지막에 하나의 벡터로 압축하는 과정을 진행하는데, 이렇게 압축된 벡터가 Context vector입니다. Decoder는 인코딩된 데이터가 압축된 Context vector를 다시 디코딩하는 역할을 합니다. Figure 1처럼 seq2seq를 번역기로 활용하는 경우, Encoder에 번역하고자 하는 문장을 입력하게 되면 Decoder에서 번역된 문장이 출력됩니다.

Figure 2. seq2seq의 Encoder (출처: https://blog.naver.com/sooftware/221784419691)

 Encoder를 자세히 설명하기 위해 Sooftware 님 블로그의 예시 (Figure 2)를 가져왔습니다. Encoder의 내부는 여러 셀로 이루어져 있으며, LSTM 외에도 RNN, GRU (Gated Recurrent Unit)가 사용될 수 있습니다. 입력한 문장은 각 단어별로 토큰화가 진행되고 순차적으로 입력됩니다. 마지막에 위치하는 h (Hidden State Vector)는 Context vector를 나타내는데, 이전에 순차적으로 입력된 단어들의 영향을 누적해서 전달하였기 때문에 모든 단어들의 정보가 포함되어있습니다.

Figure 3. seq2seq의 Decoder (출처: https://blog.naver.com/sooftware/221784419691)

 Decoder의 세부적인 구조는 Figure 3과 같습니다. Decoder는 RNNLM (RNN Language Model)과 동일한 구조이지만, Context vector (h)를 입력받는다는 점에서 차이가 존재합니다. 우선 RNNLM에 대해 설명하면, Figure 3과 같이 첫 번째 단계에서 예측한 출력값인 '안녕하세요'를 다음 단계의 입력값으로 사용하는 것을 반복하여 텍스트를 예측하는 방법입니다. 훈련 과정에서는 교사 강요 (Teacher Forcing)라는 기법을 활용하게 되는데, t 시점에서 예측된 출력값을 t+1 시점에서 입력값으로 사용하는 것이 아니라, 훈련 데이터를 그대로 입력값으로 사용합니다. 이를 통해 훈련 시간을 단축하고 훈련 과정에서 문장이 잘못 예측되는 것을 방지합니다.

 다시 seq2seq로 돌아가면, Decoder에는 h, 즉 Context vector와 첫 번째 값인 s (일반적으로 sos, start of string)가 입력됩니다. 이 두 입력값은 LSTM 셀을 통과하고 Affine과 Softmax를 거쳐 첫 번째로 등장할 단어를 예측하게 됩니다. 첫 번째로 예측된 단어는 다음 LSTM 셀로 입력되며 문장의 끝을 나타내는 /s (일반적으로 eos, end of string)가 출력될 때까지 반복됩니다.

 

2. Attention Mechanism

 위에서 설명한 seq2seq에는 두 가지의 문제점이 존재합니다. 1) Encoder에 입력된 데이터를 Context vector로 압축하는 과정에서의 정보 손실, 2) RNN에서 일반적으로 나타나는 기울기 소실 (Vanishing gradient) 문제로 인해, 텍스트의 길이가 길 경우에는 예측이 제대로 이루어지지 않는다는 문제가 있습니다. 이러한 seq2seq의 문제점을 해결하기 위해 등장한 기법이 attention mechanism입니다. Attention mechanism은 decoder에서 새로운 단어를 출력할 시점마다 encoder에 입력된 전체 문장을 참고하도록 하며, 이 과정에서 해당 시점의 단어와 연관이 있는 입력 단어에 보다 집중 (attention)하는 기법입니다. Attention mechanism도 마찬가지로 "딥러닝을 이용한 자연어 처리 입문"의 예시를 통해 설명하겠습니다.

Figure 4. Dot-Product attention mechanism의 전체 구조 (출처: 딥러닝을 이용한 자연어 처리 입문)

 Figure 4는 다양한 attention 기법 중 dot-product attention에 대한 구조를 나타내며, 다른 기법들과는 수식의 차이가 있을 뿐 메커니즘 자체는 유사하므로 해당 기법을 예시로 들었습니다. Attention mechanism은 seq2seq처럼 encoder와 decoder가 존재하지만, decoder에서 단어를 출력하는 과정에서 차이가 있습니다. 그 과정을 살펴보면, Decoder의 3번째 단계에서 'suis' 단어가 입력되고, 다음 단어를 예측하는 과정에서 Encoder에 들어온 전체 문장을 참고하게 됩니다. 이때 각 단어별로 softmax를 통과하면서 가중치가 도출되고, 하나의 정보로 압축되면서 decoder에 과정에 다시 전달됩니다. 간단하게 설명하면, 기존 seq2seq는 decoder에서 'word > LSTM > Dense > Softmax' 순서인 반면에, attention은 'word > LSTM > Attention > Dense > Softmax' 순서입니다. 보다 자세한 과정은 다음과 같습니다.

Figure 5. Attention score 계산 과정 (출처: 딥러닝을 이용한 자연어 처리 입문)

 우선 attention score를 계산하는 과정입니다. \( h_1 \), \( h_2 \), \( h_3 \), \( h_4 \)는 encoder에 입력된 각 단어들의 hidden state이며, \( s_t \)는 decoder에서 시점 t에서의 hidden state를 나타냅니다. Attention score는 \( s_t \)가 encoder의 각 hidden state(\( h_1 \), \( h_2 \), \( h_3 \), \( h_4 \))와 얼마나 유사한지 판단하는 값으로, \( s_t \)를 transpose한 \( s_t^T \)와 \( h_1 \), \( h_2 \), \( h_3 \), \( h_4 \) 각각을 내적한 것을 통해 계산됩니다. 내적을 통해 계산되었기 때문에 각 attention score의 값은 스칼라이며, Attention score의 정의와 집합인 \( e^t \)는 다음과 같습니다.

$$ score(s_t, h_i) = s_t^T h_i $$

$$ e^t = [s_t^T h_1,...,s_t^T h_N] $$

Figure 6. Attention Distribution 계산 과정 (출처: 딥러닝을 이용한 자연어 처리 입문)

 다음은 Attention distribution을 계산하는 과정입니다. 앞선 결과물인 \( e^t \)에 softmax를 적용하는 것을 통해 \( \alpha^t \), 즉 attention distribution을 도출합니다. Softmax를 적용하였기에 \( \alpha^t \)의 합은 1이며, \( \alpha^t \)의 각 값은 입력 단어들의 attention weight를 나타냅니다. 식은 다음과 같습니다.

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

Figure 7. Attention Value의 계산 과정 (출처: 딥러닝을 이용한 자연어 처리 입문)

 다음은 Attention Value 계산 과정입니다. Attention value는 encoder에 입력된 각 단어들의 hidden state (\( h_i \))와 attention weight (\( \alpha^t \))를 곱하고 더하는 것, 즉 가중합 (Weighted sum)을 통해 계산됩니다. Attention value인 \( a_t \)의 수식은 다음과 같습니다.

$$ a_t = \sum_{i=1}^N \alpha^t h_i $$

 

Figure 8. Attention Mechanism의 최종 과정 (출처: 딥러닝을 이용한 자연어 처리 입문)

  마지막 과정입니다. Decoder에서 시점 t에서의 hidden state를 나타내는 \( s_t \)와 attention value, \( a_t \)를 결합하는 것을 통해 새로운 벡터인 \( v_t \)를 계산합니다. 여기서 결합하는 방법은 단순히 concatenate할 수도 있고, 평균을 계산할 수도 있습니다. \( v_t \)는 최종식에서 바로 활용되는 것이 아니라 \( tanh \) (Hyperbolic Tangent) 함수를 한 번 더 거치게 됩니다. 이에 따른 결과물은 \( \widetilde {s} \)이며, \( \widetilde {s} \)가 최종적으로 출력층의 입력으로 사용됩니다. 수식은 다음과 같습니다.

$$ \widetilde {s} = tanh(W_c v_t + b_c) $$

$$ \hat {y_t} = softmax(W_y \widetilde {s}_t + b_y) $$

 

 Transformer를 알기 전에 알아두면 좋은 seq2seq와 attention mechanism에 대해 살펴보았습니다. 정리된 글을 다시 한번 정리하였기 때문에, 잘못된 부분에 대해서는 댓글로 알려주시면 감사하겠습니다. 다음 글에서 'Attention is all you need' 논문에 대해 자세하게 리뷰하고자 합니다.

* 참고 사이트

https://wikidocs.net/

 

위키독스

온라인 책을 제작 공유하는 플랫폼 서비스

wikidocs.net

https://blog.naver.com/sooftware/221784419691

 

[Sooftware 머신러닝] Seq2seq (Sequence to sequence)

Machine Learning: Seq2seq (Sequence to sequence) "Sooftware" 이 글은 제가 공부하여 이...

blog.naver.com

https://glee1228.tistory.com/3

 

밑바닥부터 이해하는 어텐션 메커니즘(Attention Mechanism)

glee1228@naver.com 며칠 전부터 포항공대 한보형 교수팀과 구글 콜라보의 논문인 Large-Scale Image Retrieval with Attentive Deep Local Features, 이른바 DELF(Deep Local Feature) 로 잘 알려진 논문을 보기..

glee1228.tistory.com

https://blog.naver.com/PostView.naver?blogId=sooftware&logNo=221784472231 

 

[Sooftware 머신러닝] Attention Mechanism (어텐션 메커니즘)

Machine Learning: Attention Mechanism (Seq2seq + Attention) "Sooftware" 이 글은 제...

blog.naver.com

 

728x90

댓글