赞
踩
部分参考:
朱小虎XiaohuZhu:理解 LSTM 网络
【图文并茂】RNN、LSTM、GRU、ConvLSTM、ConvGRU、ST-LSTM的总结
经典必读:门控循环单元(GRU)的基本概念与原理
Deep Learning】详细解读LSTM与GRU单元的各个公式和区别
最为原始的循环神经网络,本质就是全连接网络,只是为了考虑过去的信息,输出不仅取决于当前输入,还取决于之前的信息,也就是输出由之前的信息(也就是状态state)和此时的输入决定。
RNN 可以被看做是同一神经网络的多次复制,每个神经网络模块会把消息传递给下一个。所以,如果我们将这个循环展开:
LSTM 通过刻意的设计来避免长期依赖问题。记住长期的信息在实践中是 LSTM 的默认行为。所有 RNN 都具有一种重复神经网络模块的链式的形式。LSTM 同样是这样的结构,但是重复的模块拥有一个不同的结构。不同于 单一神经网络层,这里是有四个,以一种非常特殊的方式进行交互。
在上面的图例中,每一条黑线传输着一整个向量,从一个节点的输出到其他节点的输入。粉色的圈代表按位 pointwise 的操作,诸如向量的和,而黄色的矩阵就是学习到的神经网络层。合在一起的线表示向量的连接,分开的线表示内容被复制,然后分发到不同的位置。
LSTM 有通过精心设计的称作为“门”的结构来去除或者增加信息到细胞状态的能力。门是一种让信息选择式通过的方法。他们包含一个 sigmoid
神经网络层和一个按位的乘法操作。
Sigmoid
层输出 0 到 1 之间的数值,描述每个部分有多少量可以通过。0 代表“不许任何量通过”,1 就指“允许任意量通过”
LSTM 拥有三个门,来保护和控制细胞状态。
LSTM 中的第一步是决定我们会从细胞状态中丢弃什么信息。这个决定通过一个称为忘记门层完成。该门会读取ht-1和 xt,输出一个在0 到 1之间的数值给每个在细胞状态Ct-1中的数字。 1表示“完全保留”, 0表示“完全舍弃”。将旧状态与ft相乘,丢弃掉我们确定需要丢弃的信息。
eg:语言模型中,将一句话翻译成翻译成别的语言时,胞状态可能包含当前主语的性别,因此正确的代词可以被选择出来。当我们看到新的主语,我们希望忘记旧的主语。
Ct-1更新为Ct,
sigmoid
层称 “输入门层” 决定什么值我们将要更新。tanh
层创建一个新的候选值向量,C~t,会被加入到状态中。it*C~t为新的候选值,根据我们决定更新每个状态的程度进行变化。在语言模型的例子中,这就是我们实际根据前面确定的目标,丢弃旧代词的性别信息并添加新的信息的地方。
最终,我们需要确定输出什么值。这个输出将会基于我们的细胞状态,但是也是一个过滤后的版本。
总结,我们上述两步可以归纳为:首先,我们运行一个sigmoid
层来确定细胞状态的哪个部分将输出出去。接着,我们把细胞状态通过tanh
进行处理(得到一个在-1到1之间的值)并将它和sigmoid
门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。
在语言模型的例子中,因为他就看到了一个 代词,可能需要输出与一个 动词 相关的信息。例如,可能输出是否代词是单数还是负数,这样如果是动词的话,我们也知道动词需要进行的词形变化.
peephole连接:让 门层 也会接受细胞状态的输入
coupled 忘记门和输入门:同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态 。
GRU背后的原理与 LSTM 非常相似,即用门控机制控制输入、记忆等信息而在当前时间步做出预测,根本上是一种LSTM的变体,它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。
为了解决标准 RNN 的梯度消失问题,GRU 有两个有两个门,即一个重置门(reset gate)和一个更新门(update gate)。从直观上来说
基本上,这两个门控向量决定了哪些信息最终能作为门控循环单元的输出。这两个门控机制的特殊之处在于,它们能够保存长期序列中的信息,且不会随时间而清除或因为与预测不相关而移除。
如果我们将重置门设置为 1,更新门设置为 0,那么我们将再次获得标准 RNN 模型。使用门控机制学习长期依赖关系的基本思想和 LSTM 一致,但还是有一些关键区别
在时间步 t,我们首先需要使用以下公式计算更新门 zt:
其中 xt为第 t 个时间步的输入向量,即输入序列 X 的第 t 个分量,它会经过一个线性变换(与权重矩阵 W(z) 相乘)。ht-1保存的是前一个时间步 t-1 的信息。更新门将这两部分信息相加并投入到 Sigmoid 激活函数中,因此将激活结果压缩到 0 到 1 之间。
更新门帮助模型决定到底要将多少过去的信息传递到未来,或到底前一时间步和当前时间步的信息有多少是需要继续传递的。这一点非常强大,因为模型能决定从过去复制所有的信息以减少梯度消失的风险。我们随后会讨论更新门的使用方法,现在只需要记住 zt 的计算公式就行。
本质上来说,重置门主要决定了到底有多少过去的信息需要遗忘,我们可以使用以下表达式计算:
该表达式与更新门的表达式是一样的,只不过线性变换的参数和用处不一样而已。如前面更新门所述,ht-1 和 xt 先经过一个线性变换,再相加投入 Sigmoid 激活函数以输出激活值。
现在我们具体讨论一下这些门控到底如何影响最终的输出。在重置门的使用中,新的记忆内容将使用重置门储存过去相关的信息,它的计算表达式为:
输入 xt 与上一时间步信息 ht-1 先经过一个线性变换,即分别右乘矩阵 W 和 U。
计算重置门 rt 与 Uht-1的 Hadamard 乘积,即 rt 与 Uht-1 的对应元素乘积。因为前面计算的重置门是一个由 0 到 1 组成的向量,它会衡量门控开启的大小。例如某个元素对应的门控值为 0,那么它就代表这个元素的信息完全被遗忘掉。该 Hadamard 乘积将确定所要保留与遗忘的以前信息。
将这两部分的计算结果相加再投入双曲正切激活函数中。
在最后一步,网络需要计算 ht,该向量将保留当前单元的信息并传递到下一个单元中。在这个过程中,我们需要使用更新门,它决定了当前记忆内容 h’t和前一时间步 ht-1 中需要收集的信息是什么。这一过程可以表示为:
zt为更新门的激活结果,它同样以门控的形式控制了信息的流入。zt与 ht-1的 Hadamard 乘积表示前一时间步保留到最终记忆的信息,该信息加上当前记忆保留至最终记忆的信息就等于最终门控循环单元输出的内容。
结构上:
功能上:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。