RNN(Recurrent Neural Network)

  • 첫 번째 Input이 두 번째 Input에 영향을 주는 형태
  • Input을 입력하는 순서가 결과에 영향을 준다.
  • ex) 날씨 데이터, 교통량 등 축적된 데이터

RNN의 학습 유형

  • Many to One
  • Many to Many
  • One to Many
  • One to One

Gradient Vanishing

  • Time Step을 200~300 이상으로 설정할 때 gradient vanishing 문제가 발생할 수 있다.
  • Gradient가 1보다 작아졌는데 계속해서 곱하게 되면 0으로 수렴해서 ‘사라지게’ 된다. 이는 gradient 계산이 곱셈 연산으로 이루어져 있기 때문이다.
  • 각 단계의 Gradient가 너무 작으면 반복이 발생할 때마다 weight가 충분히 변하지 않고, 더이상 학습이 되지 않을 것이다. (Global minimum을 찾을 수 없다)
  • Sigmoid나 tangent 역함수의 경우에도 크거나 작은 x 값에 따라 기울기가 0에 가까워진다. Activation Function으로 Sigmoid 대신 ReLU를 사용하는 이유 중 하나도 Gradient Vanishing 때문이다.

LSTM, GRU Layer

LSTM (Long Term Shot Memory)

  • Gradient vanishing 문제를 해결할 수 있도록 RNN cell을 변경한 구조.
  • 곱셈으로 이루어진 gradient 연산에 덧셈을 추가하여 문제를 해결했다.
  • 더 자세한 설명은 LSTM-RNN-Tutorial 이곳에서!
model = Sequential()
model.add(LSTM(256, input_shape=(10, 1)))
model.add(LSTM(256))

GRU (Gated Recurrent Unit)

model = Sequential()
model.add(GRU(256, input=shape(10, 1)))
model.add(GRU(256))

Input/Output

  • Input은 (N Sample, N time step, Value)의 형태로 주어진다.
  • Many to One: Output은 단순한 value 형태
    • (N Sample, Value)
    • ` return_sequences=False`
  • Many to Many: Output은 Time Step을 고려한 3차원 데이터
    • (N Sample, N time step, Value)
    • ` return_sequences=True`

참고 링크 추가