본문 바로가기
AI/NLP

어텐션 매커니즘(Attention Mechanism)

by didi0di 2023. 9. 21.
728x90

 

앞에서 트랜스포머 모델을 살펴봤습니다.

 

 

이전글 : NLP의 핵심, 트랜스포머(Transformer) 복습!

 

NLP의 핵심, 트랜스포머(Transformer) 복습!

ChatGPT 등장 이후, 지금은 거대 언어 모델 (LLM, Large Language Model)의 전성기라고 해도 과언이 아닙니다. ChatGPT는 GPT 3.5와 같은 LM 모델을 Supervised Instruction tuning과 RLHF 대화형 모델로 파인튜닝한 모델

didi-universe.tistory.com

 

 

이 트랜스포머가 NLP 역사에 한 획을 그을 수 있었던 것은 바로

"Attention is All You Need" 라는 논문 제목에서 알 수 있듯이, 어텐션 메커니즘 덕분인데요.

 

어텐션이 무엇인지 자세히 알아보도록 하겠습니다. 

 


 

어텐션 매커니즘(Attention Mechanism)

 

어텐션 매커니즘은 트랜스포머와 같은 모델에서 중요한 역할을 하는데,

간단하게 말하면 다수의 입력 토큰 간의 상호 작용을 계산하는 메커니즘입니다.

이를 통해 모델은 입력 시퀀스의 각 토큰이 출력 시퀀스의 각 토큰에 얼마나 중요한지를 결정할 수 있습니다. 

 

즉 중요한 토큰이 뭐고, 그들에게 얼만큼의 "주의(Attention)"를 주어야 하는지를 결정하는 메커니즘이라고 할 수 있겠네요.

 

 

어텐션 매커니즘의 동작

 

 

  1. 쿼리(Query), 키(Key), 밸류(Value):
    먼저 입력 시퀀스의 각 토큰에 대해 쿼리, 키, 밸류 세 가지 벡터를 생성합니다. 이 벡터들은 선형 변환을 통해 얻어지며, 각각 쿼리 벡터는 어떤 정보를 얻을 것인지, 키 벡터는 어떤 정보를 비교할 것인지, 밸류 벡터는 어떤 정보를 저장할 것인지를 나타냅니다.

  2. 어텐션 스코어 계산:
    쿼리 벡터와 키 벡터 사이의 유사도를 계산하여 어텐션 스코어를 얻습니다. 이 유사도는 다양한 방법으로 계산될 수 있으며, 가장 흔하게 사용되는 방식은 점곱(dot product)이나 스케일링된 점곱(scaled dot product)입니다.

  3. 어텐션 가중치 계산:
    어텐션 스코어를 소프트맥스 함수를 사용하여 정규화하면 어텐션 가중치가 생성됩니다. 이 가중치는 입력 시퀀스의 각 토큰이 출력에 얼마나 기여하는지를 나타냅니다. 높은 가중치를 가진 토큰은 출력에서 중요하게 다루어집니다.

  4. 가중 평균 계산:
    어텐션 가중치를 사용하여 밸류 벡터를 가중 평균하여 출력을 생성합니다. 이 출력은 쿼리 벡터와 관련된 정보를 보유하게 됩니다.

 

 

이런 방식으로 어텐션 매커니즘은 입력과 출력 간의 관계를 동적으로 학습하고, 다양한 NLP 작업에서 문맥 정보를 캡처하는 데 유용합니다.

트랜스포머는 또한 어텐션 메커니즘을 응용한 셀프 어텐션 멀티 어텐션을 도입해서 성능을 더욱 끌어올렸습니다. 

 

트랜스포머는 총 3가지 어텐션을 사용합니다.

 

 

출처: 딥 러닝을 이용한 자연어 처리 입문

 

1번 그림의 셀프 어텐션은 인코더에서 이루어지지만, 2번 그림의 셀프 어텐션 및 3번 그림의 인코더-디코더 어텐션은 디코더에서 이루어집니다. 셀프 어텐션은 본질적으로 Query, Key, Value가 동일한 경우를 말합니다. 반면, 3번 그림에선 Query가 디코더의 벡터인 반면 Key, Value는 인코더의 벡터이므로 셀프 어텐션이라 하지 않습니다.

 

 

 

 

 

