循环神经网络(RNN)简易教程( 二 )


如果最大奇异值小于1 , 则梯度将消失 , 称为消失梯度 。
循环神经网络(RNN)简易教程文章插图
权重在所有层中共享 , 导致梯度爆炸或消失
对于梯度爆炸问题 , 我们可以使用梯度剪裁 , 其中我们可以预先设置一个阈值 , 如果梯度值大于阈值 , 我们可以剪裁它 。
为了解决消失梯度问题 , 常用的方法是使用长短期记忆(LSTM)或门控循环单元(GRU) 。
在我们的消息示例中 , 为了预测下一个单词 , 我们需要返回几个时间步骤来了解前面的单词 。 我们有可能在两个相关信息之间有足够的差距 。 随着差距的扩大 , RNN很难学习和连接信息 。 但这反而是LSTM的强大功能 。
循环神经网络(RNN)简易教程文章插图
长短时记忆网络(LSTM)LSTMs能够更快地学习长期依赖关系 。 LSTMs可以学习跨1000步的时间间隔 。 这是通过一种高效的基于梯度的算法实现的 。
为了预测消息中的下一个单词 , 我们可以将上下文存储到消息的开头 , 这样我们就有了正确的上下文 。 这正是我们记忆的工作方式 。
让我们深入了解一下LSTM架构 , 了解它是如何工作的
循环神经网络(RNN)简易教程文章插图
LSTMs的行为是在很长一段时间内记住信息 , 因此它需要知道要记住什么和忘记什么 。
LSTM使用4个门 , 你可以将它们认为是否需要记住以前的状态 。 单元状态在LSTMs中起着关键作用 。 LSTM可以使用4个调节门来决定是否要从单元状态添加或删除信息 。
这些门的作用就像水龙头 , 决定了应该通过多少信息 。
循环神经网络(RNN)简易教程文章插图
循环神经网络(RNN)简易教程文章插图

  1. LSTM的第一步是决定我们是需要记住还是忘记单元的状态 。 遗忘门使用Sigmoid激活函数 , 输出值为0或1 。 遗忘门的输出1告诉我们要保留该值 , 值0告诉我们要忘记该值 。

循环神经网络(RNN)简易教程文章插图
  1. 第二步决定我们将在单元状态中存储哪些新信息 。 这有两部分:一部分是输入门 , 它通过使用sigmoid函数决定是否写入单元状态;另一部分是使用tanh激活函数决定有哪些新信息被加入 。

循环神经网络(RNN)简易教程文章插图
  1. 在最后一步中 , 我们通过组合步骤1和步骤2的输出来创建单元状态 , 步骤1和步骤2的输出是将当前时间步的tanh激活函数应用于输出门的输出后乘以单元状态 。 Tanh激活函数给出-1和+1之间的输出范围
  2. 单元状态是单元的内部存储器 , 它将先前的单元状态乘以遗忘门 , 然后将新计算的隐藏状态(g)乘以输入门i的输出 。

循环神经网络(RNN)简易教程文章插图
最后 , 输出将基于单元状态
循环神经网络(RNN)简易教程文章插图
从当前单元状态到前一单元状态的反向传播只有遗忘门的单元相乘 , 没有W的矩阵相乘 , 这就利用单元状态消除了消失和爆炸梯度问题
循环神经网络(RNN)简易教程文章插图
LSTM通过决定忘记什么、记住什么、更新哪些信息来决定何时以及如何在每个时间步骤转换记忆 。 这就是LSTMs如何帮助存储长期记忆 。
以下LSTM如何对我们的消息进行预测的示例
循环神经网络(RNN)简易教程文章插图
GRU , LSTM的变体GRU使用两个门 , 重置门和一个更新门 , 这与LSTM中的三个步骤不同 。 GRU没有内部记忆
重置门决定如何将新输入与前一个时间步的记忆相结合 。
更新门决定了应该保留多少以前的记忆 。 更新门是我们在LSTM中理解的输入门和遗忘门的组合 。
【循环神经网络(RNN)简易教程】GRU是求解消失梯度问题的LSTM的一个简单变种