본문 바로가기

Data-science/deep learning

[Coursera 강의] Sequences, Time Series and Prediction - 3주 차. Recurrent Neural Network for time series prediction, forecasting (TensorFlow Developer 전문 자격증 강의)

728x90

coursera 강의를 정리해서 스스로 이해를 돕기 위해 만든 자료입니다.

RNN 등장

  • 위 그림은 X를 time series data라고 하면 X가 RNN을 거쳐 Vector로 출력되는 걸 나타낸다.

  • X는 window_size가 30인 series이다. 즉 과거 30개의 data를 통해 다음 값을 예측하는 것이라고 볼 수 있다. 각 X는 batch 크기 만큼(위 그림에선 4) 입력으로 들어가고 RNN내부 Mem Cell에서 Unit 크기 만큼, 곱해진 크기로 출력한다.

  • Mem Cell의 unit이 3이라면 위에서 30개의 Y는 각각 4(batch_size) x 3(unit 개수) 크기 만큼의 matrix 형태를 가진다. 일반적인 RNN의 경우 각 mem cell의 H는 이전 Y 값과 동일하다.

  • sequence_to_vector의 경우, 이런식으로 전파돼서 마지막에 나오는 Y값만을 출력하게 된다. (4 x 3)이 나오고, 이를 Dense(1) 로 이어주면 최종 출력은 (4 x 1)이 되어 (4 x 30) 입력 데이터에 대한 예측을 수행할 수 있는 것이다.

LSTM?

RNN의 경우 문제점이 있다.

초기 X_0에서 생성된 H_0가 전파될수록 그 값이 점점 왜곡된다. text 데이터일 경우, 길이가 긴 문장이 입력될 경우 초기의 입력값의 영향은 문장이 긴만큼 줄어들게 되는 것이다. 

LSTM의 경우 모든 cell state 간에 이 정보를 연결시켜서 최종 출력과 먼 초기 입력값의 영향을 더 잘 유지할 수 있게 해준다.

LSTM Andrew NG 강의 링크

위 그림에서 c^<0> ~ c^<3> 까지의 값이 학습된 게이트의 가중치에따라 모두 똑같은 값을 가질 수도 있다. RNN과 달리 처음값에 대한 기억을 조절할 수 있는 것이다.

 

Long Short Term Memory (LSTM) - Recurrent Neural Networks | Coursera

Video created by deeplearning.ai for the course "Sequence Models". Learn about recurrent neural networks. This type of model has been proven to perform extremely well on temporal data. It has several variants including LSTMs, GRUs and ...

www.coursera.org

 

Huber loss?

위키 정의

In statistics, the Huber loss is a loss function used in robust regression, that is less sensitive to outliers in data than the squared error loss. A variant for classification is also sometimes used.

특정값 보다 작은 값에 대해선 mse와 같은 2차 함수 형태를 띄지만, 특정 값보다 큰 값에 대해선 linear한 값을 띈다. outlier의 경우 square하면 그 값이 매우 커져서 error가 지나치게 크게 나타날 수 있다. huber loss를 쓰면 outlier에 대해 square가 적용되지 않으므로 상대적으로 outlier에대해 robust하다고 할 수 있다.





 

notebook) 지난 주 대비 추가된 점

1. tf.keras.layers.Lambda

  • Lambda layer는 lambda 함수를 입력으로 받아, 임의의 연산을 model 내에 수행할 수 있게 해준다. RNN network의 input_shape의 경우 3차원이다.

    • 원래 첫번째 dim은 batch_size인데 이는 입력하지 않아도 자동으로 받아주기에 pass

    • None으로 지정된 건 time step의 개수이다. (RNN은 어떤 time step이든 input으로 받을 수 있단 말). 마지막에 expand_dims로 1이 추가된건 time에 관해서만, univariate하기 때문이다.

2. tf.keras.layers.LSTM

  • return_sequences를 true로 하면 각 state마다 vector를 출력해서 sqeunce_to_sequence 가 된다. 

  • 이를 다음 LSTM이 입력으로 받는다. return_sequences의 default값은 False이므로 마지막 vector를 출력한다.

  • 예를들어 입력의 shape이 (64, 30, 1) 이라면(batch size =64, timestep 길이 = 30, feature 개수 = 1), LSTM(16)을 거친 출력 shape는 (64, 16)이 된다. 만약 return_sequences = True라면 (64, 30, 16) 이 출력 형태가 될 것이다.

  • 위에선 Bidirectional을 썼으므로, LSTM의 unit 인자의 2배 만큼 출력된다. 아래 model.summary()를 보면 이 설명이 다 이해될 것이다.

 

예측 결과 성능이 이전 mathmatical method, DNN, simpleRNN에 비해 상당히 좋아진 것을 확인할 수 있다.

Quiz)

  • If X is the standard notation for the input to an RNN, what are the standard notations for the outputs?
    • Y (x)
    • Y(hat) and H (o)
  • What is a sequence to vector if an RNN has 30 cells numbered 0 to 29
    • The Y(hat) for the last cell (o)
    • The total Y(hat) for all cells (x)
      • vector는 마지막 vector만 나타냄, return_sequence = True로 할 경우는 vector가아닌 seqeunce임
  • What does the axis parameter of tf.expand_dims do?
    • Defines the axis around which to expand the dimensions (x)
    • Defines the dimension index at which you will expand the shape of the tensor (o)
      • 아리송하다. 비슷한 말 같은데...?

다음은 CNN + 실제 데이터 적용이라고 합니다.