가 오늘 배울 내용입니다.
-
RNN이 가진 가장 큰 단점 중 하나는 장기의존성(long-term dependency)
-
문장이 길어질 경우 앞 단어의 정보를 잃어버리게 됨 (그래서 짧은 시퀀스에서만 효과적)
-
이걸 해결하기 위해 나온 것이 셀 구조를 개선한 (input, output, forget 게이트를 추가한) LSTM, GRU 모델
-
기계 번역에서 RNN 기반 모델이 단어를 처리하는 방법은?
- 문장의 단어가 encoder unit에 input으로 들어가고 그 때마다 은닉 상태의 벡터가 갱신이 되어 들어가게 됨
- 마지막의 히든 스테이트 벡터가 decoder에 들어가게 되고 decoder - 출력층? 에서도 노드당 하나씩 문장 단어가 나오게 됨.
-
그래도 문장이 길어지면 모든 단어 정보를 고정 길이의 hidden state 벡터에 담기 어려운 단점이 있었음
-
처음 단어의 내용부터 다 담기는데 그걸 벡터 하나에 담기엔 부족함
-
그래서 고안된 방법이 Attention
-
한 벡터에 담기는 게 아니라 노드를 지나며 갱신 된 각각의 단어 노드의 hidden state 벡터가 한번에 decoder로 넘어감
- 각 인코더의 time-step마다 생성되는 (입력 단어가 10개라면 10개) hidden state 벡터 간직
-
맨 마지막 히든 스테이트 벡터만 넘겨주고 있었는데, attention을 적용했을 때는 모든 히든 스테이트 벡터를 다 넘겨주게 됨
-
디코더에서는?
- 단어가 생성 (출력?)될 때마다 모든 hidden state 벡터와 얼마나 관련이 있는지 가중치를 구함
- 이 때 디코더의 hidden state 벡터와 인코더의 각 hidden state 벡터 내적 (n개면 1XN인가..?) 해서 가중치 구함
- h1, h2, h3 인풋에 각각 decoder hidden state 벡터를 곱해줌
- 각 hidden state vector의 가중치 (13, 9, 9)
- softmax로 스코어를 확률로 바꿈
- h1 0.96, h2 0.02, h3 * 0.02 하면 h1는 많이 남게 되고 h2, h3 정보는 거의 사라지게 됨
- 그렇게 모든 히든 state vector을 다 더 해서 context vector을 만들게 됨 (output)
- time step 마다 출력할 단어가 어떤 단어에 집중해야 할지 알 수 있음 (attention)
- 이런 과정을 거쳐 단어를 생성하면 인코더에 입력되는 모든 단어의 정보를 활용할 수 있다. => 장기 의존성 문제 해결
(tbc)