RNN
RNN:在 t 时间点上将 t-1 时间点的隐节点 h(t-1) 作为当前时间点的输入(即每一个时间点的输出不仅仅取决于当前时间点的特征,还包括上一个时间点的信息)
传统模型:每一个时间点的隐节点输出只取决于当前时间点的输入特征。
每个时间点的隐因子:
- 计算当前时间点的输出
- 计算下一个时间点的隐因子
RNN问题:
- 梯度消失/爆炸(权值矩阵循环相乘导致,相同函数的多次组合会导致极端的非线性行为,RNN中每个时间片使用相同的权值矩阵)
梯度爆炸解决方法:梯度截断,将超过某个阈值的梯度,截断到阈值(虽然改变了梯度,但是仍然可以保证loss下降)。
而梯度消失,不能采用梯度截断方法来解决。因为长时间的依赖也会产生小的梯度,如果截断(会提高梯度值),对于模型而言,失去了捕捉长时间依赖的能力(改变了模型梯度,使得模型梯度没有往希望的变小方向变化)。
LSTM
LSTM:Long Short Term Memory,长短期记忆网络。针对上述RNN不能捕捉长期依赖的问题,提出了LSTM。
- 【遗忘门】(由上一个隐层和当前输入共同决定,激活函数是sigmod)。控制前一个单元状态的信息,可以用于当前单元状态
- 【输入门】(由上一个隐层和当前输入共同决定,激活函数是sigmod】。控制哪些特征,可以更新单元状态更新值
- 【单元状态更新值】,由上一个隐层和当前输入共同决定,激活函数是tanh。
- 【输入门】,由上一个隐层和当前输入共同决定,激活函数是sigmod】。
- 当前单元状态,由遗忘门和输入门共同决定,后续计算当前隐层。
- 当前隐层,由输入门和当前单元状态共同决定。
- 当前输出,由当前隐层决定(与RNN相同)
LSTM和RNN在公式上的不同,在于获得当前隐层时,采用的门进行信息的控制(遗忘门,输入门,输出门),分别对不同信息及进行控制。
【遗忘门】,【输入门】,【输出门】,【单元状态更新值】,都是由当前输入和上一时刻的隐层得到,前三个的激活函数是sigmoid,最后一个的激活函数是tanh。
RNN是一个链式结构,每个输出由权值W,偏置值b,激活函数决定,每个时间点使用的参数相同。
参考:
- 详解LSTM:https://zhuanlan.zhihu.com/p/42717426
文章出处登录后可见!
已经登录?立即刷新