본문 바로가기

Deep Learning

Recurrent Neural Network

1. RNN이란?

 

음성인식, 자연어 : 시퀀스가 있다.

NN/CNN으로는 이런 연속성이 있는 데이터를 처리하기 힘들다.

 

연속성이 있는 데이터를 학습하기 위해 사용하는 것이 RNN(Recurrent Neural Network)이다.

위 그림처럼 계산된 값이 다음 계산에 영향을 미치게 됨으로써 연속성이 있는 데이터 학습이 가능해진다.

RNN에서 state를 계산할 때 이전의 state인 h(t-1) 와 입력값 x을 이용한다.

따라서 이전에 계산된 값이 현재의 계산에 영향을 줄 수 있게 된다.

 

계산 과정은 기본적으로 y = Wx+b 의 틀에서 벗어나지 않는다.

h와 x 각각의 Weight를 만들어준다.

이것을 더하여 tanh 함수를 적용하여 현재의 state를 만들어준다.

계산된 h에 Weight를 곱하여 y 값을 출력한다.

Recurrent한 과정을 거칠 때 Weight 값은 항상 똑같다.

 

 

2. RNN 모델

 

RNN를 이용하여 현재 단어 뒤에 어떤 단어가 올지 예측하는 모델 등을 구현할 수 있다.

 

training sequence를 "hello"로 하고싶을 때, 입력 데이터를 one hot으로 위와 같이 나타낼 수 있다.

 

현재의 h(hidden layer 값)을 구하기 위해 이전의 h와 x에 weight를 각각 곱하고, tanh 함수를 적용한다.

위와 같은 계산을 거치면서 h 값이 이전의 값에 영향을 받아 변하는 것을 짐작할 수 있다.

 

y^t = W^hy * h^t 이기 때문에 hidden layer에 W^hy 값을 곱한다.

출력은 글자 네개중에 하나이기 때문에 output layer에 softmax를 적용한다.

두 번째 output layer에 알파벳 l에 해당하는 값이 -1.0이므로, 잘못된 학습 결과라고 볼 수 있다.

 

 

3. RNN 응용

 

RNN 활용 방법은 매우 다양하다.

  • Language Modeling
  • Speech Recognition
  • Machine Translation
  • Conversation Modeling / Question Answering
  • Image/Video Captioning
  • Image/Music/Dance Generation

one to one : 한개의 input layer -> 한개의 output layer

  ex) 위 예제 = Vanilla neural network

one to many : 한개의 input layer -> 여러개의 output layer

  ex) Image Captioning : 이미지를 단어로 바꿔줌

many to one : 여러개의 input layer -> 한개의 output layer

  ex) Sentiment Classific : 문장을 입력받아 슬픔/기쁨 등의 감정을 나타냄

many to many : 여러개의 input layer -> 여러개의 output layer

  ex) Machine Translation : 문자열을 입력받아 다른 언어의 문자열로 출력함

       

RNN의 hidden layer를 여러개로 중첩할 수도 있다.

 

RNN보다 더 진화된 알고리즘으로는 LSTM(Long Short Term Memory), GRU model이 있다.