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