위 그림은 트랜스포머 아키텍처에서 3가지 어텐션이 각각 어디에서 이루어지는지를 보여줍니다. 추가적으로 멀티 헤드(Multi-head) 이름이 붙었는데, 이는 뒤에서 설명할 트랜스포머가 어텐션을 병렬적으로 수행하는 방법을 의미합니다.

 

 

먼저 셀프 어텐션에 대해 좀 더 자세히 알아보겠습니다.

 

 


셀프 어텐션(Self-Attention)

 

셀프 어텐션(Self-Attention)은 자연어 처리(Natural Language Processing) 및 기계 번역에서 중요한 개념 중 하나입니다.

 

이를 자세히 설명하겠습니다.

 

셀프 어텐션은 주어진 시퀀스(예: 문장) 내의 각 단어나 토큰이 다른 단어와 얼마나 관련되어 있는지를 계산하는 메커니즘입니다.

이 관련성은 가중치로 표현되며, 각 단어는 시퀀스 내의 모든 다른 단어에 대한 가중치를 부여합니다.

이를 통해 각 단어의 중요성과 문맥을 파악할 수 있습니다.

 

셀프 어텐션의  주요 구성 요소

 

셀프 어텐션도 어텐션과 마찬가지로 쿼리, 키, 밸류로 구성되어 있습니다. 각각의 역할은 아래와 같습니다.

 

  1. 쿼리(Query): 주어진 단어나 토큰에 대한 정보를 추출하기 위한 요청.
  2. 키(Key): 다른 모든 단어나 토큰에 대한 정보를 저장.
  3. 밸류(Value): 각 키(Key)에 대한 값(가중치)을 저장.

 

셀프 어텐션의 동작 방식

 

  1. 쿼리(Query), 키(Key), 값(Value)를 생성합니다.
  2. 각 쿼리(Query)에 대해 모든 키(Key)와의 관련성(스코어)을 계산합니다.
  3. 관련성에 소프트맥스(Softmax) 함수를 적용하여 각 키(Key)에 대한 가중치를 구합니다.
  4. 이 가중치를 사용하여 밸류(Value)를 가중 평균하여 최종 출력을 생성합니다.

 

이처럼 셀프 어텐션은 주로 트랜스포머(Transformer)라는 딥러닝 모델의 핵심 부분으로 사용되며, 

문장 내 단어 간의 의미적 관계를 모델링하는 데 효과적입니다.

이를 통해 기계 번역 및 자연어 이해 등의 자연어 처리 작업에서 뛰어난 결과를 얻을 수 있습니다.

 

 

트랜스포머의 또 다른 중요한 특징인 바로 멀티헤드 어텐션에 대해 자세히 알아보겠습니다.

 

 


 

멀티헤드 어텐션(Multi-Head Attention)

 

멀티헤드 어텐션(Multi-Head Attention)은 트랜스포머(Transformer) 모델에서 사용되는 어텐션 메커니즘 중 하나로,

입력 시퀀스의 다양한 관계를 모델링하고 효과적으로 학습하는 데 사용됩니다.

 

 

멀티헤드 어텐션 동작 방식

 

  1. 헤드의 분리:
    먼저 입력 시퀀스의 각 위치에 대해 여러 개의 어텐션 헤드를 생성합니다.
    헤드는 서로 다른 어텐션 가중치를 학습하기 위해 독립적으로 만들어집니다.
    각 헤드는 다른 관점에서 입력 시퀀스를 바라보며 중요한 정보를 추출하려고 시도합니다.

  2. 헤드 간 어텐션 결합:
    각 헤드가 독립적으로 어텐션을 수행한 후, 그 결과를 결합합니다.
    일반적으로 이는 각 헤드의 어텐션 결과를 선형 변환을 통해 결합합니다.

  3. 최종 출력 생성:
    어텐션 헤드들이 결합된 후, 최종 출력을 생성합니다. 이 최종 출력은 다음 계층으로 전달되거나 다른 계산에 사용됩니다.

 

 

