출처: https://www.youtube.com/watch?v=kyIw0nHoG9w
출처: https://www.youtube.com/watch?v=6s69XY025MU
Attention 개요
RNN의 단점
Encoder의 마지막 Hidden state 벡터 정보만 넘어간다.
예를들어 '오늘은' '금요일' '입니다.'에서 마지막 '입니다.'의 hidden state vector가 넘어간다.
Attention 구조
여기서 Attention 제안됨
Encoder 부분에서 생성되는 각 단어에 대한 hidden state 정보를 모두 decoder로 전달
각각의 hidden state가 5차원일 경우 3*5 행렬인 [h0, h1, h2] 로 decoder로 전달
Decoder에서 'Today is Friday.'의 단어 'Friday.'를 예측할 때 Encoder에서 전달된 hidden state vector에서 가장 관련이 높은 벡터에 높은 가중치를 할당한다. 더 신경 쓴다(Pay more Attention). (Transformer에서 Energy를 의미하나?)
1. 인코더에서 모든 단어를 행렬 형태로 디코더에 전달
2. 디코더에서 단어를 예측할 때 전달받은 행렬의 각 벡터와의 주의(Attention)를 기울여야하는 지를 가중치로 사용
Attention의 가중치 계산
그럼 어떻게 가중치를 계산하느냐?
> 내적 연산: 코사인 유사도, 유클리드 디스턴스 등 다른 방법보다 연산 속도가 빨라서
Attention Score: softmax()
attention score 계산되면 softmax()를 적용하여 확률로 변환
decoder 과정에서 반복
Self-Attention
인코더 설명 예시
입력된 텍스트 데이터 내에 존재하는 단어들간의 관계를 파악하기 위해 사용
입력 예시
attention score = 단어들간의 유사도
Self-Attention 의 Attention score
계산: 단어들의 embedding vector와 다른 단어들의 벡터들간의 내적 연산
SoftMax() 로 가중치 계산
Transformer에서 Self-Attention
Query, Key, Value : vector
Key, Value : 단어의 id, 단어의 구체적인 정보(dictionary vector)
Query : 유사한 다른 단어를 찾을 때 사용되는 질의 벡터
가중치를 구할 때
임베딩된 벡터의 내적을 구하는 것이 아닌 Q, K, V 벡터의 내적을 계산한다.
Query, Key, Value 벡터 구하기
벡터 계산 예시
Key 가중치 행렬로 Attention score 구하기
Value vector
계산 결과
수식으로 표현하기
각각의 단어로 계산하지 않고 수식으로 한번에 계산하기
QK^T: Q와 K의 내적
예시
Attention: Query, Key 내적의 가중치 합(개별의 내적이므로 맥락, 위치(순서)정보가 없음)
Self-Attention: 맥락 정보(단어에 문장 전체를 포함한다.)
Positional-Encoder: 위치 정보(문장에서 단어의 순서를 추가한다.)
학습방법 특징
Masking: n번 째 단어를 예측할 때 n번 이후의 단어는 학습에 사용되면 안된다. Attention(내적을 구할 때)과정에 n번 이후의 단어의 내적의 값을 절대값이 큰 음수로 만든다. exp() 거치면 0이 되므로 마스킹 된다.
이제 논문을 읽어보자.
구글에서 검색
Transformer 논문
'개발 > AI' 카테고리의 다른 글
[BM25] 사용 예제 (3) | 2024.11.05 |
---|---|
[KoBERT] ChromaDB 사용 예제 (0) | 2024.11.05 |
[llama.cpp] quantize: 양자화 예시 (0) | 2024.01.04 |
[Pytorch] GoogLeNet : 구현 연습 (0) | 2023.11.29 |
[Pytorch] VGG11 논문 구현 코드 (0) | 2023.11.27 |