NLP의 역사를 바꾼 self-attention의 기본 원리

1. self-attention

 

transformer에 도입한 attention의 원리는 seq2seq의 attention과 비슷하지만 조금 다르다.

 

self-attention이라고 이름이 붙여졌는데 transformer encoder의 기본 구조는

 

 

input sequence x1,x2,x3가 self attention을 지나 바로 encoding되어 h1,h2,h3의 hidden vector가 된다.

 

 

2. seq2seq의 encoder

 

이전 sequence의 압축정보를 전달받아 다음 sequence로 넘겨가며 전달하며 encoder의 hidden vector를 생성했다.

 

decoder에서 마지막 encoder의 hidden vector랑 첫번째 decoding input을 입력받아 생성한

 

decoder의 hidden vector와 attention을 통해 번역을 수행했다.

 

 

3. self-attention

 

self - attention은 바로 transformer의 encoder input sequence x1,x2,x3내에서 attention이 일어난다는 것이다.

 

자기 자신 내부에서 attention이 일어난다해서 self-attention이다.

 

hidden vector로 만들고자 하는 vector가 x1이면 이것이 seq2seq의 decoder hidden vector 역할을 하고 나머지 x1,x2,x3는 seq2seq2의 encoder의 hidden vector 역할을 한다.

 

특히 x1이 또 들어간다는 점에 주목하라. x1과 x1,x2,x3 사이 attention이지 x1과 x2,x3 사이 attention이 아니다.

 

x1과 x1,x2,x3 사이 내적에 기반한 유사도를 구하는 것이다.

 

그것이 각 벡터에 대한 seq2seq의 attention score에 대응하는 score이다.

 

score의 softmax를 취한 벡터가 seq2seq의 attention distribution에 대응하는 확률벡터다.

 

이 확률벡터의 가중합으로 x1의 encoding vector를 구한다. 전체적인 아이디어는 비슷하다고 보면 된다.

 

중요한 점은 각 벡터 xi, i=1,2,3는 {x1,x2,x3}와 각각 attention이 일어난다는 점에서 self-attention이라고 부르는 것이다.

 

문제점은 있지만 아무튼 self-attention의 큰 아이디어

 

근데 위 방법의 문제점은 자기 자신과의 내적이 당연히 제일 크다는 점이다. 처음에 ‘당연히’ 이렇게 생각했는데 아닐수도 있을듯?

 

당연히가 아니라 제일 클 가능성이 높다라고 수정해야겠다.. 쓸데없이 자기자신에 대해서는 높은 가중치가 부여된다는 점.

 

다른 단어에 더욱 집중할 필요가 있을 경우도 있는데 생각보다 낮은 가중치가 부여될 수 있다는 점이 문제로 인식이 된것이다.  이것을 어떻게 개선했을까?

 

 

4. Query,Key,Value

 

query,key,value라는 word embedding vector의 특별하게 변형된 벡터들을 생각했다.

 

seq2seq의 decoding hidden vector같은 역할을 하는 x1의 query는 x1,x2,x3 중 어느 벡터의 정보를 더욱 집중적으로 가져올지 생각하는 벡터가 된다.

 

그런데 단순히 query와 x1,x2,x3의 내적을 구하지 않고 <이래도 위험하다고 생각을 했나보지??>

 

x1,x2,x3가 특별하게 변형된 각각의 key vector k1,k2,k3와의 내적을 이용했는데 seq2seq의 encoder의 hidden vector 역할을 한다

 

정리하자면 x1의 query와 x1,x2,x3의 key와의 내적으로 score를 계산했다.

 

그리고 이 score의 softmax로 가중치 벡터를 얻었다.

 

이 가중치 벡터에 x1,x2,x3와 weighted sum을 단순히 한것이 아니라 x1,x2,x3의 특별한 벡터인 value vector v1,v2,v3와의 weighted sum을 한 것이다.

 

self attention의 기본 원리

 

self-attention 모듈 내에는 x1,x2,x3를 각각 query,key,value로 만들어주는 선형변환 $W^{Q}, W^{K}, W^{V}$가 존재한다.

 

이들을 이용해서 하나의 word embedding vector x1은 3가지 query q1, key k1, value v1을 뽑아낼 수 있다.

 

 

각 벡터에 대해 query,key,value를 뽑아내는 선형변환이 $W^{Q}, W^{K}, W^{V}$로 각각 존재한다.

TAGS.

Comments