Sequential Model
입력이 Sequential data이다. ex) audio, video
sequential data 를 처리할 때 data 입력의 차원을 알 수 없다는 점이 가장 힘들다. 언제 말이나 소리가 끝날지 알기 어렵기 때문이다.
- Naive sequention model
입력이 여러개 들어왔을 때 다음에 들어올 입력을 예측하는 것
$$p(x_{t}|x_{t-1}, x_{t-1, \dotsb})$$
그 전 입력들을 다 고려해야한다. - Autoregressive model
과거 n개에만 의존하는 것 - Markov model : first-order autoregressive model
바로 전 과거에만 의존
많은 정보를 버릴 수 밖에 없게 된다. - Latent autoregressive model
hidden state(latent state)가 과거의 정보를 요약하고 있다. 그리고 다음 step은 오직 전 hidden state에만 의존적이다
$$\hat{x} = p(x_{t}|h_{t})$$
$$h_{t}=g(h_{t-1}, x_{t-1})$$
RNN : Recurrent Neural Network
MLP랑 같은데 자기 자신으로 돌아오는 구조가 하나 더 있다는 점만 다르다.
- $h_{t}$ : hidden state
- A : cell state
RNN을 시간순서로 풀어놓으면 입력이 많고 width가 큰 fully connected layer로 표현될 수 있다.
그래서 RNN은 가까운 과거의 정보는 잘 잡아내지만, 먼 과거의 정보가 미래까지 살아남기 힘들다.
$$h_{1}=\phi(W^{T}h_{0}+U^{T} x_{1})$$
$$h_{2}=\phi(W^{T}\phi(W^{T}h_{0}+U^{T} x_{1})+U^{T}x_{2}$$
- $W, U$ : weight
- $\phi$ : activation function
반복해서 $\phi$를 곱하기 때문에
예를 들어 sigmoid면 값이 계속해서 없어질 것이고, relu에서 양수값이 계속 들어오면 값이 급수적으로 커질 것이다. 이것을 Vanishin / exploding gradient라고 한다.
LSTM
LSTM은 long-term dependencies를 높히기 위해서 RNN의 A안에 구조가 더 생긴다
- $x_{t}$ : input
data가 text라면 단어에 대한 one hot vector나 word embedding이다. - $h_{t}$ : output : hidden state
- previous cell state
내부에서만 흐르고 밖으로 나가지 않는다.
0~t까지의 정보를 요약한 것이다. - previous hidden state = previous output
흘러 가서 output으로도 가지만, next hidden state로 들어가게 된다. - $\sigma$
sigmoid
위의 그림에는 한 time state 당 입력이 3개, 출력이 3개가 된다.
- forget gate
어떤 정보를 버릴지 살릴지결정한다.
현재의 입력 $x_{t}$와 이전의 output $h_{t-1}$이 들어간다.
$$f_{t}=\sigma(W_{f}\cdot[h_{t-1}. x_{t}] + b_{f} )$$
- input gate
어떤 input이 들어왔을 때 무조건 cell state에 전달하는 것이 아니라 이 정보중에 어떤 정보를 cell state에 올릴지 말지 결정한다.
$i_{t}$는 이전 previous hidden state와 현재 입력을 가지고 만들어진다. 어떤 정보를 올리지 말지 결정한다.
$\tilde{C_{t}}$는 tanh를 거쳐서 -1~1사이로 정규화 되어 있는 현재정보와 이전 출력값으로 만들어진 cell state의 예비군이다.
$$i_{t}=\sigma(W_{i}\cdot[h_{t-1}, x_{t}] + b_{i} )$$
$$\tilde{C}_{t} = tanh(W_{C}\cdot [h_{t-1}, x_{t} ] +b_{C})$$
cell을 update할 때 이 $i_{t}$와 $\tilde{C}_{t}$가 곱해지면서 $\tilde{C}_{t}$라는 정보를 cell에 업데이트할지 말지 여부로 $i_{t}$가 곱해진다. - output gate
어떤 값을 output으로 내보낼지
GRU : Gated Recurrent Unit
- Reset gate
- Update gate
cell state가 없고 바로 hidden state가 바로 있다.
LSTM보다 GRU를 활용하면 성능이 높아지는 경우가 많다. 왜냐하면 LSTM보다 gate를 하나 줄여 파라미터 수가 많이 줄기 때문에 generalization performance가 올라가는 것이다.