본문 바로가기
  • 우당탕탕속의 잔잔함
Programming/Deep Learning Network

[Model] About Self-Attention

by zpstls 2023. 10. 31.
반응형

이번 포스트는 Transformer의 근간이 되는 Self-Attention에 대해 다뤄볼 예정입니다.

 

 

Transformer Model은 RNN 계열의 Model 없이 Attention만을 이용해 언어 모델을 만들고자 제안된 구조입니다. 이러한 Transformer Model은 RNN을 사용하지 않아 연산 효율이 좋아졌고 성능 또한 높아지는 결과를 얻게 되었습니다. NLP 및 CV 등 다양한 분야에서 SOTA를 달성한 Model이 Transformer를 기반으로 하는 Model들이니까요.

 

Transformer Model은 강력한 성능만큼 내용도 꽤 복잡합니다. 그래서 Mechanism의 첫 번째로 Self-Attention에 대해 설명해 보도록 하겠습니다. 우선, Self-Attention의 기본이 되는 Attention에 대한 내용은 이번 포스트에서는 다루지 않을 것입니다. 따라서 다음 링크를 참고해 주세요.

 

[Model] About Attention Mechanism

이번 포스트는 Transformer의 시초가 되는 Attention에 대해 간단하게 작성해 보도록 하겠습니다. 최근 AI와 관련된 논문들은 Transformer를 기반으로 한 경우가 꽤 많습니다. 그리고 이 Transformer는 Attention

mj-thump-thump-story.tistory.com

 

 

그럼 본격적으로 내용을 다뤄보도록 하겠습니다.

 

Self Attention이란, Attention을 자기 자신에게 취한다는 의미로 문장에서의 단어들의 연관성을 추정하기 위해 수행됩니다. 예시를 한번 들어보겠습니다. "I don't like meat because it is high in calories."라는 영어 문장이 있다고 한다면, 여기서 "it"은 "meat"를 뜻한다는 것을 알 수 있을 것입니다. 그러나 컴퓨터의 경우 이러한 것을 쉽게 계산하기가 어렵습니다.

컴퓨터가 이와 같은 과정을 계산하기 위한 방식 중의 하나로 제안된 방식이 바로 Self Attention입니다.

 

Self-Attention의 경우 3가지 변수 Query, Key, Value라는 것이 존재합니다. 이러한 3가지 요소를 Flow로 표현하면, 'Query(질문)하고 Key를 통해 중간과정을 거쳐 최종적인 Value를 얻는다.'라고 생각해 볼 수 있을 것입니다.

Self-Attention에서는 Query, Key, Value의 시작 값이 동일합니다. 그러나 중간 학습 과정을 통해 최종적으로는 서로 다른 Query, Key, Value를 얻게 됩니다.

이와 같은 내용은 다음과 같은 공식으로 표현할 수 있습니다.

우선, Query와 Key를 내적 하고 이 내적 된 값을 Attention Score라고 합니다. 내적을 하는 이유는 Query와 Key 사이의 연관성을 계산하기 위해서입니다. 이때 Query와 Key의 차원이 커지면 Attention Score 값도 커져서 모델의 학습에 어려움이 생기게 됩니다. 이를 방지하기 위해, √($d_{k}$)로 나워주는 Scaling 과정을 수행해 줍니다. 여기까지의 계산 부분을 Scaled Dot-Product Attention이라고 합니다. 여러 가지 Attention 방식에 따라 이 부분은 변경될 수 있을 것입니다.

어찌 되었든, 이후 값들을 정규화시켜 주기 위해 Softmax Activation Function에 넣어주고 마지막을 보정을 위해 Value Matrix와 내적을 수행합니다. 그러면 최종적으로 Attention Matrix를 구할 수 있습니다.

 

이와 같은 과정을 하나의 예시로 다뤄보도록 하겠습니다.

"She is a student"라는 문장이 있다고 생각해 보겠습니다. 이 문장의 각 단어들을 Embedding 해줍니다. 이때 "She"의 Embedding은 [1, 1, 1, 1]로 가정하겠습니다. 그리고 모델이 학습한 Weight들(= $W^{q}, W^{k}, W^{v}$)은 하단의 이미지와 같이 임의의 Matrix로 가정하겠습니다. 

앞서 Self-Attention에서는 Query, Key, Value의 시작 값이 동일하다고 언급했었는데요. 따라서 Query, Key, Value를 모두 [1, 1, 1, 1]로 해줍니다. 그리고 앞서 설명한 Scaled Dot-Product Attention 계산을 수행합니다. 이때 Scaling 값은 Query, Key, Value의 차원이 4이므로 √4로 나눠줬습니다.

위와 같은 과정을 "is", "a", "student"와 같은 모든 단어 간에 동일하게 수행해 줍니다. 그러면 다음과 같은 결과를 얻을 수 있을 것입니다.

자기 자신에 대한 Self-Attention 부분을 제외하고는 "She"와 "Student"와의 상관관계가 가장 높은 것을 확인할 수 있습니다. 사람이 생각하는 문맥적 관점에서 보면 결과와 동일하기 때문에 Self-Attention 연산 및 학습이 제대로 이루어졌다고 판단할 수 있을 것입니다.

 

여기까지 Self-Attention (feat. Scaled Dot-Product Attention)에 대해 다뤄보았습니다.

대략적으로 정리해 보면, Self-Attention은 Attention(= 모델의 성능 향상을 위해 문맥에 따라 집중할 데이터를 결정하는 방식)을 자기 자신에게 Attention Mechanism을 수행하는 방식이라고 볼 수 있습니다. 그리고 이 방식을 수행할 때는 Query, Key, Value의 개념이 사용되며 Attention 공식을 통해 Data별 Self-Attention Value를 구하게 됩니다. 그리고 이들을 비교하면서 상관관계가 높은 Data를 도출할 수 있게 됩니다.

 

 

이번 포스트는 여기서 마무리하도록 하겠습니다.

반응형

'Programming > Deep Learning Network' 카테고리의 다른 글

[Model] About Attention Mechanism  (1) 2023.10.31
[Model] About Multi-Head Attention  (0) 2023.10.31
[Model] About seq2seq (Sequence-To-Sequence)  (0) 2023.10.31
[Code] XNect  (0) 2023.04.04
[Code] VNect  (0) 2023.03.13

댓글