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이 있다.
'Deep Learning' 카테고리의 다른 글
딥러닝의 기본 개념, 역사 (0) | 2019.04.22 |
---|---|
ML의 실용과 몇가지 팁 (0) | 2019.04.21 |
Multinomial의 개념과 Softmax Classification 구현 (0) | 2019.04.21 |
Logistic Classification의 HCG (0) | 2019.04.21 |
TensorFlow로 파일에서 데이터 읽어오기 (0) | 2019.04.21 |