transformer의 마지막 encoder-decoder multi head attention

1. encoder-decoder multi head attention

 

decoder의 2번째 attention layer는 특별하게 encoder decoder multi head attention으로 불린다.

 

decoder의 masked self attention 이후 나온 결과는 Query로 들어오고

 

encoder의 최종 결과로 나오는 hidden vector는 적절하게 변형?되어 key,value로 들어온다

 

 

decoder의 query는 encoder가 이해한 맥락정보로부터 받아온 key value중 어떠한 정보에 더 집중할지 attention 연산을 수행하게 된다.

 

그 후 residual connection, layer normalization을 거치고 나온 결과에

 

encoder가 그랬던 것처럼 feed forward neural network에 들어가고

 

residual connection, layer normalization을 거치면서 decoder의 여러 stack을 돌고 최종 decoder의 output vector를 얻는다.

 

 

<sos>, 나는, 집에에 대한 최종 decoder의 output vector를 얻었으면 각 output vector를 linear layer에 넣어 훈련한 vocab size 크기로 변환한다.

 

변환한 vector에 softmax를 취하면 단어별 확률분포를 얻는다.

 

가장 확률이 높은 단어를 선택한다.

 

학습방식은 바로 이렇게 나온 확률벡터로부터 softmax loss를 최소화시키는,

 

정답을 알고 있으니까 정답의 확률이 가장 높도록 backpropagation을 진행하겠죠?

 

 

2. transformer의 성능

 

엄청나게 고심한 아이디어?로 만들어진 transformer의 성능이 NLP 문제에서 많은 경우 좋았다.

 

 

 

BLEU가 40점대가 좋은거야?라고 할 수 있지만 BLEU는 precision기반으로 순서가 조금만 틀려도 점수를 많이 떨어뜨린다.

 

그러나 사람이 느끼는 번역 품질에 있어서 사실 많은 경우 순서가 엄청 중요하다?까지는 아니다.

 

그러네 순서보다 의미가 통하면 되니까

 

아무튼 40점대면 꽤 훌륭한 번역품질이라고 한다

 

 

3. decoder에서 잘못 알고 있었던 점

 

그 동안 decoder는 key,value를 만들지 않는 것으로 알고 있었다.

 

그러니까 ‘encoder에서 만들어진 최상단의 hidden vector가 변형되어 key, value로 decoder에 넘어오는 것’만 강조되어 기억하고 있으니

 

decoder에는 key,value를 만들지 않는 것으로만 알았다.

 

그래서 decoder의 masked attention에서 key에 decoder의 sequence가 있다는 것이 이해가 안되었다.

 

그런데 decoder에서도 첫단에서 masked self attention을 수행하여 query,key,value를 모두 만든다.

 

그리고 여기서 attention하여 얻어진 결과가 decoder의 query로 만들어지고 다음 layer로 들어간다.

 

그리고나서 encoder-decoder multi head attention으로 들어가서 encoder의 최상단 hidden vector로부터 key,value를 받아와 이전 layer에서 만들어진 decoder의 query와 attention을 수행하는 것이었다.

 

 

4. encoder-decoder attention 자세히 생각해보기

 

encoder의 최상층 hidden vector가 decoder로 들어갈때 어떻게 key,value로 변형되느냐? 생각을 해봄

 

1. 각 decoder마다 다른 key,value matrix

 

2. masked self attention의 결과를 query로 만드는 query matrix

 

1,2가 encoder-decoder attention에 대응하는 parameter weight로 존재

 

backpropagation에 의해 weight를 학습하면서 최상으로 변형시키는 과정을 거치겠네… 별거 없었다

 

encoder-decoder attention 구현 코드

 

 

 

encoder의 최상층 hidden vector를 key,value로 바꾸는 matrix(k,v)

 

decoder의 masked self attention을 query로 바꾸는 matrix(q)가

 

각 decoder 스택의 encoder-decoder attention에 존재해서, 들어가기 전에 바꿔줘서 들어간다

 

별거없구나… 생각을 너무 많이해서 이상하게 느꼈나봄

 

 

TAGS.

Comments