attention 네트워크
내적(inner product)
C4 = S4,
Transformer
: attention 기반의 encoder-decoder 알고리즘
Attention
. 그렇다면 어떻게 하면 되는가?
Encoder 부분에서 생성되는 각 단어에 대한 hidden state 정보를 모두 decoder로 전달
만약 hidden state vector가 5차원이면 3개의 단어에 대한 hidden state vector는 3x5차원
예: 오늘은 수요일 입니다 => Today is Wednesday 로 번역하는 경우
. Wednesday를 예측하기 위해 수요일에 해당하는 hidden state vector h1에 더 가중치를 줌
. 즉, 디코더 부분에서 예측하고자 하는 단어와 더 관련이 높은 인코더의 입력 단어와 매칭되는 hidden state vector에 더 가중치를 준다!
. 가중치의 합은 1이 되도록 weight 를 줌 ~ Ex. h0의 w0: 0.1 / h1의 w1: 0.8 / h2의 w2: 0.1
Attention 층에서 출력되는 값은? : 위의 결과 벡터들을 더한 벡터
h0xw0+h1xw1+h2xw2 :
가중치의 계산
. 유사도를 구하기 위한 방법 ~ 내적, 유클리디안 거리, 등등
. 내적이 속도가 훨씬 빠름
. 가중치는 hs의 각 hidden state와 decoder에 예측하고자 하는 단어에 대한
hidden state와의 유사도를 가지고 계산
. decoder 부분의 첫번째 RNN층에서 출력되는 'Today' 단어를
예측하는데 사용되는 hidden state => hd,0
. h0, h1, h2와 hd,0과의 내적 연산
-> 이 값들을 attention score라고 함 -> 값이 클수록 관련도가 크다!
. Attention score를 가지고 가중치를 계산
. 가중치는 확률값으로 표현
. 확률값을 계산하기 위해서 attention score에 softmax()를 적용
최종적으로 출력되는 값
. Attention에서 출력되는 값과 RNN 층에서 출력되는 값 간의 이어붙이기(concatenation)
. 즉, Concat((1.0 0.1 0 0.9 1.8),(1 0 0 0 2)) = (wxh, hd,0)
seq2seq 구조의 단점
왜 소프트맥스 함수를 사용하여 확률로 해석?
: 단순히 모든 출력값을 더해서 각 원소에 나눠주면 각 값들에 대한 확률로 해석할 수 있지 않나?
숫자의 크기가 다르면 비율이 일정하더라도 확률이 크게 차이난다.
. softmax는 등장한 값에 대한 비율만을 고려하는 것이 아니라 값의 크기까지 고려한다.
동일한 비율로 등장하더라도 더 많은 횟수로 예측되었다면 등장할 확률을 높게 계산함
. 단점 : 값이 지수함수적으로 변하다 보니 너무 커지는 바람에 overflow 문제가 자주 발생
자연로그를 사용하는 주요 손실함수
. cross-entropy함수를 비롯한 다양한 함수에서 확률 값에 log를 취한 값 logpi를 사용
여기에 exp 함수를 취해주면 확률값 자체만을 가져올 수 있는 효과를 줌
이런 경우 softmax는 최대 가능도를 추정하도록 학습함
boltzmann factor = e^-{E(s)/kT}
E(s) : 어떤 상태 s일 때 입자의 에너지
k : 볼츠만 상수
T : 열평형 상태에서의 온도
어떤 상태 s에서 에너지 E(s)를 가지는 입자를 발견할 확률
P(s) = 1/Ze^-{E(s)/kT}
P(s) = e^-{E(s)/kT} / \sum e^-{E(s)/kT}
=> 이 식은 온도 T인 열평형 계에서 상태 s에 있는 입자를 발견할 확률을 의미함.
많은 과학 분야에서 사용되다가 1959년 Robert Duncan Luce
자신의 책 : Individual Choice Behavior: A Theoretical Analysis
기계학습에서 소프트맥스로 알려진 위 식을 사용할 것을 제안
1989년 Hohn S. Bridle은 비선형성 네트워크 출력을 확률로 처리하고자 소프트맥스 사용을 제안
지금까지 설명한 어텐션: encoder-decorder attention
. self-attention은 입력된 텍스트 데이터 내에 존재하는 단어들간의 관계를 파악하기 위해 사용
Self-attention
Simple example
Transformer에서의 self-attention( or attention)
작동 순서
Query, Key, Value 벡터 구하기
Today = (1 0 0 1 1), is = (1 0 0 1 0), Monday = (1 1 0 0 1)
Today에 대해서 Attention 작업을 수행하는 경우
Query 가중치 행렬 : 5 x 3 형태로 가중치 행렬 생성 후 초기화(랜덤)
Today embedding vector x Query 가중치 행렬 = (2 0 2)
Key 가중치 행렬
단어 1에 대한 Query 벡터 : (2 0 2)
단어 1에 대한 Key 벡터 : (3 2 1)
단어 2에 대한 Key 벡터 : (2 2 0)
단어 3에 대한 Key 벡터 : (2 1 2)
내적 연산
softmax 적용
softmax(8 4 8) = (0.5 0 0.5)
0.5 x (1 2 2) = (0.5 1 1)
..
최종 결과물: 각 벡터의 합
Attention(Q,K,V) = Softmax(QK^T)V
Softmax(QK^T) = 가중치