RNN이란?

RNN이란?

https://velog.io/@sksmslhy/RNN

위 블로그를 필사하며 공부

* 모든 텍스트와 이미지의 출처는 위 블로그입니다.

출처: 위 블로그

RNN (Recurrent Neural Network, 순환 신경망)

RNN 이란?

- RNN은 Recurrent 단어 그대로 반복되는 신경망 이다.

- 즉, 스스로가 반복 하면서 이전 단계에서 얻은 정보가 지속되도록 한다.

- RNN은 기존 Neural Network와 구조가 상당히 비슷하다.

- CNN과 같은 신경망들은 전부 hidden layer에서 activation function을 지난 값은 오직 출력층으로만 향했다.

(이런 신경망을 Feed Forward Neural Network라고 함)

- 그러나 RNN은 hidden node에서 activation function을 통해 나온 출력을 출력층으로도 내보내고,

hidden node의 다음 연산의 입력으로도 내보내는 특징을 가지고 있다.

# RNN의 구조

출처: 위 블로그

- A는 입력으로 Xt를 받아 ht를 출력한다.

- A를 둘러싼 반복은 다음 단계에서의 network가 이전 단계의 정보를 받는다는 것을 의미한다.

- 왼쪽의 반복을 풀어서 보면 오른쪽이 된다.

- 이전 단계에서의 정보가 다음 단계에서 사용된다.

- CNN에서와 마찬가지로, bias도 입력으로 존재할 수 있다.

- RNN에서 hidden layer에서 activation function을 통해 출력을 내보내는 역할을 하는 node를 cell이라고 한다

- (위 그림에서 A) 이 cell은 이전의 값을 기억하는 역할을 하므로 memory cell 또는 RNN cell이라고 부른다.

- Memory cell이 출력층 방향으로 또는 다음 시점인 t+1의 자신에게 보내는 값을 hidden state라고 한다.

- 즉, t 시점의 memory cell은 t-1 시점의 memory cell이 보낸 hidden state 값을 t 시점의 hidden state 계산을 위한 입력값으로 사용한다.

- RNN에서 Xt와 ht는 기본적으로 벡터 단위이다.

- 이러한 구조로 인해 RNN은 시퀀스를 처리할 때 유리하다.

- RNN은 입려고가 출력의 길이(Xt, ht의 개수)를 다르게 설계 가능하다.

- 입력과 출력의 길이에 따라 일대일, 다대일, 다대다 등 존재 가능

- 'pytorch'라는 단어를 예측하는 모델을 생각해보자

- p라는 입력이 들어왔을 때 다음에 나올 알파벳으로 y를 기대하게 된다.

- 이러한 경우, 앞에 들어왔던 입력값에 대한 정보가 없다면 제대로 예측 x

- 이러한 과정이 지정한 시간만큼 반복됨

- 일정 시간 동안 모든 값이 계산되면, 모델을 학습하기 위해 결괏값과 목푯값의 차이를 loss function을 통해 계산하고 역전파(back propagation)해야 한다.

- 기존의 역전파와는 달리 RNN은 계산에 사용된 시점의 수 에 영향을 받는다.

ex) t=0 ~ t=2 가 계산에 사용되었다면, 그 시간 전체에 대해 역전파를 해야 함

: BPTT (Backpropogation Trough Time), 시간에 따른 역전파

출처: 위 블로그

- 위 그림에서 t=0, 1, 2인 시점에서 각각 결과값이 나오고 목표값과 비교되는 것을 볼 수 있다.

- 다시 단어 'pytorch'로 예를 들면, t=0에서 p가 input으로 들어가고, t=0에서 output으로 y가 출력되기를 기대한다.

- 따라서 target_0에는 y가 들어가고, 결과가 y와 같ㅇ지 않다면 loss가 생길 것이다.

- t=1에서 y가 들어가면 target_1은 t이고, t=2에서는 input이 t, target_2는 0이 된다.

- 이 때, 모델을 학습하려면 t=2 시점에서 발생한 loss 를 back propagation 하기 위해

loss를 input과 hidden layer 사이의 가중치 로 미분하여 loss에 대한 각 비중을 구해 업데이트 하면 된다.

- 이 과정에서 이전 시점의 값 들이 연산에 포함하게 되는데, 이전 시점의 값들은 다시 가중치, input, 그 전 시점의 값의 조합이다.

- RNN은 각 위치별로 같은 가중치 를 공유하므로

t=2 시점의 loss를 back propagation하려면 결과적으로 t=0 시점의 노드 값들에도 모두 영향을 주어야 한다.

- 즉, 시간을 역으로 거슬러 올라가는 방식으로 각 가중치들을 업데이트 해야 하는 것이다.

- 가중치를 표시하면 다음과 같다.

출처: 위 블로그

- 이 그림에서 t=2인 시점만 보면 다음과 같다.

- 기본적으로 RNN에서는 activation function으로 tanh 함수를 사용

출처: 위 블로그

from http://yeon22.tistory.com/118 by ccl(A) rewrite - 2021-10-28 21:00:54