어텐션이란?
풀고자 하는 Task의 핵심이 되는 정보를 찹아서 집중한다!
주의 주목, 관심 흥미, 뉴진스 어텐션! 등 다양한 뜻으로 쓰이고 있습니다. 자연어 처리 NLP 분야의 혁신으로 이끈 논문 All you need is attention 이란 논문을 다들 읽어보셨을거라고 생각합니다.
트랜스포머 구조를 제안한 논문으로 self-attention, mask attention, multi-head attention 등 다양한 구조를 통해 자연어처리분야의 인코더 디코더 모델을 제안을 하였는데요. 그의 Backbone 이라 할 수 있는 어텐션메커니즘에 대해 설명해보겠습니다.
자연어 처리는 크게 이해(NLU)와 자연어 생성(NLG)가 의 영역이 있고, 자연어 이해는 기계가 자연어를 이해하는 영역, 자연어 생성은 기계가 텍스트를 스스로 생성하는 영역을 말한다.
번역 Task
i am a good student -> machine Trasnlator -> 저는 좋은 학생입니다.
위처럼 번역 Task 에서 i am -> 저는, a good -> 좋은 , student -> 학생입니다. 와 같이 순차적으로 매커니즘에 들어가면서 나와서 번역하는 일련의 과정입니다.
QnA Task
김덕배가 맨시티로 이적을 했다. 김덕배는 이적료를 10만달러를 받았으며, 김덕배는 펩 과르디올라와 점심식사 후 맨체스터 시티 경기장으로 이동 예정이다
Answer : 김덕배는 어디로 이적을 했나요? 맨시티
질문과 본문에서 질문에 핵심이 되는 단어를 찾는다.
어텐션을 사용하는 모델들
기존 RNN, GRU, LSTM 의 한계를 극복하고자 Attention 매커니즘이 탄생
BiLSTM + Attention : 감성분류 , 텍스트 분류
Seq2Seq + Attention : 기계번역, 텍스트 요약
LLM : 어텐션기반의 Transformers 구조의 디코드 또는 인코더 특화된 모델
어텐션의 종류
Bahdanau Attention
Luong Attention
Dot product Attention
MHA
Flash attention
MQA
다양하게 있으나 아래의 어텐션은 Transformers 의 모델 구조가 대중화되고 오픈소스 생태계에서 발전하고 메모리 관련 인퍼런스 학습 속도를 줄이기 위해
Sequence-to-Sequence
- Sequence-to-Sequence 는 입력문장의 정보를 하나의 벡터로 압축하여 컨텍스트를 통해 디코드로 전달한다
- 이 벡터는 인코더의 마지막 시점의 은닉 상태이다
- 인코더의 은닉 상태의 크기를 가지므로 고정된 크기의 벡터이다. 이 벡터를 컨텍스트 벡터라고 부른다.
- 입력문장의 길이와 상관없이 고정된 크기의 벡터에 정보를 모두 압축을 하기 때문에 문장이 길어지면 다 안들어 갈 수 있다.
말 그대로 고정된 크기의 벡터에 정보가 다 압추고디지 않아 정보 손실이 발생할 수 있다. 이를 Bottleneck
- Rnn 계열의 고질적인 장기 의존성 문제로 초기 정보가 손실 전달 -> RNN 은 문장이 길어질수록 성능이 떨어진다.
아래의 논문에서 이제 지적할 수 있는 것이
has to remmber the whole sentence (긴 문장의 흐름을 전체를 기억해야한다) 장기 의존성의 문제
fixed size representation can be the bottleneck(컨텍스트 벡터의 고정된 사이즈) 병목현상
humans do it differently (사람은 각각의 단어에 집중하는 경향이 있다) 문장이 길어질수록 번역 성능의 저하
으로 인해서 seq-to-seq을 개선해서 Attention 메커니즘이 탄생을 했다.
Attention Function
파이썬 자료형의 특징
Key : Value 를 한쌍으로 갖는 자료형이다.
Attention 은 마치 이 Dict 처럼 key 키랑 벨류는 한쌍이다.
1. 어텐션 함수는 주어진 쿼리(Query)에 대해서 모든 키(key)와의 유사도(attention score)를 각각 구한다. [0.1 0.2 0.3]
2. 구해낸 이 유사도를 키와 맵핑되어있는 각각의 '값(Value)에 반영을 해준다. [0.1 0.2 0.3] * Value
3. 유사도가 반영된 값들을 모두 더해서 리턴한다. [0.1, 0.2 0.3] + [0.3 0.45 0.6] + [0.1 0.2 0.3] = Attention Value
key와 Value 는 일반적으로 동일한 경우가 많음
Dot product Attention
내적의 곱을 한 후 총앞의 1로 바꾸기 위해 Softmax 를 사용해준다
어텐션 분포 소프트맥스 함수화 정규화된 유사도의 값을 인코더의 각 은닉 상태에 곱해준다. 그 후 이를 모두 더해준다.
결국 concate 를 해서 디코더에 정보를 줘서 생성을한다!
위 동영상을 참고해서 다시 이해하면 좋습니다.
Teacher Forcing : 기존의 어텐션 스코어로 앞의 결과가 오답이라면, 답을 넣어줘서 다음이라도 잘 나올 수 있게 도와주는것
'AI > Contents' 카테고리의 다른 글
텍스트처리로 문장에 감성분석 (2) | 2024.03.15 |
---|---|
W5X00-EVB-Pico with SSL/TLS (3) | 2024.03.08 |
Chat With RTX 사용방법과 후기 (4) | 2024.02.20 |
Stream을 아시나요? (4) | 2024.02.15 |
Ollama를 활용한 VScode 로 Local GithubCopilot 만들기 - (3) (2) | 2024.02.15 |