[EECS 498-007] lec13. Attention
*강의영상*: https://www.youtube.com/watch?v=YAgjfMR9R_M&t=401s
저번 강의에서 RNN, LSTM 등 다양한 순환신경망을 배우고 그 구조와 작동 매커니즘에 대해 알아보았다. Long input에도 강한 점을 드러내는 LSTM이 있었지만 highly parralizable 하지 않기 때문에 computation이 복잡한 문제는 아직도 해결되지 않았다.
오늘 강의에서는 'Attention' 메커니즘에 대해 다룬다. 이전 강의에서 다루었던 Recurrent Neural Networks(RNN)의 한계를 극복하기 위해 Attention 메커니즘이 어떻게 등장하게 되었는지, 그리고 그것이 어떻게 활용되는지 알아보자. 또한 Attention 메커니즘이 RNN뿐만 아니라 새로운 패러다임인 Transformer와 같은 최신 모델에서 어떻게 활용되는지도 다루어보자.
RNN은 순차 데이터를 처리하는 데 유용하지만, 모든 정보를 단일 컨텍스트 벡터로 압축하는 방식에는 한계가 있다. 특히, 긴 문장이나 문서를 처리할 때 이 context vector 하나에 Long text input이나 긴 시퀀스 인풋이 들어온다면 벡터 하나에 모든 중요한 정보를 담아내기 어렵다는 문제점이 존재한다. 이를 해결하기 위해 Attention 메커니즘이 제안되었다.
Attention 메커니즘은 디코더가 출력 시퀀스를 생성할 때, 인코더에서 생성된 모든 히든 스테이트를 동적으로 참조할 수 있도록 한다. 이때 각 디코더 타임스텝마다 새로운 컨텍스트 벡터가 생성되며, 이를 통해 입력 시퀀스의 중요한 부분에 집중, Attend 할 수 있게 된다.
위의 그림을 자세히 살펴보자.
Alignment Scores 계산을 하여 디코더의 현재 히든 스테이트 $ s_{t-1} $와 인코더의 각 히든 스테이트 $h_i $를 비교하여 스칼라 값인 alignment score $e_{t,i}$ 를 계산한다. 이 계산은 다층 퍼셉트론(MLP)을 사용하여 이루어진다. 계산된 alignment score는 Softmax를 통해 정규화되어 각 히든 스테이트에 대한 Attention weight $a_{t,i}$ 가 된다. 이 weight는 0과 1 사이의 값을 가지며, 모든 weight의 합은 1이 된다. 그 후, Attention Weights를 사용하여 인코더 히든 스테이트의 가중 합을 계산하여 context vector $ c_t $를 생성한다. 이 context vector는 디코더가 다음 단어를 예측하는 데 사용된다. 생성된 context vector $c_t $는 디코더의 현재 히든 스테이트 $s_t $와 결합되어 다음 히든 스테이트 $ s_{t+1} $를 예측하는 데 사용된다.
이 메커니즘을 통해 디코더는 입력 시퀀스의 특정 부분에 집중하여 보다 정확한 번역을 수행할 수 있다. 예를 들어, “we are eating bread”라는 입력 문장을 스페인어로 번역할 때, “estamos”라는 단어를 생성할 때 디코더는 주로 “we are”라는 부분에 집중하게 된다.
또한 이 Attention 매커니즘은 언어 모델 이외의 Image Captioning 분야 등, 다양한 분야에 접목이 가능하다.
이 메커니즘을 통해 모델은 입력 시퀀스의 특정 부분에 집중할 수 있게 되며, 이는 긴 시퀀스를 처리하는 데 특히 유리하다. 또한, Attention 메커니즘은 모델의 해석 가능성을 높여, 모델이 특정 출력 단어를 생성할 때 어떤 입력 단어에 집중했는지 시각화할 수 있다.
그리고 이 어텐션 매커니즘을 기반으로 하는 인공지능과 빅데이터 분야의 판도를 바꾸는 논문이 등장한다. 내가 저번에 리뷰 및 구현을 해보았던, attention is all you need, Transformer 논문이다.
Transformer는 Attention 메커니즘을 기반으로 하는 모델로, RNN의 단점을 극복하고자 개발되었다. Transformer의 핵심은 Self-Attention이다. Self-Attention은 시퀀스 내의 각 요소가 다른 모든 요소와 상호작용할 수 있도록 하며, 병렬 처리가 가능해 연산 효율이 높다.
Self-Attention은 매우 중요하기 때문에 구조와 수식을 살펴보고 넘어가자. 다음 사진은 레이어의 작동 방식을 시각적으로 설명하고 있다. 이 레이어는 각 입력 벡터에 대해 하나의 쿼리 벡터를 생성하며, 이를 통해 입력 벡터 간의 상호작용을 계산한다. Self-Attention 레이어의 주요 내용은 다음과 같다
입력 (Inputs):
입력 벡터 $ X : N_X \times D_X $ 크기의 행렬로 표현되며, $ N_X $는 입력 벡터의 개수, $ D_X $는 벡터의 차원이다. Key 매트릭스는 $ W_K : D_X \times D_Q $ 크기의 행렬로, 입력 벡터를 키 벡터로 변환한다. Value 매트릭스 $ W_V : D_X \times D_V $ 크기의 행렬로, 입력 벡터를 값 벡터로 변환한다. Query 매트릭스는 $ W_Q : D_X \times D_Q $ 크기의 행렬로, 입력 벡터를 쿼리 벡터로 변환한다.
계산 (Computation):
Query 벡터 계산: $ Q = XW_Q $를 통해 쿼리 벡터 $ Q $를 생성한다. Key 벡터 계산: $ K = XW_K $를 통해 키 벡터$ K $를 생성한다. Value벡터 계산: $ V = XW_V $를 통해 값 벡터 $ V $를 생성한다.
유사도 계산을 해야하는데, 각 쿼리 벡터와 키 벡터 간의 유사도는 $ E = QK^T $로 계산되며, 이때$ E_{i,j} = \frac{Q_i \cdot K_j}{\sqrt{D_Q}} $이다. 여기서 $ \sqrt{D_Q} $는 큰 차원의 벡터에서 발생할 수 있는 점수의 과도한 증가를 방지하기 위해 사용된다. Attention Weights는 계산된 유사도 점수 $ E $는 Softmax를 통해 정규화되어 Attention Weights $ A $를 생성한다. 출력은 Attention Weights $ A $와 값 벡터$ V $의 가중합을 통해 최종 출력 벡터 $ Y = AV $가 생성된다.
Self-Attention 레이어는 결국 입력 벡터 간의 관계를 파악하여 각 벡터가 다른 벡터와 얼마나 관련 있는지를 계산하는 것이다. 이 계산을 통해 각 입력 벡터가 다른 벡터로부터 정보를 받을 수 있는 양을 동적으로 조정한다. 출력 벡터는 각 쿼리 벡터에 대해 값 벡터의 가중합으로 구성되며, 이 과정에서 입력 벡터 간의 상호작용이 반영된다.
다양한 분야에서 사용되는 Masked Self-Attention도 존재한다 일부 벡터들을 -inf 값으로 만들어 softmax 함수에 진입했을때 0이 나오게 만들어 해당 벡터를 모르는 상태로 모델은 이에 대한 학습을 하여 predict하게 만드는 방식이다.
Transformer 모델에서는 Multi-Headed Self-Attention 또한 사용된다. 이는 여러 개의 Attention 레이어를 병렬로 실행해 각 레이어가 서로 다른 부분에 집중할 수 있도록 하며, 이를 통해 모델의 표현력이 향상된다.
Transformer는 Self-Attention 레이어를 기반으로 여러 블록을 쌓아 구성되며, 각 블록은 Residual Connection 과 Layer Normalization을 포함한다. 이러한 구조는 대규모 데이터 처리에 적합하며, 특히 자연어 처리(NLP)에서 큰 성과를 내고 있다.
transformer block에 특성으로는 벡터 간의 상호작용이 있다. Self-Attention은 벡터 간의 상호작용을 처리하는 유일한 단계이다. 다른 모든 연산(Layer Normalization, MLP)은 각 벡터에 독립적으로 적용된다.
확장성과 병렬화 또한 특성중 하나인데, Transformer 구조는 매우 확장 가능하고 병렬 처리에 적합하다. Self-Attention과 MLP는 모두 병렬화가 가능하며, 이를 통해 대규모 데이터와 복잡한 모델에서 높은 효율성을 보장할 수 있다.
Transformer 구조로 인해 엄청 관심을 끌자, 최근 몇 년간 여러 연구 기관에서 점점 더 큰 Transformer 모델을 개발하고 있으며, 이는 NLP 분야에서 뛰어난 성과를 보이고 있다. 대표적인 예로 OpenAI의 GPT-2와 NVIDIA의 Megatron이 있으며, 이들 모델은 수십억 개의 파라미터를 학습하여 높은 성능을 보인다.
...오늘은 Attention 매커니즘, 구조와 작동원리와 Self-Attention과 몇가지 변형에 대해 알아보았고, Transformer 구조에 대해 알아보았고 모델이 커지면 커질수록 성능이 향상된다는 것을 배워보았다.