在使用反向传播(Elman,1990)训练第一个 Elman 式 RNN 后不久,学习长期依赖性(由于梯度消失和爆炸)的问题变得突出,Bengio 和 Hochreiter 讨论了这个问题 (Bengio等人, 1994 年,Hochreiter等人,2001 年). Hochreiter 早在他 1991 年的硕士论文中就阐明了这个问题,尽管结果并不广为人知,因为论文是用德语写的。虽然梯度裁剪有助于梯度爆炸,但处理消失的梯度似乎需要更精细的解决方案。Hochreiter 和 Schmidhuber ( 1997 )提出的长短期记忆 (LSTM) 模型是解决梯度消失问题的第一个也是最成功的技术之一。LSTM 类似于标准的递归神经网络,但这里每个普通的递归节点都被一个记忆单元取代。每个存储单元包含一个内部状态,即具有固定权重 1 的自连接循环边的节点,确保梯度可以跨越多个时间步而不会消失或爆炸。
“长短期记忆”一词来自以下直觉。简单的递归神经网络具有权重形式的长期记忆。权重在训练过程中缓慢变化,对数据的一般知识进行编码。它们还具有短暂激活形式的短期记忆,从每个节点传递到连续的节点。LSTM 模型通过记忆单元引入了一种中间类型的存储。存储单元是一个复合单元,由具有特定连接模式的较简单节点构成,并包含新的乘法节点。
import tensorflow as tf
from d2l import tensorflow as d2l
10.1.1。门控存储单元
每个存储单元都配备了一个内部状态和多个乘法门,用于确定 (i) 给定的输入是否应该影响内部状态(输入门),(ii) 内部状态是否应该被刷新到0(遗忘门),以及 (iii) 应该允许给定神经元的内部状态影响细胞的输出(输出门)。
10.1.1.1。门控隐藏状态
普通 RNN 和 LSTM 之间的主要区别在于后者支持隐藏状态的门控。这意味着我们有专门的机制来确定何时应该更新隐藏状态以及何时应该重置它。这些机制是学习的,它们解决了上面列出的问题。例如,如果第一个标记非常重要,我们将学习在第一次观察后不更新隐藏状态。同样,我们将学会跳过不相关的临时观察。最后,我们将学习在需要时重置潜在状态。我们将在下面详细讨论。
10.1.1.2。输入门、遗忘门和输出门
进入 LSTM 门的数据是当前时间步的输入和前一时间步的隐藏状态,如图 10.1.1所示。三个具有 sigmoid 激活函数的全连接层计算输入门、遗忘门和输出门的值。作为 sigmoid 激活的结果,三个门的所有值都在范围内(0,1). 此外,我们需要一个 输入节点,通常使用tanh激活函数计算。直观上,输入门决定了输入节点的多少值应该添加到当前存储单元的内部状态。遗忘 门决定是保留内存的当前值还是刷新内存。而输出门决定了记忆单元是否应该影响当前时间步的输出。
在数学上,假设有h隐藏单元,批量大小为n,输入的数量是d. 因此,输入是Xt∈Rn×d上一个时间步的隐藏状态是 Ht−1∈Rn×h. 相应地,时间步长的门t定义如下:输入门是It∈Rn×h, 遗忘门是 Ft∈Rn×h,输出门是 Ot∈Rn×h. 它们的计算方式如下:
在哪里
评论
查看更多