[DL-Basic][Seq] RNN과 LSTM

mincheol2·2022년 2월 9일
0

DeepLearningBasic

목록 보기
6/7

이 글은 부스트캠프 AI Tech 3기 강의를 듣고 정리한 글입니다.

Sequential Model

Sequence model 에서 가장 큰 어려움은 길이가 달라 모델링이 쉽지 않다는 것이다.

해결법

Naive sequence model

초기에는 sequenctial 한 데이터를 다루기 위해 이전 데이터를 계속해서 고려하는 모델을 만들었다.

하지만 이런 모델은 시간이 지날수록 input(조건부 부분) 이 계속해서 커지는 문제가 있기 때문에 모델링에 적합하지 않다.

Autoregressive model

input(조건부 부분) 이 계속해서 커지는 문제를 해결하기 위해 고정된 과거의 크기만큼만 고려하겠다는 AR(자기회귀)모델 을 만들었다.


Markov model(first-order AR model)

AR모델 에서 바로 직전 과거에만 영향을 받는 모델을 Markov Model 이라고 한다.

장점

  • 조건부를 표현하기 쉽다.

단점

  • 바로 전 과거에만 영향을 받아 과거의 많은 데이터에 대한 소실이 있다.
    • 예를 들어 수능점수를 예측하는 모델을 만들 때 바로 어제 공부한 것에만 영향을 받는 모델이 만들어지게 된다.

Latent AR model

Vanila RNN 의 기본개념이 되는 모델이다.

Latent 변수h(hidden state) 를 만들어 h 하나에만 의존적인 모델을 만드는 것이다.

이때 h는 과거정보를 요약한 것이다.

RNN

RNN의 수식을 포함한 내용은 이 글을 참조하자.

위에서 살펴본 모델의 개념을 DL로 구현한 것이 RNN 이다.

아래 그림에서 왼쪽은 RNN의 기본적인 개념으로 회귀하는 특성을 표현한 그림이고,

오른쪽은 왼쪽 개념도를 unfold 한 것으로 실제 RNN이 학습하는 과정을 나타낸다.

Short-term dependencies

RNN 의 치명적인 단점은 Short-term dependencies 이다.

하나의 fix 된 룰로 과거정보를 취합하기 때문에 과거 정보가 미래까지 살아남기 힘들다.
그렇기 때문에 몇 step 전에 있는 것은 잘 반영이 되지만 멀리 있는 정보는 반영이 잘 되지 않는다.

그림의 수식에서 파란색 하이라이트를 보면 h0h_0h4h_4에 갈 때까지 똑같은 WWϕ\phi를 계속해서 통과하는 과정을 겪게되면서 h0h_0 가 의미가 없어지게 된다.

예를 들어 Gradientϕ\phiReLU라면 exploding , ϕ\phisigmoid라면 Vanising 되면서 h0h_0는 쓸모없어지게 된다.



LongShortTermMemory

RNN의 단점을 보완하기 위해 LSTM이 등장했다.
LSTM 은 아래와 같은 뭔가 복잡한 구조를 가졌다.

가운데만 확대해 보면 이런 구조를 가지고 있는데

하나하나 뜯어보도록 하자.

Core idea


가운데 흐르는 Cell state 를 통해 시점 t 까지의 정보를 취합하게 된다.
이때 어떤정보가 유용하고 안 유용한지 걸러 주는 역할을 하게 되고, 이 cell state는 내부에서만 흐르게 된다.

Forget gate

이전의 h 와 지금의 x를 가지고 어떤 것을 버릴지 결정하는 gate



Input gate

어떤정보를 Cell state 에 올릴지 결정하는 gate

iti_t : 어떤 정보를 올릴지
Ct~\tilde{C_t} : 이전정보와 현재정보로 만들어지는 cell state의 예비군


Update cell

input gateforget gate 의 정보를 취합하여 cell stateupdate


Output gate

어떤 값을 밖으로 빼낼지 (어떤 값을 hh 에 반영할지) 결정하는 gate


요약

Previous cell state ,
previous hidden state ,
input 3가지가 신경망으로 들어오게 되면

이전 cell state를 얼만큼 지워버릴지 정하고 ( Forget gate )

Previous cell stateinput 를 가지고 어떤 값을 올릴지 C~\tilde{C} 를 정하고( Input gate)

updatecell stateC~\tilde{C} 를 조합하여 새로운 cell state를 만들고 ( Update cell )

그 정보를 얼만큼 빼낼지 정해서 최종적인 출력값 도출 ( Output gate )





요즘엔 잘 쓰지 않고,
Tranformer 모델로 거의 대체되는 추세이다.

Reference

https://colah.github.io/posts/2015-08-Understanding-LSTMs/

profile
옹오옹오오오옹ㅇㅇ

0개의 댓글