Sequence data
-이야기를 들을 때, 어떤 단어를 이해하기 위해서는 이전에 사용한 단어들을 바탕으로 이해할 수 있습니다.
-NN/CNN은 하나의 입력에 대해 하나의 출력을 나타내는 간단한 형태이기 때문에 위와 같은 시리즈 데이터(순차적으로 처리하는 데이터)를 처리하기 불편합니다.
x: 입력값, h: 출력값
위와 같은 series data는 이전 데이터가 다음 연산에 영향을 미치는 구조로 되어있습니다.
RNN(Recurrent Neural Network)
RNN의 구조
현재 state의 연산 결과를 자기 자신에게 다시 입력하는 구조입니다. 이런 형태를 통해 y값을 출력해냅니다.
RNN의 계산 방법
-x라는 입력값과 바로 이전의 RNN state 값을 입력값으로 어떤 function에 대입하여 새로운 state 값을 계산합니다.
-모든 state 계산에 사용되는 $f_w$ 함수는 동일합니다.
Vanilla Recurrent Neural Network
1. $f_w$ 함수의 입력값인 $h_{t-1}$과 x 각각에 W값을 만들어줍니다.($W_{hh}, W_{xh}$)
2. 입력값에 각각의 W값을 곱하여 더해줍니다.
3. 2번의 값을 sigmoid와 같은 형태를 갖는 tanh 함수에 넣어주어 현재 state인 $h_t$를 구해줍니다.
4. 계산된 $h_t$에 또 다른 형태의 $W_{hy}$을 곱해서 $y_t$값을 구합니다.
W값은 총 3개가 필요합니다: $W_{hh}, W_{xh}, W_{hy}$
3개의 W값 중 $W_{hh}$는 모든 state에서 동일한 값이 사용됩니다.
RNN의 활용
입력 데이터를 통해 출력 데이터를 유추해보고자 합니다.
1. one-hot encoding을 이용해서 h, e, l, o 각각의 값을 설정합니다.
2. tanh 함수에 입력 값을 대입하여 각각의 $h_t$ 값을 구합니다.
맨 처음에는 이전의 $h_{t-1}$ 값이 존재하지 않으므로 일반적으로 0으로 설정합니다.
3. 각각의 $h_t$ 값에 $W_{hy}$를 곱하여 output layer를 구합니다.
4. softmax를 이용하여 최종 $y_t$를 구합니다.
여러 개의 layer를 둘 경우에는 더욱 복잡한 학습이 가능하게 됩니다.
RNN 학습에 어려움이 있는 경우 극복 방안
-Long Short Term Memory(LSTM)
-GRU by Cho et al. 2014
'인공지능' 카테고리의 다른 글
[순환 신경망] LSTM, GRU (0) | 2021.02.19 |
---|---|
[Keras] to_categorial 함수 (0) | 2021.02.19 |
[모두를 위한 딥러닝1] 여러가지 CNN 알고리즘(7주차_2) (0) | 2021.02.14 |
[모두를 위한 딥러닝1] Convolutional Neural Networks(CNN)(7주차_1) (0) | 2021.02.14 |
[모두를 위한 딥러닝1] Weight의 초기값 설정하기(6주차_2) (0) | 2021.02.04 |