Attention Score를 구하는 유사도 h(enc) s(dec)
(1) Dot product
(2) Scaled Dot product
(3) Weighted Dot product
Bahdanau Attention
RNN이나 CNN을 전혀 필요 X
대신 Positional Encoding을 사용해 순서에 대한 정보 이용
Encoder와 Decoder로 구성됨
Input 문장을 Embedding Matrix 형태로 바꾸고 Positional Encoding 정보와 함께 Attention layer에 넣어줌
각각의 단어가 서로에게 얼마나 연관성이 있는지를 알기 위해 사용
입력 문장에 대해서 문맥의 정보를 학습하도록 만듦
추가적으로 잔여학습(Residual Learning)을 사용
encoder의 마지막 레이어에서 나온 출력값을 매번 decoder layer에 입력으로
decoder의 layer 하나에는 2개의 Attention layer 사용
첫번째 Attention은 encoder와 마찬가지로 각각의 단어들이 서로가 서로에게 어떤 가중치를 가지는지 구해 출력 문장 표현 학습
두번째 Attention은 encoder의 정보를 Attention 할 수 있도록 즉, 각각의 출력 단어가 encoder의 출력 정보를 사용
--> 각각의 출력 단어가 saurce문장에서 어떤 단어와 연관 있는지 학습
encoder의 출력은 모든 decoder layer에 입력으로 들어감.
기존 RNN에 비하여 < eos >가 나올때까지 반복하지 않고, 문장을 한꺼번에 임베딩하고 Positional Encoding을 사용하므로 계산 복잡도가 낮음
decoder의 경우 < eos >가 나올때까지 반복함.
context vector를 사용하지 않기에 네트워크에서 RNN 구조 사용할 필요 X
ex) I am a teacher에서 I, am, a, teacher 단어가 각각 얼마나 연관성을 가지는지 파악하기 위해 self Attention을 사용
쿼리 : 물어보는 주체 ex) I
키 : 물어보는 대상 ex) am, a, teacher
값
쿼리와 키를 사용해 attention score를 구함
필요에 따라서 scale을 조정하고, Mask를 씌우고 Softmax를 취해 연관성을 확인
값을 곱해 최종 attention value를 구함
V,K,Q는 h개의 linear layer를 통과해 서로다른 V,K,Q를 이용해 Attention 컨셉을 학습해 다양한 특징 학습
모든 Attention의 동작 방식은 비슷하며
encoder, decoder의 Attention에서는 decoder의 출력 단어가 쿼리가 되고, 키와 값은 encoder에서 가져옴
Quary와 Key의 곱을 통해서 score를 구하고 scale factor인 d로 나누어주어(gradient vanishing 문제를 피하기 위해) softmax를 취하고 Value를 곱해주어 Attention Score를 구함
서로다른 linear레이어를 만들기 위해서 각각 다른 w를 곱해주어 head를 만듦
위 과정을 각각 진행하고 하나로 concatenate하여 다양한 feature 학습