부스트캠프/day 정리

[week 3 - day 3] Transformer 이해하기

요다다 2023. 3. 22. 21:55

Transformer는 자연어 처리 분야에서 매우 효과적으로 사용되는 딥러닝 모델 중 하나이다.

RNN은 n개의 입력이 들어오면 n번을 재귀적으로 거치는데, Transfomer는 입력 시퀀스 전체를 한 번에 처리한다.

흐름

전체적인 흐름은 다음과 같다.

인코더의 입력은 input embedding에 위치 정보(positional encoding)을 더해서 만든다.

 

 

step별로 Transfomer를 이해해보겠다.

step 1
step 2

self-attention이란?

입력 시퀀스 내의 모든 위치에 대해 가중치(w)를 계산하고, 이를 사용해 모든 위치의 특성 벡터를 조합한다. 

=> 이 과정을 통해 입력 시퀀스의 각 위치에서 다른 모든 위치에 대한 중요도를 계산할 수 있음

 

+) 질문 1. key와 value는 같은 의미 아닌가 ?   

  • key 벡터 : "cat" 단어의 의미를 나타내는 벡터. 이 벡터는 모든 단어의 의미 벡터와 같이 사전 학습된 워드 임베딩에서 가져온다.
  • query 벡터 : self-attention 연산을 수행하기 위해 "cat" 단어를 대상으로 하는 쿼리 벡터. 이 벡터는 "cat" 단어의 의미를 나타내는 벡터와 동일함.
  • value 벡터 : "cat" 단어의 의미를 나타내는 벡터. 이 벡터도 key 벡터와 같이 사전 학습된 워드 임베딩에서 가져온다.

다른 역할이기 때문에 다르다.

key 벡터는 self-attention 연산에서 다른 단어들과의 유사도를 계산하는데 쓰이고,

value 벡터는 self-attention 연산 결과로서 반환되는 가중치 합에 사용된다.

...어렵다..........

 

무튼, self-attention을 통해 score를 구한다 !

score는[[ key 벡터 * value 벡터의 내적 / sqrt(dk) ]]이다. 

이후, softmax를 취해, 각 값의 합이 1이 되도록 바꾼다. 

 

이후, representation은 weighted sum 방식으로 구해주면 된다.

representation vector = softmax값 * value 벡터의 합

 

 

step 3. Multi-Head Attention & Feed-Forward Network

위 과정처럼 self attention을 여러 번 수행하되, 서로 다른 가중치 벡터를 사용하여 여러 관점에서 입력 시퀀스를 바라본다.