입력데이터가 시간적 순서를 지닌 시계열 데이터, 은닉층 내부구조는 순환구조이다.
학습 대상의 가중치는 세가지로,
1.입력층과 은닉층 사이의 가중치 w(ih)
2. 시간 t에서의 은닉층과 시간 t+1에서의 은닉층간의 가중치 w(hh)
3. 은닉층과 출력층 사이의 가중치 w(ho)
공식
H(t)=tanh(xi*w(ih)+Ht-1* w(hh))
입력값에 가중치곱하고 이전은닉층의 출력값에 가중치곱해서 더한 것이다. 시간 t에서 은닉층 SimpleRNN 레이어 출력한다.
이전데이터 몇 개를 묶어서 미래를 예측할 것인가(window-size),
얼마나 먼 미래 값을 예측할 것인가(horizon factor) 설정해야한다.
코드 예시
tf.keras.layers.SimpleRNN(units=10, activation=’tanh’, input_shape(3,1))
입력데이터는 3차원 텐서구조로 이루어져야한다.
batch size : time steps(=window size)으로 분리되어 있는 데이터 총 개수
time steps : 몇 개의 데이터를 이용해서 정답을 만들어내는지
input dims : RNN 레이어로 한번에 들어가는 데이터 개수
그래서 나온게 -> LSTM과 GRU
Ct(셀 상태)라는 변수가 추가적으로 공유된다. 셀상태가 다음 레이어로 전달되면서 기존의 상태를 보존하므로 장기의존성 문제를 해결할 수 있다.
핵심은 이전단계정보를 cell에 저장해서 다음단계로 전달하는 것이다.
3개의 게이트 존재(forget, input, output)
1. forget gate : 시그모이드 입힌 값은 0~1사이값으로 1에 가깝다면 과거정보를 많이 활용한다는 의미이고 0에 가깝다면 과거정보를 많이 잃게 되는 원리이다.
현시점 x, 과거 은닉층 값H(t-1), 각각의 가중치 wt, ut
2. input gate: 현재시점이 얼마나 중요한지 반영하여 cell에 기록한다. 1) 현재시점 데이터와 과거 은닉층 값에 각 가중치곱하고 더한 결과에 시그모이드함수를 적용하여, 어떤 정보를 업데이트할지 결정하고 2) 현재시점의 새로운 정보를 생성.
입력게이트 중요도 I(t), 현재 상태 c
3. output gate : forget gate와 input gate에 의해서 변경된 현재 시점의 memory cell state(Ct)값을 얼마나 빼내서 다음 레이어로 전달할지 결정하는 단계 ->H(t)
LSTM에서 사용되는 cell state가 없는 대신 GRU 출력 H값이 그 역할을 대신한다. 활성화함수는 sigmoid두번 tanh 한번 사용되기에 LSTM에 비해 연산량을 줄일 수 있다. 내부 구조또한 두가지이다.
1. reset gate : 과거 정보를 얼마나 잊을지. 기억할지 결정하는 게이트
2. update gate : 과거와 현재정보 중 어떤 정보를 더 많이 업데이트할지 (input, forget gate합친 것과 같다.)