본문 바로가기
☃️ Study/Paper

Attention is all you need

by 서나하 2023. 8. 16.

Intro

Attention은 NLP에서 처음 나온 개념이다. 우리는 문장에서 주어를 연결시키고, 그 주어가 어떤 행동을 했다는 걸 파악할 수 있다. 그거슨 인간이기 때문에 당연하다....기보단 우리가 그 주어를 유추하기 위해 문장 전체가 아니라 특정 단어들에 focusing을 해서 판단하기 때문이다. 그래서 attention은 인간이 뭔가를 이해할 때 사용하는 그 집중을 모방한다. 다시 말하면... 어떤 데이터가 연속되어 들어왔을 때, 특정 데이터를 판단함에 있어서 전체를 다 regular하게 참조하는게 아니라, 제일 연관성이 있어 보이는 부분을 가져와서(중요한 것 같은 데이터에 focusing해서) 특정 데이터가 무엇인지 판단하겠다~는 개념을 사용한게 attention이다.

Attention을 이해하기 위해 먼저 value vector를 이해해보자

 

 

위와 같이 어떤 단어를 넣으면, word embedding이라는 알고리즘을 통해 벡터로 만들 수 있다. 이는 living being, feline, human과 같은 몇개의 카테고리를 제시하고 그 기준(token)으로 판단했을 때, 단어와의 연관성에 따른 가중치를 표현한 것이다. 예를 들어 cat이라는 단어에 대해 주어진 카테고리별로 평가를 하면 cat을 나타내는 벡터가 나오는데, 이때 이 벡터는 cat의 고유 벡터라고 할 수 있고 이와 마찬가지로 문장을 넣으면 해당 문장을 벡터화할 수 있다는 것이다.

문장을 벡터화(vectorization)한다는 것은 내가 이 문장을 해석가능한 어떤 숫자의 집합이나 차원으로 가져온다는 것을 뜻한다. 이에 따라 각 token들이 축이 되어, 이 7개의 축 상에 존재하는 친구를 정의할 수 있게 된다. 그래서 비슷한 느낌의 cat과 kitten은 카테고리화 결과 그 수치가 비슷할테니 거의 비슷한 영역에 존재하게 됨을 볼 수 있고, 이렇게 비슷한 특징을 가지는 친구들이 비슷한 영역에 있도록 만들어주는 것이 바로 word embedding이다. 

그리고 이렇게 벡터화를 수행한 다음, 그 결과를 평가해서 나와 연관있는 친구를 찾는게 Attention이다 ~

 

Attention

"weight가 높다 == 나와 연관이 많다"에 따라 이 가중치를 계산하기 위해서는 다음의 세가지 정보를 가져야 한다.

Q는 current token으로, 내가 판단할 대상이 된다. K와 V는 둘 다 Q와의 관계를 나타내는 token이고, $d_k$는 embedded vector의 dimension을 의미한다. 다음 예시를 통해 attention을 구하는 과정을 알아보자.

 

The animal didn’t cross the street, because it was too tired.

 

이러한 연속된 데이터가 들어왔을 때, 지칭대명사인 it이 animal과 연관이 많다는 것을 나타내려면 animal과의 weight가 높을 것

먼저 it을 위에서 설명한 word embedding을 통해 3차원 벡터로 보내고, 지금 it이랑 관련있는 애가 누구야~라고 구하는거니까, 내가 구하고자하는 녀석을 쿼리로 설정함. 

it과 관련된 친구가 누구인지 구하고 있는거니까 물음을 표하는 대상인 it을 Query로 설정한다. 여기서 QK-1을 계산해서 하나의 attention score로 만들고, 차원수로 나눠주는 건 차원이 너무 크면 학습이 안되니까 데이터 정규화 목적으로 나눠줌.

 

 

지금까지 it과 animal 사이의 attention score만 구했지만 전체에 대한 attention을 구하고 싶은거니까, 전체문장의 각 단어들에 대한 attention을 구하기 위해 다음과 같이 함. 이렇게 query와 key를 모두 곱해서 it과 모든 단어들에 대한 관계를 나타내는 attention score 벡터를 구함. 여기에 softmax를 적용하고, value를 한번 더 곱해주면 최종적으로 문장 전체에 해당하는 attention에 대해 뭉개진 value가 나옴

이걸 또 it만을 대상으로 하지 않고, 각 단어에 대해 문장 전체에서 어떤 관계가 있는지 찾아 최종적으로 query attention을 만듬

self~에 대한 설명

 

Transformer

transformer의 핵심 구성요소인 self attention에 대해 알아보자

근데 사실 위에서 사용했던 예시가 self attention이었음. 그렇기에 self attention이 아닌 예시에 대해 생각해보자면, 

Q, K, V를 모두 같은걸 사용했을 때 self attention이라고 하는데, 

지금까지는 query에 대해 누구랑 가장 관련있는지를 찾았다면, self attention은 이 문장 내에서 내가 뭐랑 가장 연관이 있는지를 찾는 것이다.

예를 들어 the는 누구랑 연관이 있지? animal은 누구랑 연관이 있지?

일반적인거랑 뭔 차이냐면... "나랑 다른 데이터를 가져왔을 때 연관성을 찾는 걸 말한다." 위 문장에서 "동물"이라는 단어와 가장 연관이 있는걸 찾는게 self attention인 것 (그래서 번역에 사용되었음...)

 

 

 

그래서 SOMA에서 들어온 데이터를 판단함에 있어서 해당 point cloud가 머리인가?를 판단해야 하는데 self attention을 사용하면, 주변데이터를 보아하니~ 얘랑 가장 연관이 많은 데이터는 ~이 친구들인거 같은데 ~로 미루어보아 판단했을 때 얘는 머리가 맞는거같아. 라는 판단을 하기 위함.

 

 

 

Reference

https://cpm0722.github.io/pytorch-implementation/transformer 

↳ 이 글로 이해했고, 게임공학 수업 필기본을 기반으로 작성했슴니다.

'☃️ Study > Paper' 카테고리의 다른 글

GAN 논문 리뷰  (0) 2023.08.09
AlexNet 논문 리뷰  (2) 2023.08.02

댓글