Transformer - 4. 멀티 헤드 어텐션 (by WikiDocs)

AI Scientist를 목표로!·2022년 11월 4일
0

멀티 헤드 어텐션

앞에서 배운 어텐션 d_model의 차원을 가진 벡터를 num_heads로 나누었고, 그 나눈 차원을 가지는 Q, K, V 벡터로 바꿔 어텐션을 수행했습니다!

논문 기준으로 512의 차원의 각 단어 벡터를 8로 나누어 64차원의 Q, K, V 벡터로 바꾸어서 어텐션을 수행한 셈인데, 이제 num_heads의 의미와 왜 d_model의 차원을 가진 벡터를 가지고 어텐션을 하지 않고 차원을 축소 시킨 벡터로 어텐션을 수행했는지를 보겠습니다.

연구진은 한 번의 Attention을 하는 것 보다, 여러번의 Attention을 병렬로 사용하는 것이 더 효과적이라고 판단하였습니다.

그래서 d_model (논문에서는 64로 설정)의 차원을 num_head (논문에서는 8로 설정)의 개수로 d_model/num_heads의 차원을 갖는 Q, K, V에 대해 num_heads개의 병렬 어텐션을 수행했습니다.

각각의 헤드들의 가중치 행렬의 값은 전부 다르게 됩니다.


멀티 헤드 어텐션의 이점

멀티 헤드 어텐션을 사용하게 된다면 각각의 어텐션의 시각에서 서로 다른 정보를 수집할 수 있게 됩니다.

예를 들어, '그 동물은 길을 건너지 않았다. 왜냐하면 그것은 너무 피곤하였기 때문이다.'라는 예문이 있다고 가정하겠습니다.

1번째 Attention에서는 "그것"이라는 단어가 (=Query)가 다른 단어들과의 연관도를 구했을 때, "그것"이라는 단어가 "동물"과 연관도를 높게 본다고 가정하겠습니다.

2번째 Attention에서는 "피곤하였기 때문이다"이라는 단어를 연관도를 높게 보았습니다.

이처럼 8번째 Attention까지 각각의 어텐션은 서로 다른 시각으로 바라보는 장점을 가지게 됩니다.

Attention head를 모두 연결한 행렬은 또 다른 가중치 행렬인 W0를 곱해 최종 결과물이 도출되게 됩니다.

하나의 Attention head의 차원을 3차원이라고 가정 했을 때,
8개의 head를 모두 concatenation 하면 차원이 24인 행렬이 만들어 지게 됩니다.

하지만 Transformer의 Encoder는 6개가 쌓여져 있기 때문에 차원의 출력은 동일해야 합니다.

원하는 차원으로 변환하고자 가중치 행렬인 W0를 곱해 최종 3차원의 행렬을 만들어 입력 차원과 같게 됩니다.


멀티 헤드 어텐션은 크게 5가지 파트로 구성이 됩니다.

  1. WQ, WK, WV에 해당하는 d_model 크기의 밀집층(Dense layer)을 지나게한다.
  2. 지정된 헤드 수(num_heads)만큼 나눈다(split)
  3. 스케일드 닷 프로덕트 어텐션
  4. 나눠졌던 헤드들을 연결(concatenatetion)한다.
  5. WO에 해당하는 밀집층을 지나게 한다.
profile
딥러닝 지식의 백지에서 깜지까지

0개의 댓글