rnn
循环神经网络 RNN
-
序列建模
- 传统思维:给定一组相关属性,来推断最终的结果,但是不会考虑时间的属性,比如给你小名的成绩单,你只考虑他的几次考试的成绩,但是不考虑考试时间,那么期末成绩预测就不一定准确
- 包含时间变量:类似于输入一句话,每个单词都有其顺序,所以顺序不同的话其对应的重要性应该也不能相同。输出也可以按照时间序列展开输出,例如chat回答问题不是一下子一整段话
- 公式 $S_t = f(W_i X + W_S S_{t-1} + b) $
- 常见示意图:

- 这里我们理解为通过一个 矩阵不断更新隐藏层的状态,使得其带有上一帧的属性,具有一定的记忆力
-
反向传播
-
基于时间关系的逆向传播 Backpropagation Through Time
-
梯度爆炸问题:由于链式法则一路上乘了很多很大的矩阵,结果数据很大,很难看出要求的梯度
- 通过梯度裁剪方法,缩放大梯度
-
梯度消失问题:链式法则乘了很多很小的矩阵结果数据很小也难看出梯度
-
- 选择合适的激活函数
- 例如 函数的导数为 1 可以让导数不要衰减
-
- 合理地初始化权重矩阵
- 例如令最初的矩阵为单位矩阵,这样就不会出现权重变得很小的情况
-
- 对神网架构重新设计
-
使用门控细胞 (Gated Cells)
-
其中最有名的一类叫 LSTM (Long Short Term Memory), 能更好的维护长期依赖关系,也能反向传播很长距离而不出现梯度消失的问题
-
如上图所示,信息通过激活函数和加乘的方式进入或者删除
-
- 遗忘门: 遗忘无关信息,取前一轮的状态通过sigmoid
-
- 记忆门:判断哪部分新信息是相关的,哪部分旧信息是无关的,将其存储到细胞结构之中
-
- 更新细胞状态:对于中间量 进行更新
-
- 输出层:输出并且传输给下一层
-
好处:
-
- 输出保持一个独立的单元状态
-
- 反向传播的时候梯度流不会间断,直接一路从 走下去,相比 RNN 的 计算简便很多
-
-
-
-
以上均称为长程传播问题
- 远距离效果差
-
-
实践
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.






