멀티 헤드 어텐션
- 셀프 어텐션을 더 확장하여, 문장의 각 의미적 문맥에 대한 별개의 어텐션 벡터를 만들 수 있다.
x<t>↓q<t>,k<t>,v<t>↓WiQq<t>,WiKk<t>,WiVv<t>↓Softmax↓Attention(WiQq<t>,WiKk<t>,WiVv<t>)=headi
- 각 시퀀스 요소는 자신의 쿼리, 키, 값을 가진다.
- 여기까지는 셀프 어텐션과 동일하다.
- 이후 각 q, k, v는 i 번째 헤드의 가중치과 곱해지고, softmax 함수를 통해 어텐션 가중치를 얻는다.
Jane visite l’Afrique en septembre.
- ”헤드” 는 문장에서의 의미적 문맥을 나타내는 단위이다.
- Head 1: 문장에서 뭘 하려는가? -> visite=x<2> 가 첫번째 헤드 소프트맥스에서 가장 큰 값
- Head 2: 누가 하려는가? -> Jane=x<0> 가 두번째 헤드 소프트맥스에서 가장 큰 값
- Head 3: 언제 하려는가? -> septembre=x<3> 가 세번째 헤드 소프트맥스에서 가장 큰 값
- Head 4: 어디서 하려는가? -> l’Afrique=x<5> 가 네번째 헤드 소프트맥스에서 가장 큰 값
MultiHead(q,k,v)=Concat(head1,⋯,headH)W0
- 이때 W0는 최종 출력을 위한 가중치 행렬이다.
- 이처럼 각 헤드가 독립적으로 다양한 패턴을 학습할 수 있기 때문에, 멀티 헤드 어텐션은 더 많은 문맥적 정보를 포착할 수 있다는 장점이 있다.