AI & BigData/모두를 위한 딥러닝(정리)

딥러닝(DeepLearning) #9_NN의 꽃, RNN(Recurrent Neural Network)

Tigercow.Door 2018. 5. 17. 20:48


안녕하세요.

이번 포스팅에서는 Neural Network에서도 가장 재밌고, 꽃이라고 하는 Recurrent Neural Network(RNN)에 대해서 알아보도록 하겠습니다.


* 해당 포스트의 모든 내용은 김성훈 교수님의 '모두를 위한 딥러닝'을 바탕으로 제작되었습니다.

관련한 상세 내용은 아래 링크를 참고해주세요.

https://hunkim.github.io/ml/




1. Sequence(or Series) Data


우리가 사용하는 데이터들 중에서는 sequence data들이 매우 많이 있습니다.

예를 들어, 우리가 이야기하는 자연어에서도 단순히 하나의 단어에 대해서만 이해해서 전체적인 이해를 할 수 있는 것이 아니라, 그전에 이야기했던 단어들을 모두 이해해야 합니다. 이러한 데이터를 sequence data라고 합니다.


이전의 NN이나 CNN등 에서는 하나의 입력, x에 대해서 출력 y를 나타내는 간단한 형태였기 때문에 시리즈 데이터인, x0, x1, ..., xt등의 데이터를 처리하기 힘들었습니다.


그래서 이러한 시리즈 데이터를 처리하기 위해서 다음과 같은 모델이 고안되었습니다.



즉, 입력값에 대해서 현재의 state가 다음의 state에 영향을 미치는 것입니다.

이를 좀 더 펼쳐서 살펴보면 다음과 같습니다.


실제로는 우측과 같이 구현되는데, 위에서 언급한 바와 같이, x0 를 통해 계산된 것이 x1이 계산될때 영향을 미칩니다.

이러한 모델은 시리즈 데이터들을 다루는데 매우 효과적입니다.



2. Recurrent Neural Network


즉, 이러한 모델을 RNN(Recurrent Neural Network)라고 합니다.

이러한 모델은 어떻게 계산하는 것일까요?


RNN에서는 state라는 개념이 존재하는데, state를 계산하기 위해, 그 전에 있던 old state가 사용되고 입력값 x가 사용됩니다.

그리고 여기서 사용되는 함수, f는 전체적으로 동일합니다.


좀 더 구체적으로 값을 계산하는 방법에 대해서 알아보겠습니다.

가장 기초적으로는 Vanilla RNN입니다.


우리가 그동안 다뤘던 WX 와 같은 형태처럼, 입력값 h_(t-1)에 대해서 W_(hh)*h_(t-1)로 계산되고, x_t에 대해서는 W_(xh)*x_t와 같이 계산됩니다. 그리고 sigmoid와 비슷한 tanh에 두 값을 더해서 넣어줍니다.

그리고 결과값 yt에 대해서는 W_(hy)*h_t로 계산합니다.

이때 y가 몇개의 벡터로 나올 것인가는 우리가 설정하는 W에 따라서 결정됩니다.



3. Recurrent Networks



위에서 알아본 RNN은 매우 다양하게 활용될 수 있습니다.

위의 그림을 보시면, 첫번째는 우리가 그동안 다루었던 단순한 Neural Network같은 것으로부터 시작해, Image Captioning에서 이용되는 one to many 형태도 있으며, Sentiment Classification으로써 여러개의 단어를 통해 감정을 예측하는 등으로 활용되는 many to one, 그리고 many to many의 형태가 있습니다.


728x90