[딥러닝] RNN(Recurrent Neural Networks)

hj choi·2022년 10월 5일
0

AI

목록 보기
21/27

RNN

Sequential Model

  • sequential data : 오디오, 비디오 등등의 데이터
  • sequential data를 처리하는데 있어서 가장 큰 어려움 : sequential data는 정의상 그 길이가 언제 끝날지 알 수가 없다. 따라서 받아들여야할 입력의 차원을 알 수가 없다. 그렇기 때문에 fully connected layer나 CNN을 사용할 수가 없다.

  • 고려해야 할 정보량이 점점 늘어난다.
  • 봐야 할 과거의 timespan을 고정해서 고려해야할 정보량이 무한정 늘어나는것을 막는다.

Markov model(first-order autoregressive model)

  • 나의 현재는 바로 전 과거에만 dependent한다고 가정하는것(내일의 수능 점수는 전날 공부한 점수에만 dependent하다. -> 많은 정보를 버리는 모델임)
  • joint distribution을 표현하는게 쉽다는 장점이 있다.

Latent autoregressive model

  • 중간에 hidden state가 들어가 있어서 hidden state가 과거의 정보를 summarize(요약)하고 있는 것. 다음번 state는 이 hidden state 하나에만 dependent하는 것.

Recurrent Neural Network

short-term dependencies

  • RNN의 가장 큰 단점.
  • 과거에 얻어진 정보들이 모두 summarize되어서 미래에 고려되어져야 하는데 RNN은 하나의 fixed rule로 이 정보들을 계속해서 취합하기 때문에 먼 과거의 정보가 미래까지 살아남기가 힘들다.

  • 식에서 보이다시피 계속해서 중첩되는데 h0h_0h4h_4까지 가기 위해서는 굉장히 많은 weight를 곱하고 Non-Linear를 통과하게 된다.
  • activation function이 sigmoid인 경우에는 정보가 죽어버리게 되는 vanishing gradient가 발생하고, activation function이 ReLU인 경우에는 weight가 계속해서 곱해지기 때문에 exploding gradient가 발생한다.

가장 기본적인 RNN (vanilla RNN)

Long Short Term Memory

  • xtx_t : t번째 입력(language model일 경우 : 단어). 단어를 50000개를 쓴다면 xtx_t는 50000짜리 원-핫 벡터일 수도 있고, 줄어들어서 얻어진 word embedding일 수도 있다.

  • hth_t : hidden state(Output).

  • Previous cell state : 내부에서만 흘러가는 time step 0부터 t까지 들어왔던 t+1개의 정보를 모두 취합해서 summarize해줌

  • Previous hidden state : 이전의 출력값. 정보가 쭉 흘러서 다음번 t+1번째의 LSTM에 Previous hidden state로 들어간다.

  • LSTM의 입력 : xtx_t, Previous hidden state, Previous cell state

  • LSTM의 출력 : hidden state, Next hidden state, Next cell state. 하지만 Next hidden stated와 Next cell state는 LSTM 내부에서만 입력받고 출력되는것이고, 실제로 외부로 출력되는 값은 hidden state 하나이다.

LSTM의 3개의 gate와 Update cell

Forget gate

  • 어떤 정보를 버릴지 판단하는 gate
  • forget gate : 현재의 입력(xtx_t)와 Previous hidden state(ht1h_{t-1})이 들어가서 ftf_t라는 값을 얻어낸다.
  • 시그모이드를 통과하기 때문에 ftf_t는 항상 0~1의 값을 갖게 된다.

Input gate

  • 어떤 정보를 cell state에 올릴지를 결정.
  • 현재의 입력(xtx_t)와 Previous hidden state(ht1h_{t-1})이 들어가서 iti_t라는 정보를 만든다. 이 iti_t가 어떤 정보를 올릴지를 결정한다.

Update cell

  • 과거의 cell state(Ct1C_{t-1})를 새로운 cell state(CtC_t)로 업데이트 하는 과정이다.
  • Forget gate를 통해서 얼마나 정보를 버릴지, Input Gate에서 얼마나 정보를 더할지 정한다.(input gate ×\times current state ++ forget gate ×\times previous state)

Output gate

  • hth_t = output gate ×\times update state
  • 최종적으로 얻어진 cell state값을 얼마나 빼낼지 결정한다.

Gated Recurrent Unit

  • cell state가 없고, hidden state가 바로 있게 됨으로써 output gate가 필요 없게 되었다. 2개의 gate만 가지고도 LSTM과 비슷한 역할을 하게 됨.

0개의 댓글