2020. 2. 7. 22:28ㆍnlp
https://towardsdatascience.com/illustrated-guide-to-recurrent-neural-networks-79e5eb8049c9
RNN과 은닉상태 초기화 → input 단어와 은닉상태를 RNN에 집어 넣기 → 그 단어의 output과 새로운 은닉상태가 출력됨 → 이 출력을 다시 RNN에 집어넣기 → 단어 없을 때까지 반복 → 출력을 FeedForward 레이어에 넣기 → 최종결과(prediction) 출력
은닉상태가 RNN의 기억장치 (저번 출력을 다음 입력으로 넘겨줌)
tanh 함수는 출력을 [-1,1] 사이로 만듦. 따라서 특정 값이 폭발적으로 증가하는 것을 막음.
(문제) Vanishing Gradient (short-term memory)
- 오래 전 정보는 덜 기억하고 최신 정보를 많이 기억함
- 이는 오차역전파back-propagation 때문
- 오차역전파로 gradient가 앞 레이어로 전해질수록 gradient는 급속도로 줄어듦
- 따라서 맨 앞 레이어는 기울기 소실(거의 조정되지 않음), 따라서 가중치도 거의 조정되지 않아 학습 불가
- "What time is it?"에 대한 최종 prediction을 할 때 "What"과 "time"은 거의 고려되지 않을 수도 있음
(보완) LSTM's and GRU's
- 단기기억을 보완하기 위한 방법
- LSTM : Long Short-Term Memory
- GRU : Gated Recuurent Units
- 이들은 '게이트'를 이용해 장기기억 가능
LSTM
Cell State
- 메모리 같은 존재. 중요한 정보를 갖고 다님
- cell state가 흘러가면서 게이트를 통해 정보가 추가되거나 제거됨
- 게이트는 training을 통해 어떤 정보가 중요해서 keep해야 하고 어떤 정보는 버려도 되는지 학습함
Sigmoid
- 출력을 [0,1] 사이로 변환
- 출력을 0으로 만들어 정보를 까먹게 할 수 있음
- 출력을 1로 만들면 정보를 keep
Gates : forget gate, input gate, output gate
Forget gate : 전 단계에서 온 중요한게 뭔지 결정하고 keep함
- 이전의 은닉 상태(hidden state) + 현재의 input data 가 합쳐져서 시그모이드 함수로 넘겨짐
- 출력이 0에 가까우면 안 중요하니까 까먹어라, 1에 가까우면 중요하니 keep하라는 뜻
Input gate : 현재 단계에서 온 중요한게 뭔지 결정하고 add함
- 1) [이전 은닉상태] + [현재 input data] 를 시그모이드 함수에 넘겨줌 : 잊을지 말지 결정
- 2) [이전 은닉상태] + [현재 input data] 를 tanh 함수에 넘겨줌 : 출력을 [-1,1] 사이로 만들어 정규화
- 1)과 2)를 곱하기
- tanh에 모든 입력 정보가 있다면 시그모이드는 그 정보 중 중요한 것만 선별해줌 (안 중요하면 0으로 만들어 잊기)
Cell State 계산
- 기존 cell state * [forget gate output] + [input gate output] = new cell state
Output gate : 새로운 은닉상태를 계산함
- 다음 은닉상태 계산
- 1) [이전 은닉상태] + [현재 input data] 를 시그모이드 함수에 넘겨줌
- 2) new cell state를 tanh 함수에 넘겨줌
- 1) 과 2)를 곱하여 새로운 은닉상태 만들기
GRU
- LSTM의 cell state 대신 은닉 상태 사용
- 2개의 게이트 : Reset gate, Update gate
Update gate
- LSTM의 Forget/Input gate와 유사함
- 어떤 정보를 버릴 지, 어떤 새 정보를 추가할지 결정
Reset gate
- 과거 정보를 얼만큼 버릴지 결정
'nlp' 카테고리의 다른 글
[DL Wizard] Long Short-Term Memory (LSTM) network with PyTorch 번역 및 정리 (0) | 2020.02.08 |
---|---|
[DL Wizard] Recurrent Neural Network with PyTorch 번역 및 정리 (0) | 2020.02.08 |
[DL Wizard] Convolutional Neural Network with PyTorch 번역 및 정리 (0) | 2020.02.06 |
CNN for NLP 번역 및 정리 (0) | 2020.02.06 |
CNN : Convolutional Neural Network 정리 (0) | 2020.02.06 |