计算机系统应用教程网站

网站首页 > 技术文章 正文

人工智能基础:LSTM及其变种介绍,方便针对实际问题取舍

btikc 2024-11-01 11:24:45 技术文章 4 ℃ 0 评论

基础的LSTM介绍


LSTM是一种特殊形式的RNN,由Hochreiter和Schmidhuber于1997年提出,他是专为解决梯度消失和梯度爆炸问题而设计的。在学习长时依赖关系时它有着卓越表现,并成为RNN的事实上的标准。此后,人们相继提出LSTM的若干变种,这些变种都收录在tensorflow中。

LSTM的最大改进是把RNN中的普通神经元替换为其内部拥有少量记忆的LSTM单元。如同普通RNN一样,这些单元也被连接在一起,但他们还拥有有助于记忆许多时间步中的误差的内部状态。

LSTM的窍门在于这种内部状态拥有固定权值为1的自连接,以及一个线性激活函数,因此其局部内部偏导始终为1.在反向传播阶段,这个所谓的常量误差传输子(constant error carousel)能够在许多时间步中携带误差而不会发生梯度消失或者梯度爆炸。

尽管内部状态的目的是随许多时间步传递误差,LSTM架构架构中负责学习的实际上是环绕门(surrounding gates),这些门都拥有一个非线性的激活函数(通常为sigmoid)。在原始的LSTM单元中有两种门:一种负责学习如何对到来的活性值进行缩放,而另一种负责学习如何对输出的活性值进行缩放。因此,这种单元可学习包含或者忽略新的输入,以及何时将它表示的特征传递给其他单元。一个单元的输入会送入使用不同权值的所有门中。也可将RNN视为一些层,因为它可以用作规模更大的网络架构的组成。例如,我们可以先将时间步送入若干卷积和赤化层,然后用一个LSTM层处理这些输出,并在位于随后的时间步LSTM活性值上添加一个softmax层。

tensorflow为这样的LSTM提供了LSTMCell类,它可以直接替换BasicRNNCell类,同时该类还提供了一些额外的开关。尽管该类名称从字面上看只有一个LSTM单元,实际上却表示了一个完整的LSTM层。我们还可以将LSTM层与其他网络进行连接,以形成更大规模的网络。

上图表示的是基本的LSTM单元和一个LSTM层。

LSTM结构的变种


LSTM的一种比较流行的变种是添加一个对内部循环连接进行比例缩放的遗忘门,以允许网络徐汇遗忘。这样,内部循环连接的局部偏导就编程了遗忘门的活性值,从而取为非1的值。当记忆单元上下文非常重要时,也可以把遗忘门关闭。遗忘门的初始值一般设置为1,这样LSTM就可以从一个记忆状态开始工作。如今,几乎所有的实现中,遗忘门都是默认存在的。在tensorflow中,可通过指定LSTM层的forget_bias参数对遗忘门的偏置进行初始化。

另一种扩展是添加窥视孔连接(peephole connection),以使一些门能看到单元的状态。提出该变种的作者声称当任务中设计有精确时间选择和间隔时,使用窥视孔连接时有益的。tensorflow的LSTM层支持窥视孔连接,可通过LSTM层传入use_peepholes=True实现。

基于LSTM的基本思想,Chung等人于2014年提出了门循环单元(Gate Recurrent Unit,GRU)。和LSTM比,GRU架构更简单,而且只需要更少的计算就可以得到与LSTM相近的结果。GRU没有输出门,它将输入和遗忘门整合成一个单独的更新门。更新门决定了内部状态与候选活性值的融合比例。候选活性值是一句由重置门和新的输入确定的部分隐含状态计算得到的。tensorflow的GRU层对应GRUCell类,除了该层中的单元数目,它步含其他任何参数。若想进一步了解GRU,可参考Jozefowicz等发表的ICML015文章。

多层RNN与单层多神经元的取舍


到目前为止,我们研究了带有全连接隐含单元的RNN,这是最一般的架构,因为这种网络能够学会在训练期间将不需要的权值置为0。不过,最常见的做法是将两层或者多层全连接的RNN相互堆叠。这仍可视为一个其连接拥有某种结构的RNN网络。由于信息只在两层之间向上流动,与规模较大的全连接RNN相比,多层RNN拥有的权值数目更少,而且有助于学习到更多的抽象特征。

下次将用一个实例来介绍LSTM的使用以便观察效果,敬请期待。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表