https://hanium.udemy.com/course/keras-deep-learning/learn/lecture/9359716#reviews


RNN

스크린샷 2023-05-09 오후 2 03 31


  • 가진 데이터의 종류에 따라, 어떻게 학습시키고 싶은지에 따라
  • Many to One
    • Input 여러개 - 한개의 Output
    • 가장 많이 사용
  • Many to Many
    • Input 여러개 - 여러개의 Output
  • One to Many
    • Input 한개 - 여러개의 Output
  • One to One
    • Input 한개 - 한개의 Output


Gradient vanishing 문제

스크린샷 2023-05-09 오후 2 08 00


  • time step: RNN의 개수
  • time step이 무한정 늘어나면 gredient vanishing 문제 발생
  • 층이 깊어질수록 상대적으로 처음에 있는 weight와 bias의 영향력(gradient)이 사라지는(vanishing) 문제
    • DNN과 마찬가지
  • Yn에 error가 있을 때 H0의 문제가 반영될 수 있는지
  • 일반적으로 200~300 정도면 time step 적절하다고 판단


LSTM, GRU Layer

  • LSTM (Long Term Short Memory)
    • Gradient Vanishing 문제를 해결할 수 있도록 RNN Cell을 변형한 구조
      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 shape

스크린샷 2023-05-09 오후 2 32 28


Input (N Sample, N time step, N feature)


  • DNN과 다른 점: time step이 추가됨
  • 3차원으로 형태를 만들어 Input을 주어야 함!
  • sample 개수는 생략 가능


  • Case 1
    • input feature 4개
    • 4개 feature가 3개의 time step에 들어감
    • LSTM Layer를 추가할 때 input shape를 3 time step, 4 feature으로 넣어주어야 함!
  • Case 2
    • 4개의 time step, feature 1개
  • 코드를 짤 때에는 그림이 없기 때문에 머릿속으로 생각해놓아야 함
  • 모든 RNN Layer는 (sample, time step, feature)!


Output

  • (N Sample, N time step, Value)
    • return_sequences == True
    • Many to One
  • (N Sample, Value)
    • return_sequences == False
    • Many to Many
    • x와 동일한 shape으로 y를 주어야 함 -> time step 고려 필요!


ex1 ) Many to One

스크린샷 2023-05-09 오후 2 40 00


스크린샷 2023-05-09 오후 2 41 32

  • 2개의 데이터, 각각의 데이터는 4개의 time step, 각각의 time step은 하나의 feature 가짐
  • X 배열에 2개의 데이터, 4개의 time step, feature는 1개

  • batch
    • 실제 fit으로 훈련할 때 batch 설정
    • keras는 default로 32 이용
    • RNN에서는 배치 사이즈 지정해주는 것이 좋음
    • 총 2개의 데이터 -> batch 1 / 2


스크린샷 2023-05-09 오후 2 41 51

  • Many to One


ex2 ) Many to Many

스크린샷 2023-05-09 오후 2 45 55

  • return_sequences=True로 하지 않으면 RNN 레이어를 겹쳐서 이용할 수 없음
    • 모든 레이어는 같은 차원의 입력을 받아야 하는데, 첫번째 레이어의 Output이 1개로 나오면 다음 레이어로 들어갈 수 없음