RNN(Recurrent Neural Network)
input=Dim(batch_size,timesteps,input_size)output=Dim(batch_size,timesteps,hidden_size)
ht=tanh(Whxxt+Whhht−1+bh)
Vanishing/exploding gradient
긴 시퀀스를 처리하는 RNN은 깊은 네트워크가 되면서(W가 반복적으로 곱해지면서) Vanishing/exploding gradient
문제가 발생하기 쉽습니다.
- Relu와 같이 수렴하지 않는 activation을 사용하면 불안정해질 수 있습니다.
- Exploding gradient 문제가 발견되면,
gradient clipping
을 사용하여 값을 제한 해볼 수 있습니다.
LSTM(Long Short-Term Memory)
긴 시퀀스를 처리하는 RNN은 순환이 반복되면서 상대적으로 앞쪽 값의 영향이 줄어들 수 있습니다. 이를 Long-Term Dependency
라고 합니다. LSTM 셀을 사용하면, Long-Term Dependency 문제가 완화되며 훈련 시 빠르게 수렴합니다.
ftitctotctht=σ(Wxfxt+bxf+Whfht−1+bhf)=σ(Wxixt+bxi+Whiht−1+bhi)=tanh(Wxc~xt+bxc~+Whc~ht−1+bhc~)=σ(Wxoxt+bxo+Whoht−1+bho)=ft⊙ct−1+it⊙ct=ot⊙tanh(ct)
- ct는
cell state
입니다.
- ht는
output
입니다.
- ft는
forget gate
로 이전 cell state를 얼마나 잊어버릴 지 결정합니다.
- it는
input gate
로 입력 정보를 얼마나 cell state에 저장할 것일지 결정합니다.
- ot는
output gate
로 업데이트 된 cell state에서 어떤 정보를 내보낼지 결정합니다.
GRU(Gated Recurrent Unit)
LSTM variants 중 하나입니다.
rtzththt=σ(Wxrxt+bxr+Whrht−1+bhr)=σ(Wxzxt+bxz+Whzht−1+bhz)=tanh(Wxh~xt+bxh~+rt⊙(Whh~ht−1+bhh~))=zt⊙ht−1+(1−zt)⊙ht
- ht는
outpu
입니다.
- rt는
reset gate
로 이전 state를 얼마나 output에 포함시킬지 결정합니다.
- zt는
update gate
로 값이 1에 가까울 수록 이전 state가 저장되고, 0에 가까울 수록 새로운 state가 저장됩니다.