이번 포스트는 여러 가지 Attention이 종류 중 하나인, Multi-Head Attention에 대해 다뤄볼 예정입니다.
Multi-Attention은 다음과 같이 Head의 수만큼 Attention을 각각 병렬로 나누어 계산을 한 후, 생성된 Attention Value들을 Concatenate 하여 하나로 합치는 과정을 의미합니다.
이와 같은 과정을 수행하면 Attention을 한 번 사용할 때와 같은 크기의 결과를 얻을 수 있습니다.
위 과정을 구체적인 예를 통해 다뤄보도록 하겠습니다.
아래 예시 이미지와 같이, 4x4 Size의 Embedding Vector와 4x8의 Query(2x4), Key(2x4), Value(2x4)가 있다면, 일반적인 Attention Mechanism은 [4x4] * [4x8] = [4x8]의 Attention Value가 한 번에 도출됩니다.
반면, Multi-Head Attention Mechanism은 아래 예시 이미지(Num_Head = 4)와 같이 계산됩니다.
Head의 수가 4개이므로 각 연산 과정은 1/4만큼씩 나눠집니다.
Query, Key, Value는 4등분되어 각각 4x2 Size가 되고 동일한 Attention 계산에 의해 Attention Value는 4x2가 됩니다.
이러한 Attention Value들을 Concatenate시켜주면 최종적으로 4x8이 되어 앞서 예로 들었던 일반적인 Attention Mechanism의 결과와 동일한 결과가 나오게 됩니다.
일반적으로, Attention을 한번에 수행하는 것보다 여러 개로 나누어 계산하는 Multi-Attention의 성능이 더 낫다고 합니다. 여러 부분의 값들이 서로 상호 보완하는 구조가 되기 때문입니다.
결론적으로, Multi-head Attention은 Query, Key, Value 값을 한 번에 계산하지 않고 Head 수만큼 나눠서 계산한 후 나중에 Attention Value들을 합치는 메커니즘이며, 일반적인 Attention보다 더 나은 성능을 보인다고 정리하면 될 것 같습니다.
이번 포스트는 여기서 마무리하도록 하겠습니다.
'Programming > Deep Learning Network' 카테고리의 다른 글
[Model] About Transformer : Attention Is All You Need (0) | 2023.10.31 |
---|---|
[Model] About Attention Mechanism (1) | 2023.10.31 |
[Model] About Self-Attention (1) | 2023.10.31 |
[Model] About seq2seq (Sequence-To-Sequence) (0) | 2023.10.31 |
[Code] XNect (0) | 2023.04.04 |
댓글