본문 바로가기
AI/AI Paper review

[NIPS-2017] Attention is all you need

by 노마드공학자 2023. 12. 23.

논문 전문 : https://arxiv.org/abs/1706.03762

[출처] https://doi.org/10.48550/arXiv.1706.03762

 

※ The picture and content of this article are from the original paper.

This article is more of an intuitive understanding than academic analysis.


 

[논문 정리]
Attention is all you need

 

Attention is all you need라는 제목만으로도 오금이 저릴정도로 슈퍼 논문입니다.

제가 생각하기에는, GAN과 더불어 2000년대 나온 최고의 논문이 아닐까 합니다. 후대에는 이 시점을 AGI(Artificial General Intelligence)의 신호탄으로 생각하지 않을까 생각될정도로..

Citation은 10만회를 훌쩍 넘겼고, 이 논문을 쓴 사람들은 모두 당시에는 Google 소속이였지만 현재는 대부분 퇴사하여 스타트업을 각자 차린것으로 알고있습니다.

RNN/LSTM과 같은 시계열데이터들의 스탠다드로 쓰이던 모델들을 완전히 박살내버린(심지어 전혀 비슷하지조차 않은 개념) 역사적인 논문입니다.

 

Contents

 

이 그림 하나로 모든게 끝입니다.

딱 이 한장의 그림에서 GPT가 나왔고, BARD가 나왔다고 볼수있습니다. 하나하나 수식적으로 뜯어보면 엄청나게 어려운 모델이지만, 전체 모델이 돌아가는 상황만 정리하여, 최대한 간단하게 정리해보겠습니다.

 

① Transformer라는 모델은 왜 나왔는가?

상기 그림은 RNN 계열 모델의 일반적인 학습 과정입니다.

LSTM이든 GRU든 안에 Forget gate, Forward... 여러개를 추가해서 장기기억 손실을 해결했다고하지만, 근본적인 문제점이 완전히 사라지진 않고 Vanilla RNN대비 나아진 정도였습니다.

즉, 데이터의 시계열 순차적으로 입력으로 들어가서 본다는 것은 결국에는 데이터의 길이가 너무 길거나 혹은 가장 마지막 시점에 들어온 입력데이터의 영향성이 가장 처음들어온 입력 데이터의 영향성보다 학습에 많은 영향을 준다던가 하는 근본적인 한계가 있음을 의미합니다. (Q_t+1을 추정하기 위해 h_t-100의 영향도는 점점 줄어듬. 하지만 가장 영향력이 커야할 지도 모르는 관계.)

 

따라서, RNN계열 + Attention Mechanism이라는 테크닉이 나왔는데, 입력 데이터들에 Attention score를 곱해주어, 데이터간의 길이가 길어도 각시점 데이터의 중요도를 따로 학습함으로써 해결하려했습니다. 하지만 이 또한 RNN계열 모델들의 한계를 막아주는 임시방편에 불과했습니다.

 

이에, 구글은 RNN계열말고 그냥 Attention만 써서 기존의 시계열 모델의 전형적임을 완전히 탈피하는 모델을 만들자라는 생각을 하게되었고, 그 결과 제목부터 Attention만 사용하겠다는 의지가 느껴지는 "Attention is all you need(Transformer)" 라는 논문이 나오게 됩니다.

 

즉, 요약하자면 기존 시계열 딥러닝 모델의 근본적인 한계점을 해결하고자 만들어진 기술입니다.

 

② Transformer는 어떤식으로 학습하는가?

 

수학적으로 풀어쓰자면, Positional Encoding부터 반나절은 걸릴정도로 어려운 기술입니다만, 직관적으로 이해를 해보겠습니다.

 

Attention이라는것은 말 그대로, "집중"하는것입니다.

RNN계열에서 입력데이터들 중, 집중해야할 부분에 Weight를 크게주어 학습에 윤활유 역할을 했던것 과는 달리,

Attention만 쓰게 되면 입력데이터들에 "집중"만 하게됩니다.

즉, Attention만으로 학습하게되면 집중해야할 부분은 잘 찾지만, 그 데이터들이 어떠한 시간순서로 들어오는지는 이해하지 못합니다.

 

 

예를들면, "나는 기분이 좋다" 라는 말을 하고싶을때, Attention Score는 각 단어들의 중요도에 대한 학습은 진행합니다.

하지만, "정말로 나는 기분이 좋다" 혹은 "기분이 나는 좋다 정말로" 라고 학습을해도 중요도는 비슷하게 나올 수 있습니다. 즉, 데이터의 시계열적 순서와는 관계 없이 학습이 됩니다.

 

따라서, 하기와 같이 일부로 각 시간대에 대응하는 숫자(삼각 함수)들을 강제로 엮어주어, 시계열성을 부여하는 과정을 거치는데 이것을 "Positional Encoding" 이라고 합니다.

 

Positional Encoding까지 했다면 강제로 데이터에 시계열성이 부여되었기에, Attention 학습을 할 준비가 되었습니다.

 

