Transformer - Attention Mechanism (2)
아래는 이번 글을 정리하면서 참고한 자료들이다.
https://codingopera.tistory.com/41
3. Attention [초등학생도 이해하는 자연어처리]
안녕하세요 '코딩 오페라'블로그를 운영하고 있는 저는 'Master.M'입니다. 현재 저는 '초등학생도 이해하는 자연어 처리'라는 주제로 자연어 처리(NLP)에 대해 포스팅을 하고 있습니다. 제목처럼 진
codingopera.tistory.com
Transformer
Transformer는 자연어 처리를 위한 deep learning architecture로 Attention Mechanism을 사용해 input의 문맥을 파악하고 이해해서 그에 따른 적절한 output을 도출하는 model이다. 따라서, 고차원적으로 문맥을 이해하고 병렬 처리가 뛰어난 Transformer 아키텍처는 생성형 모델(Generative Models)에 광범위하게 적용되며, 텍스트 생성, 기계 번역, 요약, 이미지 생성 등 다양한 분야에 활용되고 있다.
Transformer Component
Transformer 모델은 아래와 같이 크게 Encoder와 Decoder로 구분된다. Encoder는 input 문장을 이용해 context vector라는 압축 데이터를 출력하고, Decoder는 Encoder로부터 context vector라는 압축 데이터를 받아 output 문장을 생성한다. 쉽게 말해서, Encoder는 입력받은 정보 중 중요한 부분만 추려서 요약하고, Decoder는 그 요약된 정보를 바탕으로 원래 정보의 전체적인 내용을 다시 파악하거나 새로운 내용을 만들어낸다는 의미이다.
그럼 context vector에 해당하는 압축 데이터를 어떻게 생성할 수 있는걸까? 바로 attention mechanism을 이용해 생성할 수 있으며, Encoder와 Decoder에서 모두 해당 mechanism이 사용된다.
Self Attention Mechanism
Attention Mechanism은 input 문장의 모든 단어에 다 집중하는게 아니라 중요한 단어에 더 집중할 수 있는 기술이다. 따라서, 해당 mechanism은 모델이 input 문장의 전체나 일부를 처리할 때, 문장 내 단어간의 복잡한 관계를 파악하고 중요한 단어에 더 많은 주의를 기울이게 해준다.
이 mechanism이 필요한 이유는 최종적으로 transformer model이 문장 번역과 요약과 같은 작업을 수행할 때, attention mechanism을 통해 주의를 기울일 정보를 이용해서 원하는 작업의 결과를 얻을 수 있도록 도와주기 때문이다.
예를 들어, 위 예시처럼 " The animal didn't cross the street because it was too tired."라는 문장이 존재할 때, 동일한 문장 내에서 각 단어가 어떤 관계를 갖는지 표현할 수 있다.
Attention vs Self-Attention
Attention Mechanism 소스 문장과 타겟 문장 사이의 관계를 모델링하고, Self-Attention은 Attention Mechanism의 특별한 형태로 입력 문장 내의 각 단어가 입력 문장 내의 다른 단어와 어떻게 상호작용하는지를 모델링한다. 즉, 동일한 문장 내에서 정보의 관계를 파악하며, 이를 통해 모델은 각 단어가 전체적인 문맥에서 어떤 의미를 가지는지를 더 잘 이해할 수 있게 된다.
Attention Mechanism's Component
Attention mechanism에서 Query(Q), Key(K), Value(V) vector는 input 문장에 문맥적인 의미를 넣어주기 위해 사용되는 vector들이다. 다음은 Q, K, V에 대한 설명이다.
Query: question
- 현재 분석 대상이 되는 단어
Key: hint
- Query와 비교되는 나머지 단어들
Value: answer
- Key에 대응하는 각 단어의 실제 정보를 담고 있음
예를 들어 수학 문제를 푼다고 했을 때, 수학 문제가 Query가 되는거고, 문제를 해결할 수 있는 핵심 공식이 Key, 문제에 대한 정답이 Value이다. 즉, 문제에 대한 중간 과정을 거쳐 최종값을 얻는다고 생각하면 된다.
→ 여기서 Query, Key, Value는 input 문장을 positional embedding까지 거쳤을 때 나온 부산물이라고 생각하면 된다. 그리고 Attention Mechanism에 Q, K, V를 입력하게 되면, output으로 문맥적인 의미가 존재하는 문장(context vector)을 생성해준다.
추가적으로 아래 그림처럼 원래 Query, Key, Value의 시작 값은 모두 동일하지만, 아래 그림처럼 각 변수에 Weight를 곱해줌으로써 Attention mechanism에 입력돼 계산 과정을 거치는 Query, Key, Value는 모두 다른 값을 갖게 된다.
Attention Mechanism 작동 방식
1. Attention Score 계산
Attention Score는 주로 Query와 Key 사이의 유사도를 측정하는 데 사용되는 값으로 Query와 Key가 서로 얼마나 관련돼 있는지 나타낸다. 가장 일반적인 방식으로 Scaled Dot Product Attention을 많이 사용한다.
Scaled Dot Product Attention
아래 식처럼 Query와 Key 두 벡터를 내적한 후 그 결과를 모두 더한다. 이 점수는 Query와 Key가 얼마나 잘 맞는지를 나타내며, 높은 값은 높은 유사도를 의미한다.
이러한 점곱 결과, Score 값을 Key 벡터 차원수의 제곱근으로 나누어 스케일링하는데, 이 과정은 큰 값의 점곱 결과가 소프트맥스 함수를 통과할 때 그래디언트를 작게 만드는 문제를 완화한다.
2. Attention Weight 계산
계산된 Attention Score를 바탕으로 Attention Weight를 계산하기 위해 보통 소프트맥스(Softmax) 함수를 사용한다. 소프트맥스 함수는 모든 Score를 확률 값으로 변환해 모든 Attention Weight의 합이 1이 되도록 하며, 이 과정에서 높은 Score를 가진 단어는 더 높은 Weight를 받게 되며, 모델의 출력에 더 큰 영향을 미치게 된다.
3. Final Output 계산
마지막으로, 계산된 Attention Weight를 각 Value에 적용해 가중합을 구한다. 여기서, 각 Weight는 해당 Value가 최종 출력에 기여하는 정도를 나타내며, 이를 통해 모델은 input 문장의 중요한 단어에 주목해 정보를 처리하게 된다.
위와 같은 과정을 통해 Attention Mechanism은 Transformer 모델이 문맥적인 정보가 없었던 input 문장에서 문맥적으로 유의미한 문장이 되도록 한다.
Material
나중에 Transformer와 관련해서 참고할 유튜브 자료들이다.
https://www.youtube.com/watch?v=AA621UofTUA
https://www.youtube.com/watch?v=zxQyTK8quyY&t=556s