본문 바로가기

머신러닝공부

RNN(Recurrent Neural Network) - 순환신경망 간단정리

728x90
반응형

RNN

1. 내부적으로 순환(recurrent)되는 구조를 이용

2. 순서(sequence)가 있는 데이터를 처리하는데 강점을 가진 신경망

 

순서가 있는 데이터

ex) I work at google / i google at work

문장이나 음성 같이 연속적인 데이터를 말하는데, 이런 데이터는 문장에서의 순서에 따라 의미가 달라진다.

현재 데이터의 의미를 알기 위해서는 이전에 놓여 있는 과거 데이터도 알고 있어야 한다.

RNN은 이러한 과거의 데이터를 알기 위해서 1. 은닉층내에 순환구조를 이용하여 과거의 데이터를 기억해 두고 있다가 2. 새롭게 입력으로 주어지는 데이터와 은닉층에서 기억하고 있는 과거 데이터를 연결 시켜서 그 의미를 알아내는 기능을 가지고 있다.

 

시간 개념을 포함한 RNN구조

순환 구조를 은닉층에서 기억하는 과거의 데이터와 일정 시간이 지난 후에 입력되는 데이터에 연결시켜 주는 구조로 바꾸어서 생각해 볼 수 있음

즉, 문장이나 음성 같은 순서가 있는 데이터라는 것은, 시간의 경과에 따라서 데이터가 순차적으로 들어온다는 것과 같은 의미라는 것을 알 수 있다.

 

시계열 데이터 기반의 RNN구조

시계열 데이터를 이용해서 미래 값을 계측하는 RNN 구조라면 w, h등을 설정하여 일정한 길이로 패턴을 잘라서 학습 데이터를 만들어야 함

w: 이전 데이터 몇 개를 묶을 것인지를 나타내는 윈도우 크기(window size) w 설정

h: 얼마나 먼 미래 값을 예측할 것인지를 지정하는 수평선 개수(horizon factor) h 설정

 

SimpleRNN API

tf.keras.layers.SimpleRNN(unit=10, activation='tanh', input_shape=(3, 1))

unit : 일반 신경망의 은닉층 노드 수와 같은개념. 즉, unit=10의 의미는 simpleRNN 레이어 내의 노드 수는 10개이며 노드 1개당 활성화 함수 1개를 가지고 있다.

activation : 활성화 함수 설정

input_shape = (A, B) : A개의 time_step 데이터를 이용하여 정답을 만든다는 의미이며, window_size=A와 같음, 그리고 RNN로 한번에 B개의 데이터가 들어간다는 의미

 

RNN 개발 프로세스

1. 시계열 데이터 정의

2. 학습 데이터 생성:

RNN 모델을 구현할 때 가장 핵심이 되는 부분은 데이터의 구조이고 RNN레이어 입력 데이터는 (batch_size, time steps, input dims)와 같은 구조로 적어주어야 한다. (tensor 구조)

* batch_size : time steps(=window size)로 분리되어 있는 데이터의 총 개수

* time steps : 몇 개의 데이터를 이용하여 정답을 만들어 내는지를 나타내며 window size와 크기가 동일함

* input dims : RNN레이어로 한번에 들어가는 데이터 개수

반응형