RNN

yeoni·2023년 6월 21일
0

딥러닝-Tensorflow

목록 보기
16/18

simpleRNN(순환신경망)

  • 활성화 신호가 입력에서 출력으로 한 방향으로 흐르는 피드포워드 신경망
  • 순환 신경망은 뒤쪽으로 연결하는 순환연결이 있음
  • 순서가 있는 데이터를 입력 받고 변화하는 입력에 대한 출력을 얻음

메모리셀

형태

1) sequence-to-sequence 형태

  • 주식가격과 같은 시계열 데이터 예측에 사용
  • 최근 N일치의 주식가격을 주입하면 네트워크는 각 입력값보다 하루 앞선 가격을 출력
  • 1번 사진 참고
    2) sequence-to-vector 형태
  • 출력을 시퀀스가 아니라 벡터로 출력
  • 영화 리뷰의 연속된 단어의 문장을 이야기하면 평점을 출력
  • 2번 사진 참고
    3) incoder-decoder 형태
  • 번역기와 같은 형태, 한 문장을 이야기하면 다른 문장으로 표현
  • 4번 사진 참고

simpleRNN의 단점

  • 입력 데이터가 길어지면 학습 능력이 떨어진다 → long-term dependency 문제
  • 현재의 답을 얻기 위해 과거의 정보에 의존해야 하는 RNN이지만, 과저 시점이 현재와 너무 멀어지면 문제를 풀기 어렵다

RNN 실습

1. time stamp 데이터 만들기

import tensorflow as tf
import numpy as np

X = []
Y = []

for i in range(6):
  lst = list(range(i, i+4))

  X.append(list(map(lambda c: [c/10], lst)))
  Y.append((i+4)/10)

X = np.array(X)
Y = np.array(Y)

2. simpleRNN 구성

  • input_shape=[4, 1] → timesteps = 4, input_dim = 1
  • units: SimpleRNN에 존재하는 뉴련의 수
  • return_sequences는 출력으로 시퀀스 전체를 출력할지 여부
model = tf.keras.Sequential([
    tf.keras.layers.SimpleRNN(units=10, return_sequences=False, input_shape=[4, 1]),
    tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.summary()

3. 학습 & 결과

model.fit(X, Y, epochs=100, verbose=0)
model.predict(np.array([[[0.6], [0.7], [0.8], [0.9]]])) # array([[0.8049002]], dtype=float32) 좋지 않다

4. 모델 다시 정의

model = tf.keras.Sequential([
    tf.keras.layers.SimpleRNN(units=10, return_sequences=True, input_shape=[4, 1]),
    tf.keras.layers.SimpleRNN(units=10, return_sequences=True, input_shape=[4, 1]),
    tf.keras.layers.SimpleRNN(units=10, return_sequences=True, input_shape=[4, 1]),
    tf.keras.layers.SimpleRNN(units=10, return_sequences=False, input_shape=[4, 1]),
    tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')
model.summary()

5. 모델 학습 & 결과

model.fit(X, Y, epochs=100, verbose=1)
model.predict(np.array([[[0.6], [0.7], [0.8], [0.9]]])) #array([[0.9570675]], dtype=float32)

Reference
1) 제로베이스 데이터스쿨 강의자료
2) https://wikidocs.net/24996
3) https://ronak-k-bhatia.medium.com/a-primer-on-current-past-deep-learning-methods-for-nlp-c399fe28291d

profile
데이터 사이언스 / just do it

0개의 댓글