ML(머신러닝)

DL - RNN(Recurrent Neural Network)

LaBbit 2018. 1. 22. 15:08

0. 개요



RNN이란 풀어쓰면 Recurrent Neural Network 입니다. 여기서 recurrent 는 반복된다는 의미를 갖고 있습니다. recursive neural network 라는 유사한 모델이 있지만 차이점이 있습니다. 


RNN에서 반복된다는 말은 과거의 정보를 가지고 있다는 의미로 해석할 수도 있습니다. 사람은 생각을 할 때 혹은 말을 할 때 과거의 정보들을 기반으로 다음 정보들을 뱉어낸다는 사실에서 아이디어를 얻었으며, FFNN(Feed Forward Neural Network)와 같이 현재의 정보들만 보는 신경망과 달리 RNN은 현재 정보와 과거의 정보를 동시에 고려한다고 이해하면 됩니다. 




1. RNN 사용 예



RNN은 input 과 output 사이즈가 고정되어 있지 않은 음성이나 문자열에 적용하기 좋은 모델입니다. 기계번역이나 사진에 대한 설명을 달아주는 등 연속적인 데이터가 들어오는 분야에서 많이 사용됩니다.


위 그림은 일반적인 신경망과 RNN 네트워크 형태를 그림으로 나타낸 것입니다. ('vanilla'라고 적혀있는 모델이 일반적인 신경망 입니다.) 'one to many' 는 하나의 입력을 받아 두 개 이상의 결과물을 출력 한다는 의미이고, 사진이 주어졌을 경우 각 사물별로 구분한다 던지, 이 사진이 어떠한 사진인지 한문장으로 설명해주는 태스크에서 사용할 수 있습니다. 'many to one'은 'one to many'와 반대로 여러 입력들을 받아 하나의 결과를 예측하는 것을 말합니다. 그 예로 영화 댓글을 통해 긍정적인지 부정적인지 판단하는 감성분석을 들 수 있습니다. 'many to many' 는 [영어 -> 한국어], [중국어 -> 스페인어] 와 같은 기계번역에서 사용하는 네트워크 형태입니다.


길이가 고정되어 있지 않은 데이터를 입력 및 출력할 수 있다는 점에서 많이 각광받고 있으며 이미지에 특화된 CNN(Convolutional Neural Network)과 달리 RNN은 시퀀스에 특화되어 있다고 볼 수 있습니다. 



2. RNN(Recurrent Neural Network)







2-1. RNN의 기본 개념

RNN은 가장 깊은 네트워크 라고도 불립니다. 위 그림에서 왼쪽과 오른쪽 모두 RNN를 표현한 것인데 파란 원은 입력, 보라빛 원은 출력, 가운데는 히든 레이어를 뜻합니다. 왼쪽 모양을 보면 히든 레이어 부분에서 다시 자신으로 화살표가 오는 것을 확인 할 수 있습니다. 이 부분에서 Recurrent 라는 이름이 붙게 된것이며 이전 상태가 현재 상태에 영향을 미친다는 것을 알 수 있습니다. 


이제 어떤 방식으로 이전 정보가 현재까지 미치는지 수식을 통해 좀 더 살펴보겠습니다. 먼저 변수는 위 그림에 간단하게 설명이 나와있으므로 생략하도록 하겠습니다. 가중차(weight) 값들은 총 3개가 있으며 초록색 가중치와 빨간 가중치 값이 개념상 핵심이라고 생각합니다.



위 수식은 현재 입력값과 이전 시간의 정보들을 적절히 섞어주는 역할을 합니다. 빨간 가중치(Wxh)가 더 커지게 되면 현재 입력되는 정보를 더욱 중요시 하겠다는 의미이고, 초록 가중치(Whh)가 커지면 과거의 정보들을 더욱 더 중요하게 보겠다는 의미입니다. 여기에서 활성함수(avtivation function)은 tanh 입니다. 



이 수식은 결과값에 대한 수식입니다. 언뜻보면 복잡해 보일 수도 있지만 y = ax + b 와 같은 1차 함수 모양입니다. 시간 t에서의 히든레이어로부터 받은 정보(ht)에 가중치를 곱하여 결과값을 출력합니다.



2-2. vanishing gradient 문제


RNN에는 vanishing gradient 라는 치명적인 문제점이 존재합니다. RNN의 연산 과정 중 정보들이 많은 레이어들을 거치게 되고 당연히 그 정보들은 희석될 수 있습니다. RNN은 기존 네트워크 보다 많은 곱산 연산을 가지고 있습니다. 이러한 연산은 역전파(backpropagation)하였을 때 1보다 작은 값들의 거듭되는 곱셈으로 0으로 수렴할 수 있습니다. 아래 사진은 tanh 그래프를 나타낸 사진입니다. 

vanishing gradient 문제는 항상 같은 값을 곱하여 다음 히든레이어로 전달하는 RNN의 방식이 문제입니다. 이러한 문제를 해결하기 위한 LSTM(Long Short Term Memory)방식이 있습니다. LSTM은 이전의 정보를 얼마나 잊어버릴지, 얼마나 받아들일지 결정할 수 있는 모델입니다.




3. 참조 및 출처



https://ratsgo.github.io/natural%20language%20processing/2017/03/09/rnnlstm/

http://pythonkim.tistory.com/57

cs231n 강좌 - http://cs231n.stanford.edu/syllabus.html

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

https://www.medcalc.org/manual/tanh_function.php