본문 바로가기
머신러닝(Machine Learning)

NLP 트랜스포머 네 번째, 멀티 헤드 어텐션 Multi-Head Attention 알아보기

by Blaze_블즈 2023. 8. 1.

안녕하세요 

블레이즈 테크노트 

블레이즈 입니다. 

 

지난 포스팅 

트랜스포머 세 번째, 셀프 어텐션 알아보기에서 셀프 어텐션에 대한 기본적인 구조를 알아봤습니다. 

 

NLP 트랜스포머 세 번째, 셀프 어텐션 알아보기

안녕하세요 블레이즈 테크노트 블레이즈 입니다. 트랜스포머 두 번째 이야기에서 포지셔널 인코딩(Positional Encoding)에 대해서 알아봤습니다. https://blazetechnote.tistory.com/entry/NLP-트랜스포머-두-번째

blazetechnote.tistory.com

 

이번 포스팅에서는 

셀프 어텐션이 RNN에 비해서 훨씬 빠를 수 있었던 이유 중 하나인 

병렬 처리를 가능하게 한 매트릭스 계산과 멀티 헤드 어텐션에 대해 알아보겠습니다. 

 

 

임베딩을 벡터가 아니라 매트릭스 형태로 치환하면 

아래의 그림처럼 Query 매트릭스, Key 매트릭스, Value 매트릭스를 만들 수 있습니다. 

 

임베딩을 매트릭스로 바꿨을 때 얻을 수 있는 매트릭스 https://jalammar.github.io/illustrated-transformer/

 

그리고 지난 포스트에서 살펴본 것처럼 key의 차원의 제곱근으로 나눕니다. 

이어서 softmax를 취하고 Value 매트릭스와 곱해주면 

Query에 대한 Scaled Dot-Product Attention 값들이 저장된 매트릭스를 얻을 수 있습니다. 

 

최종적으론 하나의 Self-Attention Layer를 거쳤을 때 얻게 되는 매트릭스

 

위의 그림은 인풋이 Thinking Machine이라는 2개의 토큰으로 나눠진 경우에 대한 그림입니다. 

정리해보자면 이렇게 하나의 Self-Attention 층이 완료된 것입니다. 

 

 

한 편, 실제 모델에서는 Multi-Head Attention 을 사용했습니다. 

 

멀티 헤드 어텐션이란 셀프 어텐션을 여러 개 적용한다는 의미입니다. 

 

지금까지 살펴본 셀프 어텐션은 Scaled Dot-Product Attention이었습니다. 

 

이 기술은 인풋 내의 모든 단어사이의 유사도를 얻을 수 있다는 특징이 있는데 

이 유사도를 계산하는 과정(내적)이 한 번만 시행되었습니다. 

 

멀티 헤드 어텐션의 목적은 이러한 과정을 여러번 거쳐서 

단어 사이의 어텐션 값을 구하는데 

더 치우치지 않은 중립적인 어텐션 값을 얻고자 함입니다. 

 

2개의 헤드로 구성된 멀티 헤드 어텐션 예시 https://jalammar.github.io/illustrated-transformer/

 

이 때 각 W0Q와 W1Q는 독립적으로 학습되어야 합니다.

마찬가지로 각 W0K와 W1K 독립적으로 학습되어야 합니다.

실제 논문의 경우 8개의 헤드를 가진 멀티 헤드 어텐션을 적용했습니다. 

 

아래의 그림은 보다 실제 논문에 가까운 형태로 나타낸 그림인데요

"Anthony Hopkins admired Michael Bay as a great director."라는 문장을

9개의 토큰(물론 실제로는 단어 단위 별로 토큰이 나뉘는 것은 아니지만)으로 임베딩을 했을 때

어텐션이 계산되는 과정을 보여줍니다. 

 

아래의 그림에서 Q 가 64차원인 이유는 사실 이 Q가 이미 W0Q와 곱해진 Q0이기 때문입니다.

인풋 문장이 9개의 토큰으로 나눠졌을 때의 예시. 출처: https://data-science-blog.com/blog/2021/04/07/multi-head-attention-mechanism/

이렇게 구한 값은 하나의 헤드가 됩니다. 

 

