DL - RNN(Recurrent Neural Network)
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)
이제 어떤 방식으로 이전 정보가 현재까지 미치는지 수식을 통해 좀 더 살펴보겠습니다. 먼저 변수는 위 그림에 간단하게 설명이 나와있으므로 생략하도록 하겠습니다. 가중차(weight) 값들은 총 3개가 있으며 초록색 가중치와 빨간 가중치 값이 개념상 핵심이라고 생각합니다.
위 수식은 현재 입력값과 이전 시간의 정보들을 적절히 섞어주는 역할을 합니다. 빨간 가중치(Wxh)가 더 커지게 되면 현재 입력되는 정보를 더욱 중요시 하겠다는 의미이고, 초록 가중치(Whh)가 커지면 과거의 정보들을 더욱 더 중요하게 보겠다는 의미입니다. 여기에서 활성함수(avtivation function)은 tanh 입니다.
이 수식은 결과값에 대한 수식입니다. 언뜻보면 복잡해 보일 수도 있지만 y = ax + b 와 같은 1차 함수 모양입니다. 시간 t에서의 히든레이어로부터 받은 정보(ht)에 가중치를 곱하여 결과값을 출력합니다.
2-2. vanishing gradient 문제
3. 참조 및 출처
https://ratsgo.github.io/natural%20language%20processing/2017/03/09/rnnlstm/
http://pythonkim.tistory.com/57
cs231n 강좌 - http://cs231n.stanford.edu/syllabus.html