그 다음, Multi-head attention이라는 부분을 통과하는데, 이것은 결국 Attention을 여러개 하는것입니다.

쉽게 얘기하자면, Attention을 Ensemble해서 진행한다고 보시면 됩니다.

 

즉, Positional Encoding을 통해 Self-Attention 모델로 입력이 되는데, 이 것은 단일 모델이 아니라 여러개(원 논문 8개)의 모델을 각자 통과하여 Q/K/V(Query/Key/Value)를 학습하고 다시 다같이 Concatenate되는 방식입니다.

여기서 Self-Attention은 입력데이터들간의 관계성을 학습합니다. 즉, 하기와 같이 각 단어들의 중요도와 서로간의 상관관계성에 대해 학습한다고 보시면 됩니다.

 

 

이 과정이 끝나면 Feed Forward Network 및 Normalization되어 Decoder 부분으로 넘어갑니다.

이 위의 과정들은 Transformer의 Encoder라고 불리는데, 원 논문에서는 Nx=6으로 위와 같은 과정을 6번 거쳐 Decoder로 입력됩니다.

 

즉, 여기까지가 Encoder인데 Encoder의 핵심은 입력데이터의 데이터간 상관성을 학습하여 아주 잘 정제된 데이터로 포장한다는데에 있습니다.

즉 Encoder는 Feature Extraction을 하며, 출력물은 입력데이터가 벡터형태로 아주 잘 정제된 고농축 액기스로 나간다고 보시면 됩니다.

 

 

Deocder는 Encoder와 크게 차이가 없습니다. 다만, 학습할때의 입력데이터가 Shifted Right라고 되어있는데요,

이것은 Chat-GPT와 관련이 있습니다. ChatGPT는 Transformer의 Decoder부분을 핵심적으로 사용합니다.

잘 아시겠지만 Chat-GPT는 문장을 형성함에 있어, 이 전 단어들을 보았을때 이 다음 단어가 나오는것에 대한 확률분포의 추정으로 가장 적합해보이는 단어를 한스텝씩 선정하고 문장을 만들어갑니다.

 

Deocder는 입력 데이터보다 한스텝 미래의 단어를 예측하는것이 포인트

 

그렇기때문에, 입력데이터보다 한스텝 다음 문장을 입력으로 넣어준다고 보시면 이해하기가 쉽습니다.

당연히, 이 또한 Positional Encoding을 통해 시계열 특성을 추가해주고 Multi-head Self attention을 통과하여.. 모델 결과는 Softmax를 통과하여 확률적으로 나오게 됩니다.

즉, "나는" 다음에 "정말로"가 올 확률을 가장 높게 추정하도록 학습이 됩니다.

 

 

즉, 현재 입력보다 다음 스텝의 단어를 예측하도록 하여(Softmax), 그것에 대한 Loss를 Decoder 모델/Encoder까지 Back Propagation 하여 학습하게 됩니다.

이 일련의 과정들을 보면 RNN계열의 Seq2Seq같은 컨셉이 없이도, 시계열 딥러닝을 할 수 있다는것을 알 수 있습니다.

 

③ Transformer 과정 심플 요약

 

Transformer의 가장 일반적으로 사용되는 Machine Translation에 대응하여 요약해보겠습니다.

(불어 → 영어 번역)

 

1."I am a student"에 대응하는 불어 문장이 Encoder의 입력으로 들어갑니다.

2. 여러단계의 Encoder(Multi-Head Self Attention) 과정을 거치면서 불어 문장에 대한 정보의 엑기스를 추출해냅니다.

3. 추출해낸 엑기스를 Decoder에 중간부에 입력으로 하고, 영어로 I am a student라는 문장을 초기 입력으로 합니다.

4. Decoder의 출력이 입력 문장의 한 스텝 이후 (am a student EOS)가 되도록 합니다.

※EOS : End of Sentence

 

즉, Encoder를 통해 불어 문장의 특징 엑기스가 추출되고, 이에 상응하는 영어 문장을 입력으로 하여 이 다음 시점에 나올것으로 예상되는 단어를 추정합니다. 이 과정을 무수히 많은 문장에 대해 학습 반복하면 불어 문장을 입력으로 했을때 그에 상응하는 영어 문장이 나오게 됩니다.

 

Results

수학적인 얘기 최대한 없이, 정리를 한다고 해보았지만 역시나 쉽지 않은것 같습니다.

Self Attention이나 Positional Encoding에 대한 수식, 본 글에선 자세히 적지 않았지만 Decoder의 Masking Attention 같은 부분들은 이쪽분야에 대한 사전 인지가 필요한 것들도 많습니다.

본 글로는 전체적인 레이아웃이 어떤지 러프하게 본다는 것에만 참고를 하시고, 꼭 논문을 보심을 추천드립니다. 

이에 대해 아주 상세하게 잘 설명해주시는 영상이 있는데,  윤성로 교수님의 유튜브 강의를 한번 들어 보시는 것도 좋을것 같습니다.

 

참조

[1] https://doi.org/10.48550/arXiv.1706.03762

 

댓글