Attention Is All You Need

dinoST·2025년 9월 12일

Paper Review

목록 보기
1/8
post-thumbnail

Attention Is All You Need Paper Review

다양한 논문들이 있었지만 해당 논문만큼 제목을 공격적으로 작성한 논문이 없다고 생각한다. 얼마나 자신이 있으면 이렇게 작성했을지.. 하지만 현재, 가장 인공지능의 기술을 끌어 올린 다양한 요인 중 하나는 바로 Attention인 것 같다. NLP 분야부터 Vision까지 정말 다양한 곳에서 Sota 급 모델의 경우, 대부분 Attention mechanism을 활용한다. 이번엔 이에 대한 논문인 Attention Is All You Need 에 대해서 리뷰해보려고 한다.

Abstract

해당 Papaer 제안 이전에는 sequence to sequence model의 경우, Encoder와 Decoder는 Recurrent 혹은 Convolution 기반으로 구성되어져 있었습니다. 하지만 본 논문은 이러한 Recurrent, Convolution mechanism을 전부 없애고 오로지 Attention mechanism만을 기반으로 sequence to sequence를 동작하려고 합니다. 이를 우리가 잘 알고 있는 'Transformer' 가 되겠습니다.

Introduction

Machine Translation 혹은 Sequence modeling 분야에서 Recurrent neural networks 혹은 gated operation인 LSTM, GRU가 주된 접근 방안이었습니다. RNN과 LSTM, GRU 등 기존에 있던 Seq2Seq 분야에서는 순차적으로 처리를 해야 하기 때문에 병렬화가 불가능하단 단점이 존재하였습니다. 더불어 Long Term dependency 즉, 시퀀스의 길이가 길어질수록 처음에 입력된 시퀀스들의 경우, Backpropagation 과정에서 손실되는 문제가 발생했습니다. 위 두가지 문제를 해결하기 위해서 Attention mechanism을 제안하게 되었습니다. Attention을 통해서 병렬화 처리가 가능하게 되었으며 Long Term dependency 문제를 해결하여 처음에 입력된 시퀀스들의 Gradients vanishing을 해결할 수 있게 되었습니다.

Background

읽어보면 아시다시피 연산량을 줄이고 병렬화를 수행하기 위해서 Multi-Head Attention과 Self attention을 언급하고 있습니다. 그렇다면 이전에는 어떤 방식이었기에 이런 제안을 하게 되었는지 알아보도록 하겠습니다.

1. Seq2Seq


해당 논문 이전에 제안된 Sequence model 중 하나인 Seq2Seq model의 경우 위에서 확인할 수 있듯이 순차적으로 하나씩 처리됨을 확인할 수 있습니다.


이를 인코더 디코더 구조로 나타냈을 때, 동일하게 순차적으로 처리하는 것을 볼 수 있습니다. 이때, 인코더의 출력 결과를 디코더로 Context를 통해서 넘기는 것을 확인할 수 있습니다. 이는 Vector 구조를 가지고 있는데 이를 통해서 유사도를 구할 수 있다고 생각하시면 되겠습니다.

2. RNN


RNN은 이름에서 알 수 있듯이 Recurrent 구조입니다. 즉, 순환구조로 이전 hidden state가 다음 hidden state를 만드는데 활용이 됩니다. 그렇기 때문에 연산량이 점차 많아지게 되는데 이를 인코더 디코더 구조로 확인해보겠습니다.

Time step을 보시게 되면 Recurrent 구조이기에 증가한 것을 볼 수 있으며, 영상에서는 표현이 제대로 이루어지지 않지만 시퀀스가 길어질 수록 처음에 입력된 단어들 혹은 정보들은 Gradient vanishing이 발생하게 됩니다.

3. Transformer

step마다 인코더의 각 hidden state을 구하게 되고 이를 이전 step의 디코더 hidden statedhk dot product를 수행하게 됩니다. Attention의 기본 아이디어의 경우, Decoder에서 출력 단어를 예측하는 매 시점마다 인코더에서의 입력 문장을 다시 한 번 더 입력으로 참고하게 됩니다.

