본문 바로가기

딥러닝/신경망 기초

Recurrent Neural Network (RNN)

Recurrent Neural Network (RNN)


어떻게하면 입력 데이터의 순서를 Network가 이해할 수 있을까?



IDEA : 이전 입력값의 처리결과를 다음 출력에 반영하자!



Basic RNN 구조



위 그림의 좌측부분을 펼친게 오른쪽 그림이 된다.


- 먼저, 입력을 살펴보면 순서대로 좌->우로 흘러간다. 아래첨자로 t가 붙었다는 건 time의 개념이 들어갔고,

  이것이 sequential한 느낌을 갖는다고 생각할 수 있다.(그렇게 생각하도록 하자)


- 간단한 예로 문장은 여러 단어로 쪼개질 것이다. 여기서 단어가 위 그림의 입력이 된다.(X0, X1, ....Xt)

  X0~Xt까지 t+1이 Sequence length가 된다.


- A라는 상자(여기서는 Cell 이라 하자)로부터 2개의 처리결과가 나온다. 

  하나는 output으로 나가고, 하나는 다시 A에 들어간다. 다시 A로 들어가는 저 화살표를 hidden state 라고 한다.


- 이전의 정보가 다음 출력에 반영되는 형태이기 때문에 Network가 데이터의 순서를 이해할 수 있게 된다.


() 위의 A라는 Cell은 5개로 서로 다른 것처럼 보이지만, 사실 1개, 즉 A는 하나고 그게 반복호출되는것이다. 


(★) 그렇기 때문에 RNN은 모든 입력이 들어가는 Cell이 parameter를 공유한다.



Vanilla RNN : 가장 기본 RNN


Vanilla RNN 구조


output을 만들어 출력($h_{t-1}$)하고, 

이것이 다음 계산으로 넘어가  Xt와 concatenate되서 tanh를 지나 output을 출력한다.



Long-Short Term Memory (LSTM)


LSTM 구조


LSTM : 2 state, 3 gate




2개의 State와 3개의 Gate가 존재.
(Forget, Input, Output) Gate가 잘 조합되어, Long/Short Term을 모두 잘 고려할 수 있게 된다.

Cell State는 절대로 빠져나가지 않고, 그대로 흘러간다....콘베이어 벨트처럼
Hidden State는 이전 출력을 의미한다.

※ Cell State

Cell State 구조


자 그럼 이제 3개의 Gate 및 프로세스를 알아보자.

1) Forget Gate


Forget Gate 구조




입력값 : 
두 입력값을 concatenate하여 0~1의 범위로 바꿔준다.
입력값 두개를 고려하여 cell state($C_{t-1}$)에서 일부 값을 날려버리는 역할을 한다.
(cell state의 값을 얼마나 반영할 것인가)


2) Input Gate

Input Gate 구조


Concatenate된 두 입력 값을 sigmoid와 tanh 두 함수에 통과시킨다. (weight와의 내적하고)

sigmoid를 통과한 값 i가 C~의 새로운 정보를 얼마나 반영하여 cell state에 보내줄지 결정한다.



3) Update(cell state)

updating the Cell state


4) Output Gate

Output Gate 구조



$O_{t}$의 경우 update된 cell state($C_{t}$)를 밖으로(hidden state로) 얼마나 내보낼지 정하는 역할을 한다.



참고

https://www.edwith.org/deeplearningchoi/lecture/15840/