본문 바로가기

자연어처리(NLP)

4-2. Transformer(Multi-head Attention) [초등학생도 이해하는 자연어처리]

반응형

 안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다. 현재 저는 '초등학생도 이해하는 자연어 처리'라는 주제로 자연어 처리(NLP)에 대해 포스팅을 하고 있습니다. 제목처럼 진짜 핵심 내용을 쉽게 설명하는 것을 목표로 하고 있으니 자연어 처리(NLP)에 입문하고 싶은 분들은 많은 관심 부탁드립니다. 지금부터 알아볼 내용은 'Transformer'입니다. Transformer 개념은 너무 방대하기 때문에 이번 시간에는 "Multi-head Attention"을 집중적으로 다루겠습니다. 이후 내용들은 다음 글에서 다루도록 하겠습니다. 

 

 본론에 들어가기에 앞이 이분은 "Attention"과 "Self Attention"에 대한 사전 지식이 있어야 이해하기가 쉽습니다. 혹시 이 부분을 보시지 않으신 분들은 아래 링크의 글을 먼저 숙지하고 오시기 바랍니다.  그럼 지난 시간에 이어서 이번 시간에는 Multi-head Attention(멀티 해드 어텐션)에 대해 알아보도록 하겠습니다. 

 

https://codingopera.tistory.com/41

 

3. Attention [초등학생도 이해하는 자연어처리]

안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다. 현재 저는 '초등학생도 이해하는 자연어 처리'라는 주제로 자연어 처리(NLP)에 대해 포스팅을 하고 있습니다. 제목처럼 진

codingopera.tistory.com

https://codingopera.tistory.com/43

 

4-1. Transformer(Self Attention) [초등학생도 이해하는 자연어처리]

안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다. 현재 저는 '초등학생도 이해하는 자연어 처리'라는 주제로 자연어 처리(NLP)에 대해 포스팅을 하고 있습니다. 제목처럼 진

codingopera.tistory.com

 

Multi-head Attention

토의 하는 사람들

 

 아마 이 글을 읽으시는 대부분의 독자 분들께서는 팀 프로젝트 경험이 있으실 겁니다. 저는 개인적으로 일정 수준 이상의 팀 프로젝트의 경우에는 개인적인 프로젝트보다 수월하고 창의적인 아이디어가 많이 떠오른다는 생각이 듭니다. 실제로 제가 대학 학부생 시절에 창업동아리를 했었는데, 많은 창의적인 아이디어들이 회의시간에 나왔습니다. 이렇게 팀 프로젝트가 더 효과적인 결정적인 이유는 다른 사람과 생각을 공유한다는 점입니다. 다른 사람들과 생각을 공유하다 보면 내가 놓쳤거나 미처 생각하지 못한 부분을 발견할 수 있고 때로는 해야 하는 일의 양이 줄어들어 더욱 효율적으로 프로젝트를 진행할 수 있습니다. 이러한 아이디어를 Attention 메커니즘에 적용한 사례가 바로 "Multi-head Attention"입니다. 

 

 

Multi-head Attention

 이전에는 단 한 번의 Attention을 통해 학습을 시켰으나, Attention을 병렬로 여러 개 사용하자 더욱 성능이 좋아졌습니다. 위 그림은 Multi-head Attention 메커니즘을 도식화한 것입니다. 보다시피 head의 수만큼 Attention을 각각 병렬로 나누어 계산을 합니다. 도출된 Attention Value들은 마지막에 concatenate를 통해 하나로 합쳐집니다. 이렇게 하면 Attention을 한번 사용할 때와 같은 크기의 결과가 도출됩니다. 

 

 

일반적인 Attention 메커니즘

 이해를 돕기 위해 예를 들어 보겠습니다. 예를 들어 [4x4] 크기의 문장 임베딩 벡터와 [4x8]의 Query, Key, Value가 있을 때, 일반적인 한 번에 계산하는 Attention 메커니즘은 [4x4]*[4x8]=[4x8]의 Attention Value가 한 번에 도출됩니다. 

 

Multi-head Attention 메커니즘

반면 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 분야가 우리가 사는 일상과 정말 비슷한 부분들이 많다는 것에 신비로움을 느낍니다. 

 

정리

- 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도출

 

  지금 까지 저희는 'Transformer의 Multi-head Attention'에 대해 알아보았습니다. 도움이 되셨나요? 만약 되셨다면 구독 및 좋아요로 표현해 주시면 정말 많은 힘이 됩니다. 궁금한 사항 혹은 앞으로 다루어 주었으면 좋을 주제가 있으시면 댓글 남겨주시면 감사하겠습니다. 저는 '코딩 오페라'의 'Master.M'이었습니다. 감사합니다.

반응형