안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다. 현재 저는 '초등학생도 이해하는 자연어 처리'라는 주제로 자연어 처리(NLP)에 대해 포스팅을 하고 있습니다. 제목처럼 진짜 핵심 내용을 쉽게 설명하는 것을 목표로 하고 있으니 자연어 처리(NLP)에 입문하고 싶은 분들은 많은 관심 부탁드립니다. 지금부터 알아볼 내용은 'Transformer'입니다. Transformer 개념은 너무 방대하기 때문에 이번 시간에는 "Multi-head Attention"을 집중적으로 다루겠습니다. 이후 내용들은 다음 글에서 다루도록 하겠습니다.
본론에 들어가기에 앞이 이분은 "Attention"과 "Self Attention"에 대한 사전 지식이 있어야 이해하기가 쉽습니다. 혹시 이 부분을 보시지 않으신 분들은 아래 링크의 글을 먼저 숙지하고 오시기 바랍니다. 그럼 지난 시간에 이어서 이번 시간에는 Multi-head Attention(멀티 해드 어텐션)에 대해 알아보도록 하겠습니다.
https://codingopera.tistory.com/41
https://codingopera.tistory.com/43
Multi-head Attention
아마 이 글을 읽으시는 대부분의 독자 분들께서는 팀 프로젝트 경험이 있으실 겁니다. 저는 개인적으로 일정 수준 이상의 팀 프로젝트의 경우에는 개인적인 프로젝트보다 수월하고 창의적인 아이디어가 많이 떠오른다는 생각이 듭니다. 실제로 제가 대학 학부생 시절에 창업동아리를 했었는데, 많은 창의적인 아이디어들이 회의시간에 나왔습니다. 이렇게 팀 프로젝트가 더 효과적인 결정적인 이유는 다른 사람과 생각을 공유한다는 점입니다. 다른 사람들과 생각을 공유하다 보면 내가 놓쳤거나 미처 생각하지 못한 부분을 발견할 수 있고 때로는 해야 하는 일의 양이 줄어들어 더욱 효율적으로 프로젝트를 진행할 수 있습니다. 이러한 아이디어를 Attention 메커니즘에 적용한 사례가 바로 "Multi-head Attention"입니다.
이전에는 단 한 번의 Attention을 통해 학습을 시켰으나, Attention을 병렬로 여러 개 사용하자 더욱 성능이 좋아졌습니다. 위 그림은 Multi-head Attention 메커니즘을 도식화한 것입니다. 보다시피 head의 수만큼 Attention을 각각 병렬로 나누어 계산을 합니다. 도출된 Attention Value들은 마지막에 concatenate를 통해 하나로 합쳐집니다. 이렇게 하면 Attention을 한번 사용할 때와 같은 크기의 결과가 도출됩니다.
이해를 돕기 위해 예를 들어 보겠습니다. 예를 들어 [4x4] 크기의 문장 임베딩 벡터와 [4x8]의 Query, Key, Value가 있을 때, 일반적인 한 번에 계산하는 Attention 메커니즘은 [4x4]*[4x8]=[4x8]의 Attention Value가 한 번에 도출됩니다.
반면 Multi-head Attention 메커니즘은 위와 같은 구조로 계산이 됩니다. 여기서는 head의 수를 4개라고 하겠습니다. head의 수가 4개이므로 각 연산과정이 4분의 1만큼만 필요하다는 이야기입니다. 때문에 위에서 크기가 [4x8]이었던 Query, Key, Value를 4 등분하여 [4x2]로 만듭니다. 이렇게 되면 자연스럽게 각 Attention Value는 [4x2]가 됩니다. 이 Attention Value들을 마지막에 concatenate를 시켜주면 위 그림과 같이 크기가 [4x8]이 되어 일반적인 Attention 메커니즘의 결괏값과 동일하게 됩니다. Google research에 따르면 한multi-head attention 장점 multi-head attention 장점 multi-head attention 장점 번에 계산하는 것보다 여러 개를 나누어 병렬 계산하는 Multi-head Attention 메커니즘이 성능이 더 좋다고 합니다. 그 이유는 앞서 설명했듯이 사람들의 회의를 하듯이 여러 부분에서 도출돼 결과를 통해 서로 정보를 상호 보완하기 때문입니다. 이러한 현상을 보면 AI 분야가 우리가 사는 일상과 정말 비슷한 부분들이 많다는 것에 신비로움을 느낍니다.
오늘 배운 내용에 대해 잘 이해가 안되신다거나, 부가적인 설명이 필요하시면, 아래 제 유튜브 영상을 참고하시면 됩니다.
정성스럽게 영상을 제작 했으니 꼭 한번 들러주세요 :)
https://www.youtube.com/watch?v=SR4F6WMqZ0s
정리
- Multi-head Attention: Query, Key, Value값을 한 번에 계산하지 않고 head 수만큼 나눠 계산 후 나중에 Attention Value들을 합치는 메커니즘. 한마디로 분할 계산 후 합산하는 방식.
Multi-head Attention
1. 원래 Query, Key, Value 행렬 값을 head 수만큼 분할
2. 분할된 행렬 값을 통해, 각 Attention value값들을 도출
3. 도출된 Attention value값들을 concatenate(쌓아 합치기)하여 최종 Attention value도출
추가적으로 제가 AI 학습 관련 오픈 카카오톡방을 만들었습니다. AI와 코딩 학습에 목말라 있으신분들이라면 누구나 들어와서 즐겁게 맘껏 정보공유와 AI 공부하시면 될 것 같습니다. 링크는 다음과 같이니 꼭 한번 참석 및 홍보 부탁드리겠습니다.
https://open.kakao.com/o/ggxse9sg
추가적으로 Transformer에 대해 좀더 자세히 알고싶으신 분들은 아래 제 유튜브 영상을 참고하시면 됩니다.
정성스럽게 영상을 제작 했으니 꼭 한번 들러주세요 :)
[Transformer의 Embedding과 Positional Encoding]
https://www.youtube.com/watch?v=-z2oBUZfL2o
[Transformer의 Residual Connection과 Layer Normalization]
https://www.youtube.com/watch?v=eq4zlaqaDvI
Transformer에 대해 python code가 궁금하신 분들은 다음 글이 많은 도움이 되실겁니다!
https://codingopera.tistory.com/74
지금 까지 저희는 'Transformer의 Multi-head Attention'에 대해 알아보았습니다. 도움이 되셨나요? 만약 되셨다면 구독 및 좋아요로 표현해 주시면 정말 많은 힘이 됩니다. 궁금한 사항 혹은 앞으로 다루어 주었으면 좋을 주제가 있으시면 댓글 남겨주시면 감사하겠습니다. 저는 '코딩 오페라'의 'Master.M'이었습니다. 감사합니다.
'자연어처리(NLP)' 카테고리의 다른 글
5. BERT(Bidirectional Encoder Representations from Transformers) (0) | 2023.01.16 |
---|---|
4-3. Transformer(Positional Encoding) [초등학생도 이해하는 자연어처리] (0) | 2022.12.16 |
4-1. Transformer(Self Attention) [초등학생도 이해하는 자연어처리] (10) | 2022.12.13 |
3. Attention [초등학생도 이해하는 자연어처리] (9) | 2022.11.09 |
2-1. BOW(Bag of Words)기반 'TF-IDF' [초등학생도 이해하는 자연어처리] (0) | 2022.10.24 |