[笔记]RNN和LSTM
其他
2020-04-10 18:51:11
阅读次数: 0
RNN与LSTM详解
RNN
- RNN
\[h_t = f(W_xx_t+W_hh_{t-1}) \]
\[\hat y_t = \sigma(W_oh_t) \]
\[L_t = g(\hat y_t) \]
\[L = \Sigma_{t=1}^TL_t \]
- BPTT随时间反向传播[梯度爆炸和梯度消失]
\[\frac{\partial L}{\partial W_o} = \Sigma_{t=1}^T\frac{\partial L_t}{\partial \hat y_t}\frac{\partial \hat y_t}{\partial W_o} \]
\[\frac{\partial L}{\partial W_h}= \Sigma_{t=1}^T\frac{\partial L_t}{\partial \hat y_t} \frac{\partial \hat y_t}{\partial h_t} \frac{\partial h_t}{\partial W_h} \]
由于\(h_t\)涉及\(h_{t-1}\),而\(h_{t-1}\)涉及到\(W_h\),所以随时间步回溯逐项求导,得
\[\frac{\partial h_t}{\partial W_h}=\Sigma_{i=1}^{t}\frac{\partial h_t}{\partial h_i}\frac{\partial h_i}{\partial W_h} \]
\[\frac{\partial h_t}{\partial h_i} = \Pi_{j=i}^{t-1} \frac{\partial h_{j+1}}{\partial h_j} \]
所以,
\[\frac{\partial L}{\partial W_h} = \Sigma_{t=1}^T \frac{\partial L_t}{\partial \hat y_t}\frac{\partial \hat y_t}{\partial h_t}\Sigma_{i=1}^t(\Pi_{j=i+1}^{t} \frac{\partial h_{j}}{\partial h_{j-1}})\frac{\partial h_i}{\partial W_h} \]
考虑到\(\frac{\partial h_t}{\partial h_{t-1}} = f'*W_h\),当f为tanh函数时,其梯度范围为[0,1],所以当\(j\)与\(t\)的相差过大(相距太远),如果\(W_h>1\),则会产生梯度爆炸的问题;如果\(W_h<1\),则会产生梯度消失的情况。(特别注意:从公式我们可以发现,总损失对于参数的梯度值是存在的,但梯度值被近距离时间步所主导,无法学习得到长期依赖信息。所以,RNN中的梯度消失实际上指的就是无法学习得到长期依赖信息)
LSTM
- 模型
\[输入门: i_t = \sigma(W_ix_t+U_ih_{t-1}+b_i) \]
\[遗忘门:f_t = \sigma(W_fx_t+U_fh_{t-1}+b_f) \]
\[\hat c_t = tanh(W_cx_t+U_ch_{t-1}+b_c) \]
\[状态:c_t = i_t \cdot \hat c_t + f_t \cdot c_{t-1} \]
\[输出门:o_t = \sigma(W_ox_t+U_oh_{t-1}+b_o) \]
\[输出:h_t = o_t \cdot tanh(c_t) \]
- 激活函数
门控的激活函数:使用Sigmoid函数,输出在0~1之间,符合门控的物理定义;另外当输入较大或者较小的情况,其输出会非常接近0或者1,保证该门开或者关。
候选记忆的激活函数:使用tanh激活函数,为0均值,与大多数场景下的特征分布吻合。(特别注意的是,LSTM中候选记忆的激活函数原使用Sigmoid函数的变种【变种到0均值】,且没有遗忘门【即遗忘门数值直接为1,即记忆全部保留】,最后大量研究和实验证明,使用遗忘门和tanh激活函数性能提升很大)
- LSTM如何解决学习长期依赖信息
LSTM中的状态之间的梯度为\(\frac{\partial c_t}{\partial c_{t-1}}=f_t\),就是遗忘门的数值。一般来说,遗忘门的数值不是0就是1,0表示以前的依赖信息不再重要;1表示以前的依赖信息依然重要。(原始LSTM不使用遗忘门,则表示保留所有的长期依赖信息,在后续研究和实验过程发现,加上遗忘门,主动丢弃不必要的长期依赖可以提高LSTM的性能。)
转载自www.cnblogs.com/mrdragonma/p/12675175.html