멀티헤드 어텐션의 이점

 

  • 다양한 관점에서 정보 추출
    • 각 헤드는 서로 다른 관점에서 입력 시퀀스를 볼 수 있으므로 다양한 유형의 정보를 추출할 수 있습니다.
    • 이는 모델이 다양한 관계와 패턴을 학습하는 데 도움이 됩니다.
  • 정보의 병렬 처리
    • 멀티헤드 어텐션을 사용하면 여러 헤드를 병렬로 처리할 수 있으므로 효율적인 학습과 추론이 가능합니다.
  • 정보의 추상화
    • 멀티헤드 어텐션을 통해 모델은 입력 시퀀스의 다양한 추상화 수준을 학습할 수 있습니다.
    • 일부 헤드는 저수준 특징에 집중하고 다른 헤드는 고수준 추상화에 집중할 수 있습니다.

 

이처럼 멀티헤드 어텐션은 주로 자연어 처리와 기계 번역과 같은 다양한 자연어 처리 작업에서 적용되며, 트랜스포머 모델의 성능 향상에 큰 역할을 합니다.  이것은 입력 시퀀스의 다양한 관계를 모델링하고 효과적으로 학습하는 데 중요한 기술입니다.

 

 

셀프 어텐션(Self-Attention)과 멀티 어텐션(Multi-Attention)은 자연어 처리 및 기계 번역과 같은 딥 러닝 모델에서 중요한 개념입니다. 이 두 어텐션 메커니즘의 주요 차이점을 설명하겠습니다.

  1. 셀프 어텐션(Self-Attention):
    • 셀프 어텐션은 주어진 입력 시퀀스(일반적으로 토큰 또는 단어) 내에서 토큰 간의 상호 작용을 모델링합니다.
    • 각 토큰은 자신과 다른 모든 토큰 간의 관계를 계산하고 이를 사용하여 가중 평균을 구합니다.
    • 예를 들어, 트랜스포머(Transformer) 모델에서 셀프 어텐션은 문장 내의 각 단어가 다른 단어와 얼마나 관련되어 있는지를 계산하여 문장을 이해하는 데 사용됩니다.
    • 셀프 어텐션은 주로 시퀀스 내의 토큰 간 상호 작용을 모델링하고자 할 때 사용됩니다.
  2. 멀티 어텐션(Multi-Attention):
    • 멀티 어텐션은 다른 시퀀스 간의 관계를 모델링하는 데 사용됩니다.
    • 주로 번역 또는 문서 분류와 같은 작업에서 여러 입력 시퀀스(예: 소스 문장과 대상 문장) 간의 관계를 이해하는 데 활용됩니다.
    • 멀티 어텐션은 주로 하나의 시퀀스가 다른 시퀀스에 얼마나 중요한지를 결정하고 이 정보를 사용하여 작업을 수행합니다.
    • 예를 들어, 번역 작업에서 멀티 어텐션은 소스 문장과 대상 문장 간의 상호 작용을 모델링하여 번역된 문장을 생성합니다.

 

요약하면, 셀프 어텐션은 시퀀스 내의 토큰 간의 상호 작용을 모델링하고, 멀티 어텐션은 다른 시퀀스 간의 관계를 모델링합니다.

 

셀프 어텐션은 관계를 파악하고자 하는 단어 간의 상호 작용을 모델링하는 데 사용되고, 멀티헤드 어텐션은 다양한 관점에서 정보를 추출하고 모델의 표현 능력을 향상시키기 위해 여러 개의 셀프 어텐션 계층을 사용하는 메커니즘입니다.

 

 

이러한 어텐션 메커니즘은 다양한 자연어 처리 작업에 사용되며, 각각의 목적에 맞게 활용됩니다.

 

 

다음으로 어텐션 가중치를 생성할 때 사용하는 소프트맥수 함수에 대해서 자세히 알아보고,

왜 소프트맥스 함수를 사용 하는지에 대해 알아보도록 하겠습니다.

 

 

 

 

728x90

댓글