09일차 [ GRU & simpleRNN ] - votus777/AI_study GitHub Wiki
SimpleRNN (SimpleRNN)
-
그냥 단순한 RNN 순정 유닛, vanilla RNN 이라고도 한다.
-
여기서 가중치는 hypothsis(가설) 이라고도 쓰며 h(x) = y = wx +b 모두 같은 뜻.
1. 각 훈련 샘플에 대해 역전파 알고리즘이 h(x)를 만들고 오차 계산 (정방향 계산) -> 2. 그 다음 역방향으로 각 층을 거치면서 각 연결이 오차에 기여한 정도 측정 (역방향 계산) -> 3. 마지막으로 이 오차가 감소하도록 가중치 조정 (경사 하강법 단계)
-
RNN의 Hidden state는 과거의 가중치 값을 받는 일종의 불완전한 메모리라고 볼 수 있다.
하지만 RNN에서 이것은 단순한 구조를 가지고 있기에 긴 시퀀스 데이터, 장기 기억에 취약하다.
시간이 지나면서 초기 값의 영향이 점점 작아지기 때문이다. 대략 100 timestep 정도. -
이 문제를 해결하기 위해 LSTM은 이것에 다른 유닛을 관통하는 메모리
즉, cell state를 추가한 것이다.
GRU ( Gated Recurrent Unit) 게이트 순환 유닛
-
LSTM를
약간단순화 시킨 버전.
기존에 있던 input, output, forget gate, 3개의 게이트가 존재했었는데
GRU에서는 update gate와 reset gate 두가지 게이트만이 존재한다. -
update gate : 이전 메모리를 얼마만큼 기억할지
reset gate : 새로운 입력을 이전 메모리와 어떻게 합칠지 -
update gate에서의 계산 한 번으로 Forget + input gate의 역할을 대신 할 수 있다.
-
또한 hidden state와 LSTM의 cell state를 하나로 통합시켜서
계산이 간소화되어 학습 속도가 빠르다.
(LSTM : 4회 연산, GRU : 3회 연산, simpleRNN : 1회 연산) -
하지만 LSTM과 달리 hidden state 안의 메모리와 결과값은 컨트롤이 불가능하다.
왜 그런지는 아직 모르겠다. -
심지어 이제 보니 무슨 엉뚱한 사진을 갖다썼었다..
reference