聊聊RNN&LSTM

RNN

用于解决输入数据为,序列到序列(时间序列)数据,不能在传统的前馈神经网络(FNN)很好应用的问题。时间序列数据是指在不同时间点上收集到的数据,这类数据反映了某一事物、现象等随时间的变化状态或程度,即输入内容的上下文关联性强。

整体结构

x、o为向量,分别表示输入层、输出层的值;U、V为权重矩阵,U是输入层到隐藏层的权重矩阵,V是隐藏层到输出层的权重矩阵,W 是上一次的值 S(t-1) 作为这一次的输入的权重矩阵,S(t)是当前的隐藏层矩阵。

RNN层结构与计算公式

RNN层计算公式
RNN层正向传播

MatMul表示矩阵乘积。

这里的h也就是s,都是RNN层函数的输出结果。RNN层的处理函数是tanh,输出结果是h,因此RNN层具有"状态",这也是其具有记忆性的原因。

RNN隐藏层的输出结果,也被称为隐藏状态或是隐藏状态向量,一般用h或s表示。

RNN层反向传播

蓝线表示反向传播的线路图

带来的问题

由于激活函数Tanh其反向传播时,会导致梯度为0或趋于很大的数值,导致梯度消失或爆炸。

LSTM

通过引入输入门、遗忘门和输出门,解决RNN模型下带来的梯度消失的问题。

整体结构

输出门的结果用o来表示,其计算公式如下:

遗忘门的结果用f表示,其计算公式如下:

输入门的结果用i表示,其计算公式如下:

遗忘门从上一时刻的记忆单元中删除了应该忘记的东西,但需要添加一些应当记住的新信息,新的记忆单元g,其计算公式如下:

要注意的是,不同的门输出所代表的意义不一样,因为其最后流向的地方不一样,分别是转换为了新的记忆单元c,新的隐藏状态h。

最终汇总后的整体结构如下

反向传播

蓝线代表反向传播路径,记忆单元的反向传播仅流过"+"和"×"节点。"+"节点将上游传来的梯度原样流出,所以梯度没有变化(退化)。

优化

LSTM的优化可以从三个方面

  1. LSTM层的多层化
    1. 在使用RNN创建高精度模型时,加深LSTM层(叠加多个LSTM层)的方法往往很有效。之前我们只用了一个LSTM层,通过叠加多个层,可以提高语言模型的精度。
  2. 基于Dropout抑制过拟合
    1. 通过叠加LSTM层,可以期待能够学习到时序数据的复杂依赖关系。换句话说,通过加深层,可以创建表现力更强的模型,但是这样的模型往往会发生过拟合(overfitting)。
    2. Dropout随机选择一部分神经元,然后忽略它们,停止向前传递信号。这种"随机忽视"是一种制约,可以提高神经网络的泛化能力。
  3. 权重共享
    1. 共享权重可以减少需要学习的参数数量,从而促进学习。另外,参数数量减少,还能收获抑制过拟合的好处。
    2. 绑定(共享)Embedding层和Affine层的权重的技巧在于权重共享。通过在这两个层之间共享权重,可以大大减少学习的参数数量。
相关推荐
Tasiorh1 天前
《基于LSTM-RNN-CBAM模型和动态规划模型的交易策略》
rnn·lstm·动态规划
焱童鞋3 天前
基于DJL的LSTM水文预报模型训练完整指南
人工智能·rnn·lstm
一碗白开水一4 天前
入门实践工程十:PyTorch 模型量化与 ONNX 导出~附:安装依赖库及工程源码
人工智能·pytorch·python·rnn·深度学习·机器学习
Lee_jerome4 天前
python神经网络编程入门(三十)——Transformer 从 RNN 到注意力:模型为什么需要“瞄一眼“
rnn·深度学习·nlp·transformer·attention·注意力机制·序列建模
bittersuite4 天前
深层RNN和双向RNN简述
人工智能·rnn·深度学习
阿图灵4 天前
基于 LSTM 的中文电商评论情感分类:从数据处理到 91% 准确率实战
人工智能·深度学习·分类·nlp·lstm·情感分类
Lee_jerome5 天前
python神经网络编程入门(二十七)——RNN IMBD搭建情感分类器与基础训练
pytorch·rnn·深度学习·gru·词嵌入·情感分析·imdb
在学了加油6 天前
LSTM-糖尿病预测模型优化探索
人工智能·rnn·lstm
Lee_jerome7 天前
python神经网络编程入门(二十五)——IMDB 数据集预处理与词汇表构建
rnn·深度学习·词频统计·文本预处理·imdb数据集·词表构建·nlp入门
技术小黑8 天前
RNN算法实战系列05 | 天气预测
人工智能·rnn·算法