티스토리 뷰
우리가 사용하는 데이터들 중에서는 Sequence data가 상당히 많이 있다.
예를 들어, 음성인식, 자연어를 보면 1개의 데이터가 아니라 sequence 형태로 되어있다.
1개의 단어만 이해한다고 해서 전체 맥락을 이해하는게 아니라 이전에 했던 말들, 단어들을 이해해야지만 이해할 수 있다. 기존에 있던 NN/CNN은 x라는 입력이 있다면 y라는 출력이 나오는 간단한 형태였기 때문에 x0, x1, x2... 이런 시리즈 데이터들을 처리하기가 불편했다.
그래서 많은 사람들이 고민한 끝에 만들어 낸 것이 다음과 같은 형태의 네트워크이다.
x0를 입력했을때 나온 state가 x1을 입력했을때 계산에 영향을 미친다. 그래서 어떤 시점에서 무언가 계산할 때 이전의 연산에 영향을 받을 때는 시리즈 데이터에 적합할 때이다.
이것은 어떻게 계산해야 할까? new state를 보면 이전의 state와 new x에 영향을 받는다는 것을 알 수 있다.
그러면 구체적으로 어떻게 계산되는지 확인해 보자. 여러가지 방법이 있지만 그 중 vanilla RNN은 가장 기초적인 network이다. 우리가 그동안 다뤘던 WX 와 같은 형태처럼, 입력값 h_(t-1)에 대해서 W_(hh)*h_(t-1)로 계산되고, x_t에 대해서는 W_(xh)*x_t와 같이 계산됩니다. 그리고 sigmoid와 비슷한 tanh에 두 값을 더해서 넣어줍니다.
그리고 결과값 yt에 대해서는 W_(hy)*h_t로 계산합니다. y의 개수가 몇개가 될지 하는 것은 weight의 사이즈에 달려있다.
다음 글자를 맞추는 것을 language model이라 하는데 RNN을 통해 구현 할 수 있다.
h e l l o 을 가장 쉽게 구현하는 방법은 one hot encoding 이다.
RNN은 이전의 것들을 잘 기억한다.
그 다음 Y값을 구해보자.(softmax) (첫번째 l은 error값)
RNN applications
https://github.com/TensorFlowKR/awesome_tensorflow_implementations
- Languate Modeling
- Speech Recognition
- Machin Translation
- Conversation Modeling/Question Answering
- Image/Video Captioning
- Image/Music/Dance Generation
단순한 Neural Network같은 것으로 one to one 부터 시작해,
Image Captioning에서 이용되는 one to many 형태도 있으며,
Sentiment Classification으로써 여러개의 단어를 통해 감정을 예측하는 등으로 활용되는 many to one.
many to many 1: machine translation(seq word->seq word)
many to many 2: 비디오 classification on frame level
복잡한 학습도 가능
vanilla RNN이 깊어지고 레이어가 많아져 복잡해지면 학습해지기 곤란해진다. 그래서 그것을 극복하기 위해 LSTM(Long Short Term Memory)이라는 모델을 많이 사용한다. 그리고 한국의 조교수님의 GRU모델도 있다.
'beginner > 파이썬 딥러닝 기초' 카테고리의 다른 글
RNN-Hi Hello (0) | 2019.05.15 |
---|---|
RNN in TensorFlow (0) | 2019.05.14 |
Class, tf.layers, Ensemble (MNIST 99.5%) (0) | 2019.05.13 |
TensorFlow로 MNIST 99% 구현하기 (0) | 2019.05.13 |
TensorFlow CNN의 기본 (0) | 2019.05.12 |