RNN(순환신경망)

장우솔·2021년 12월 12일
0

딥러닝

목록 보기
6/15

RNN

입력데이터가 시간적 순서를 지닌 시계열 데이터, 은닉층 내부구조는 순환구조이다.

SimpleRNN

학습 대상의 가중치는 세가지로,
1.입력층과 은닉층 사이의 가중치 w(ih)
2. 시간 t에서의 은닉층과 시간 t+1에서의 은닉층간의 가중치 w(hh)
3. 은닉층과 출력층 사이의 가중치 w(ho)

공식
H(t)=tanh(xi*w(ih)+Ht-1* w(hh))

입력값에 가중치곱하고 이전은닉층의 출력값에 가중치곱해서 더한 것이다. 시간 t에서 은닉층 SimpleRNN 레이어 출력한다.

이전데이터 몇 개를 묶어서 미래를 예측할 것인가(window-size),
얼마나 먼 미래 값을 예측할 것인가(horizon factor) 설정해야한다.

코드 예시

tf.keras.layers.SimpleRNN(units=10, activation=’tanh’, input_shape(3,1))
  • units : 레이어내의 노드 개수, 노드 1개당 활성화함수 한 개 가지고 있다. 활성화함수로 탄젠트 함수 사용했다.
  • input_shape : 3개의 time-step 데이터를 이용해서 정답을 만든다는 의미이며 window size=3 과 같다. RNN 레이어로 한번에 1개의 데이터가 들어간다는 의미이다.

학습데이터 생성과정(입력데이터 생성과정)

입력데이터는 3차원 텐서구조로 이루어져야한다.
batch size : time steps(=window size)으로 분리되어 있는 데이터 총 개수
time steps : 몇 개의 데이터를 이용해서 정답을 만들어내는지
input dims : RNN 레이어로 한번에 들어가는 데이터 개수

  • SimpleRNN 단점
    입력 데이터가 많아질수록 은닉층에서 보관하는 과거정보가 마지막레이어까지 충분히 전달되지 못하는 현상이다.

그래서 나온게 -> LSTM과 GRU

LSTM

Ct(셀 상태)라는 변수가 추가적으로 공유된다. 셀상태가 다음 레이어로 전달되면서 기존의 상태를 보존하므로 장기의존성 문제를 해결할 수 있다.
핵심은 이전단계정보를 cell에 저장해서 다음단계로 전달하는 것이다.

3개의 게이트 존재(forget, input, output)
1. forget gate : 시그모이드 입힌 값은 0~1사이값으로 1에 가깝다면 과거정보를 많이 활용한다는 의미이고 0에 가깝다면 과거정보를 많이 잃게 되는 원리이다.

현시점 x, 과거 은닉층 값H(t-1), 각각의 가중치 wt, ut

2. input gate: 현재시점이 얼마나 중요한지 반영하여 cell에 기록한다. 1) 현재시점 데이터와 과거 은닉층 값에 각 가중치곱하고 더한 결과에 시그모이드함수를 적용하여, 어떤 정보를 업데이트할지 결정하고 2) 현재시점의 새로운 정보를 생성.


입력게이트 중요도 I(t), 현재 상태 c

  • cell state : 값을 이용하여 memory cell에 저장하는 단계

3. output gate : forget gate와 input gate에 의해서 변경된 현재 시점의 memory cell state(Ct)값을 얼마나 빼내서 다음 레이어로 전달할지 결정하는 단계 ->H(t)

GRU

LSTM에서 사용되는 cell state가 없는 대신 GRU 출력 H값이 그 역할을 대신한다. 활성화함수는 sigmoid두번 tanh 한번 사용되기에 LSTM에 비해 연산량을 줄일 수 있다. 내부 구조또한 두가지이다.
1. reset gate : 과거 정보를 얼마나 잊을지. 기억할지 결정하는 게이트
2. update gate : 과거와 현재정보 중 어떤 정보를 더 많이 업데이트할지 (input, forget gate합친 것과 같다.)

profile
공부한 것들을 정리하는 블로그

0개의 댓글