Search

Attention

카테고리
DL/ML
Index
DeepLearning
날짜
2024/12/12

1. Recurrent Neural Network

1.1 장거리 의존과 LSTM(Long-Short Term Memory)

RNN은 시간이 진함에 따라서 예전 단어에 대한 기억이 희미해지고, 장거리 정보 처리에 한계가 있음
LSTM은 게이트를 이용해서 선별 기억능력을 확보함
여닫는 정도를 실수로 표현하여 학습을 으로 알아냄

1.2 Seq2Seq

서츠 케버의 Seq2Seq 모델

2014년에 발표된 자연어 처리 분야의 모델로, 인코더와 디코더라는 2개의 모듈을 연결해서 사용하는 모델
가변 길이의 문장을 가변 길이의 문장으로 변형(Many-to-Many)
입력된 시퀀스로부터 다른 도메인의 시퀀스를 출력함
챗봇과 기계번역등과 같은 다양한 분야에서 사용됨
학습은 정답에 해당하는 출력을 알려주는 교사강요(teacher forcing) 방식으로 진행됨
Teacher Forcing
이전 시점의 prediction을 넣는 것이 아니라 정답값을 현재 시점의 디코더의 셀의 입력으로 넣어주는 것
이전 시점의 디코더 셀의 예측이 틀렸을 때, 계속 잘못된 정보가 입력되어 연쇄적으로 디코더 전체 예측의 성능이 낮아질 수 있기 때문에 이를 방지하기 위해서 정답값을 넣어주는 것!

Seq2Seq 구조

Seq2Seq 구조는 인코더와 디코더라는 두 개의 모듈로 구성됨
인코더
모든 단어들을 순차적으로 입력받음
Context Vector
입력 문장의 모든 단어들을 순차적으로 입력받은 뒤에 마지막에 모든 단어정보들을 압축해서 만든 하나의 벡터
디코더
텍스트 벡터를 받아서 번역된 단어를 한 개씩 순차적으로 출력

RNN 기반 Seq2Seq 모델 문제점

하나의 고정된 크기의 컨텍스트 벡터에 모든정보를 압축하려고 하니까 정보 손실이 발생
RNN의 고질적인 문제인 기울기 소실(Vanishing gradient) 문제가 존재

2. Attention

2.1 Attention

어텐션 연산은 디코더에서 출력 단어를 예측하는 매 시점마다 인코더의 전체 입력문장을 다시 한번 참고하여 예측을 진행
→ key, query, value 방식을 통해 해당 시점에 예측해야할 단어와 연관이 있는 입력 단어 부분을 좀 더집중해서 반영

Attention 함수

Query, Key, Value 값에 대해서 주어진 Query(현재 시점의 값)에 대해서 모든 Key(자기자신을 포함한 주변 값들)와의 유사도를 각각 구하고, 이 유사도를 각각의 Value에 반영해서 더한 값으로 구함
Attention(Q,K,V)=Softmax(QK)×VAttention(Q, K, V ) = Softmax(Q・K)\times V
Attention 계산하기
1.
query q와 i번째 key kik_i의 유사도 si=qkTs_i = qk^T 로 계산하기
2.
유사도 벡터 s=(s1,s2,s3,s4)s=(s_1, s_2, s_3, s_4) 에 softmax 적용해서 주목 벡터(attention vector) aa 구하기
→ 여기서 s3s_3 = .442로 유사도가 가장 높아서 s3s_3 이 주목 벡터가 됨
3.
주목벡터 a를 가중치로 해서 value=(v_1. v_2, v_3, v_4) 값이랑 곱하고 더함(value의 가중합 계산)
context vector c=softmax(qKT)=aVc = softmax(qK^T) = aV

2.2 바다나우 어텐션 함수(Bahdanau Attention Function)

Seq2Seq는 모든 정보를 마지막 은닉상태 h5h^5에 넣어줘야하는 부담이 있으
→ 바다나우 어텐션 함수에서는 디코더가 모든 상태 h1,h2, h^1, h^2, … 에 접근 할 수 있어 장기 의존성 문제를 해결

Seq2Seq2 + Attention 모델

Q : t-1 시점의 디코더 셀에서의 은닉 상태 (g5)(g_5)
K : 모든 시점의 인코더 셀의 은닉상태 (h1,h2,,h5) (h^1, h^2, … ,h^5)
V : 모든 시점의 인코더 셀의 은닉상태 (h1,h2,,h5)(h^1, h^2, … ,h^5)
Seq2Seq vs Seq2Seq+Attention
Seq2Seq
gi=tanh1(gi1U3+Uyyi1)g^i = tanh_1(g_{i-1}U^3 + U^yy^{i-1})
oi=tanh2(U2gi)o^i = tanh_2(U^2g^i)
U3U^3 gi1g_{i-1}와 관련된 가중치 행렬
yi1 y^{i-1}은 i-1 시점에서의 디코더의 출력
UyU^y 은 디코더 입력 yi1y^{i-1}를 은닉상태와 결합하기 한 가중치로 선형변환 수행
Seq2Seq + Attention
gi=tanh1(gi1U3+Uyyi1+Ucci)g^i = tanh_1(g_{i-1}U^3 + U^yy^{i-1}+ U^cc^i)
oi=tanh2(U2gi)o^i = tanh_2(U^2g^i)
과거의 문맥인 gi1U3g_{i-1}U^3 와 현재 시점의 입력에 대한 정보인 Uyyi1U^yy^{i-1}
전체 맥락정보인 Ucci U^cc^i를 더해줌