그리고 우리는 총 8개의 헤드로 나눴으므로 결과값은 8개의 헤드 매트릭스가 나올 것입니다. 

 

아래의 그림처럼 말입니다. 

 

8개의 헤드를 가진 어텐션의 모습. https://jalammar.github.io/illustrated-transformer/

 

8개의 헤드로 구성된 멀티 헤드 어텐션을 적용하면 결괏값도 8개가 생성될 것입니다. 

그러나 이렇게 얻은 8개의 매트릭스를

다시 하나의 매트릭스로 만들어서 Feed Forward Neural Network 에게 넘겨주어야 합니다. 

 

이를 위해서 먼저 concatenate 과정을 거칩니다. 

그리고 나서 미리 학습한 WO와 곱해줘서 input의 최종 represeantation인 Z를 완성합니다. 

위의 그림에서 주의하셔야 할 점은 

단순화를 위해 모델의 차원을 4로 감소시켜서 표현했다는 점입니다. 

 

실제 논문에서는 512 차원을 64차원씩 8개로 쪼갰다가 다시 붙입니다. 

따라서 Z0부터 Z7까지 concatanate한 것과 최종 Z의 크기가 동일합니다.

 

그림에서는 모델의 차원을 4로 줄여서 표현했기 때문에 마치 8개를 압축해서 더 줄인 것처럼 보이는데 

실제로는 그건 아니라고 말하고 싶습니다. 

 

이렇게 concatanate 하고 weight 행렬을 곱하는 과정까지를 모두 총칭해서 MultiHead 함수라고 하는데요 

조금 더 복잡한 그림으로 보자면 아래의 그림과 같습니다. 

 

멀티 헤드 어텐션의 다층구조

멀티 헤드 어텐션의 목적에 대해서 Transformer 논문에서는 다음과 같이 말하고 있습니다. 

 

 

Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this.

 

 

이 말이 어떤 말인지 잘 감이 안오는데요, 

제가 이해하기론 어텐션을 계산하는 과정에서 어떤 단어를 참고하는 정도가 치우치는 것을 방지하는 효과가 있다는 것 같습니다. 

 

 

"The animal didn't cross the street because it was too tired." 라는 문장을 해석할 때 

it이라는 단어가 어떤 단어와 문맥적으로 연관이 있느냐 하는 질문에 대해서 

아래의 그림 중, 주황색 헤드는 animal에 집중하고 있습니다. 

한편, 초록색 헤드는 tired에 집중하고 있네요. 

 

앞에서 말씀드린 것처럼 weight 매트릭스가 독립적으로 학습되었기 때문에

이렇게 동일한 input에 대해서 서로 다른 어텐션 결과가 나올 수 있는 것입니다. 

 

멀티 헤드 어텐션에 대한 의미 설명

 

 

이렇게 함으로써 독립적으로 훈련된 weight 매트릭스 개별의 영향력을 중화하고 

it이 연관을 맺고 있는 단어들을 최대한 객관적으로 파악하기 위해 

멀티 헤드 어텐션 전략을 세웠다고 볼 수 있을 것 같습니다. 

 

 

실제 논문 어펜딕스에 첨부된 그림을 보겠습니다.

 

위 그림을 보면 보라색 헤드는 Law를, 갈색 헤드는 application에 초점을 맞추었습니다. 

이를 해석해보면 보라색 헤드는 문장의 의미에 가중치를 두었으며 

갈색 헤드는 문장의 문법적 구조에 가중치를 두었음을 알 수 있습니다. 

 

 

 

 

지금까지의 내용을 정리해보도록 하겠습니다. 

 

멀티 헤드 어텐션 전체 개요. https://jalammar.github.io/illustrated-transformer/

 

첫 째, input 문장을 임베딩 매트릭스로 변환합니다. 

둘 째, 8쌍의 Weight 매트릭스를 곱해서 8쌍의 Q, K, V 매트릭스를 만듭니다. 

셋 째, 8쌍의 Q, K, V에 대하여 Attention(Q, K, V) 계산을 합니다. 

넷 째, 생성된 8개의 Z 매트릭스를 concatanate합니다. 

다섯 째, 또 다른 Weight 매트릭스와 곱해서 최종 Z 매트릭스를 구합니다.

 

 

감사합니다. 

블레이즈 테크노트