Model Architecture

Transformer의 경우, 앞에서 언급했듯이 Recurrent 혹은 Convolution 구조를 제거하고 오로지 Attention mechanism만 사용한다고 리뷰했습니다. 앞서 Seq2Seq 분야에서 인코더와 디코더 구조로 나눠 동작하는 것이 성능이 제일 좋게 나왔기에 Transformer 역시 인코더와 디코더의 구조를 가져가는 것을 볼 수 있습니다.

먼저 인코더 파트를 보게 되면 6개의 동일한 레이어가 쌓이게 됩니다. 각 레이어에는 2개의 sub-layer가 존재하며 이는 Multi-head self attention , Pointwise fully connected feed-foward network 로 구성되어 있습니다. 특히, 각 sub layer에는 skip connection이 연결되어 있으며 그 뒤에 layer Normalization이 이루어지는 것을 확인할 수 있습니다.

디코더의 경우, 인코더와 동일하게 레이어가 쌓이게 됩니다. 각 레이어네는 3개의 sub-layer가 존재하는 것을 볼 수 있으며, Masked Multi-Head Attention, Multi-head self attention , Pointwise fully connected feed-foward network으로 이루어져 있으며 동일하게 각 sub layer마다 skip connection이 이루어져 있으며 이후 각 sub layer는 layer Normalization을 수행하는 것을 확인할 수 있습니다. 인코더와 다르게 디코더에서는 마스킹이 이루어지는 것을 확인할 수 있습니다. 이 마스킹을 통해서 디코더는 미래 시점의 정보를 보는 것이 아닌 현 시점에서의 이전 시점만을 확인 할 수 있게 합니다.

1. Attention

먼저, Attention에 대해서 알아보기 이전에 토큰화, Query, Key, Value에 대한 의미부터 알아보도록 하겠습니다. 먼저 어떤 문장이 주어졌을 때, 영어의 경우 단어 단위로 토큰화를 수행하게 되며 한국말의 경우, 형태소 단위로 토큰화가 이루어지게 됩니다. 이때, 이 토큰화를 통해서 벡터화가 가능해지는데 벡터화란 Embedding vector로 임베딩을 수행하게 되는데 즉, 우리가 이해하는 단어들을 LLM, AI가 이해하기 쉽게 이를 숫자로 바꾼 것을 의미합니다. 단순히 숫자를 1, 2, 3... 이런식으로 나타내는 것이 아니라 의미와 연관성을 고려하여 벡터화를 수행하게 됩니다. 즉, man-woman, king-queen 이렇게 연관성과 유사성을 고려하여 임베딩하게 됩니다. 그 다음으로는 Query, Key, Value 이를 이해하기 쉽게 게임과 비유하도록 하겠습니다. 여러분이 게임의 호스트라고 했을때, 각 참가자들이 있을 것이고 참가자들의 이름표는 Key에 해당하며 참가자의 인적 사항부터 다양한 개인 정보가 Value가 되겠습니다. 지금부터 여러분은 참가자 중에 섞여있는 쌥쌥이를 찾아 게임 진행 전에 제외하고 진행해야 합니다. 이 쌥쌥이를 찾기 위해서 여러분들은 질문을 수행하게 될 것이고 이때의 질문들이 query가 되겠습니다.

위에서 Query, Key, Value를 게임에 비유해서 이해했다면 이제 이것을 공학적으로 이해해보도록 하겠습니다.

Query의 경우, 현재 처리 중인 토큰을 의미하게 됩니다. (비유: 쌥쌥이 찾아내려고 하는 질문)
Key의 경우, Embedding을 수행하게 되고 vector에 해당하는 단어들의 레이블로 이해하시면 됩니다. (비유: 참가자들의 이름표)
Value의 경우, 각 단어들의 Embedding vector의 실제 단어들의 정보를 담고 있습니다.(비유: 참가자들의 개인정보 및 인적 사항이 되겠습니다.)

