08일차 [ LSTM params ] - votus777/AI_study GitHub Wiki

LSTM의 parameters

RNN

                                    기본적인 simpleRNN의 연결구조

오로지 다음 레이어의 노드들 하고 연결되는 FFNN과 다르게
LSTM같은 RNN은 자기회귀 연산이 일어난다.

         RNN은 전체 시점에 대해서 네트워크를 펼친 다음에 역전파를 사용하며 
         모든 시점에 대해서 가중치를 공유합니다. 
         RNN의 이러한 역전파 과정을 BPTT(Backpropagation through time)이라고 부릅니다.    
         - https://wikidocs.net/22886

연산을 끝낸 뒤의 output을 다시 한 번 input으로 올려보낸다고 보면 된다.

그래서 각 단계마다 다른 노드 뿐만 아니라 자기 자신에게도 순환되는
새로운 순환 input이 생겨나서 (노드의 갯수 * 노드의 갯수) 만큼 params이 추가된다.

거기에 기존의 FFNN과 똑같이 다른 레이어와
((input_dim + 1 ) * 노드의 갯수 ) 만큼 연결되어 있는데 여기서 하나의 LSTM 노드 안에는
3개의 sigmoid 1개의 tanh 활성화 함수 층을 가지고 있다.

즉 한 개의 LSTM 노드가 인풋을 받으면 내부적으로 4번의 연산이 일어나는 것이다.

따라서 총 parameter의 수에 _*4_를 해줘야 최종 parameter 값이 나오게 된다.
단 이 연산은 LSTM 노드만 해당된다.

  • 공식 : num_params = [(num_units + input_dim + 1) * num_units] * 4

그러므로 keras29_lstm.py의 경우
LSTM 유닛의 갯수 10개, input_dim = 1 이므로 계산하면 총 480이 나오게 된다.

LSTM
LSTM 유닛 내부 구조

img

이 그림이 더 쉬워 보인다.

img2