이러한 Query와 Key, 그리고 Value를 활용해서 Attention score를 구하게 되고 softmax를 통해서 확률 값으로 이해할 수 있도록 합니다. 즉, Query에 해당하는 Value와 Key를 활용해서 Attention score를 확률로 구하게 됩니다.

2. Multi-Head Attention

단일 Attention을 수행하게 되며 Q, K, V를 서로 다른 Linear projection을 수행하게 됩니다. 다양한 head에서 Attention score를 구하게 되고 Concat을 통해서 평균을 구하게 됩니다. 이 과정을 통해서 다양한 공간의 서로 다른 정보에 동시에 집중할 수 있게 되고 다양한 관계를 학습할 수 있게 됩니다. 더불어 병렬 처리가 가능해지기 때문에 모델의 연산 속도를 효율적으로 높일 수 있게 되었습니다.

3. Position-wise Feed Forward Networks

이름에서 알 수 있듯이 완전 연결된 레이어가 각 위치에서 개별적으로 그리고 동일하게 적용이 됩니다. 더불어 수식을 보게 되면 두번의 선형 변환으로 이루어져 있음을 볼 수 있으며

수식 측면에서의 설명은 위와 같습니다. 이 과정을 통해서 Attention mechanism은 시퀀스 내의 각 토큰들 간의 위치 관계에 대해서 학습을 수행하며 해당 과정을 통해서 두번의 선형 변환을 통해 비선형 패턴에 대한 유연성을 챙길 수 있습니다.

4. Positional Encoding

앞서 Transformer의 경우, Recurrsive 혹은 Convolution 구조를 포함하지 않음을 이야기했습니다. 그렇다면 단어들의 Sequence 정보를 어떤 식으로 활용해야 할까요? Transformer에서는 이를 Positional Encoding으로 풀어냈습니다. 이를 통해서 Sequence에서 토큰의 상대적 혹은 절대적 위치에 대한 정보를 부여할 수 있었으며 주로 서로 다른 주파수의 sine 함수와 cosine 함수를 활용하여 동일한 시점에서의 절대적 위치와 서로의 상대적 위치를 효과적으로 파악할 수 있게 되었습니다.

5. Why Self-Attention

Self Attention을 사용했는지에 대한 언급이 이루어지고 있습니다. 크게 3가지 측면에서 이야기를 하고 있습니다. 먼저, layer당 총 계산 복잡도 측면에서 시퀀스가 아무리 길어져도 일부분만 Self Attention을 적용하는 등의 방법을 통해서 이전까지 매우 긴 시퀀스에 대해서 처리가 어려웠던 점들을 효과적으로 해결할 수 있게 되었습니다.

다음으로는 Minimum Number of Sequential Operations의 경우, Self Attention은 시퀀스에 대하여 동시에 모든 위치에 계산이 수행되어지게 됩니다. 즉, 이전 단어의 계산이 완료될 때까지 기다리지 않고 한 번의 행렬 곱으로 처리가 될 수 있게 되었습니다. 이로 인해서 병렬화가 가능해졌음을 다시 한 번더 강조하고 있습니다.

마지막으로 Long Term Dependency를 해결하였습니다. Self Attention의 경우 시퀀스 내의 모든 위치에 직접적으로 어텐션 연산을 수행할 수 있으며 기울기 소실 문제를 해결하고 각각의 단어의 한 번씩 모두 연결이 이루어지기 때문에 장거리 패턴 학습 능력이 크게 향상될 수 있습니다.

Conclusion

논문에는 실험 환경 및 결과에 대한 설명이 이루어지지만 모든 논문에서 볼 수 있듯이 자기들이 제안하는 모델의 성능이 제일 좋음이라고 이야기하고 있습니다. 하지만 Transformer의 경우, 저희가 너무 잘 알고 있듯이 성능이 좋은 만큼 대규모 데이터셋이 필요하단 점과 더불어 모델이 너무 무거움을 알 수 있습니다.

profile
초시공! 태풍을 부르는 나의 공부

0개의 댓글