一. 摘要
门控制循环单元是为了解决循环神经网络短期记忆问题提出的解决方案,它们引入称作“门”的内部机制,可以调节信息流。在上次的内容分享中,我们简单解析了名称为GRU的门控制循环单元。因为“门”的机制,我们还可以在此基础上创新出性能更优的循环单元。本次分享的内容也是基于GRU循环单元的强化版:长短期记忆网络(long short-term memory,LSTM)门控制循环单元。
image.png
图1 :LSTM和GRU结构图
二. 长短期记忆(LSTM)
通过图1可以很明显的发现LSTM比GRU“门”的数量更多结构也更复杂。LSTM 中引入了3种类型的门,即输入门(input gate)、遗忘门(forget gate)和输出门(output gate),以及与隐藏状态形状相同的记忆细胞。
输入门、遗忘门和输出门:此3种控制门与门控循环单元中的重置门和更新门功能相似。如图2所示,长短期记忆的门的输入均为当前时间步输入Xt与上一时间步隐藏状态Ht-1,输出由激活函数为sigmoid函数的全连接层计算得到。如此一来,由于sigmoid函数的特性,此3个门元素的输出值域均为[0, 1]。
image.png
图2:LSTM中的输入门、遗忘门和输出门
具体来说,假设隐藏单元个数为h,给定时间步t的小批量输入Xt ∈ Rn×d(样本数为n,输入个数为d)和上一时间步隐藏状态Ht−1 ∈ Rn×h。时间步t的输入门It ∈ Rn×h、遗忘门Ft ∈ Rn×h和输出门Ot ∈ Rn×h分别计算如下:
It = σ(XtWxi + Ht−1Whi + bi),
Ft = σ(XtWxf + Ht−1Whf + bf ),
Ot = σ(XtWxo + Ht−1Who + bo),
其中的Wxi,Wxf ,Wxo ∈ Rd×h和Whi,Whf ,Who ∈ Rh×h都属于权重参数,其余是bi, bf , bo ∈ R1×h是偏差参数。
候选记忆细胞:接下来便是记忆细胞的机制,长短期记忆需要计算候选记忆细胞C˜t。它的计算与上面介绍的3种门类似,但这里使用了值域在[-1, 1]的tanh函数作为激活函数,如图3所示。
image.png
图3:LSTM中的候选记忆细胞计算
那么时间步t的候选记忆细胞C˜t ∈ Rn×h的计算可以表示为:
C˜t = tanh(XtWxc + Ht−1Whc + bc),
上述表达式中的Wxc ∈ Rd×h和Whc ∈ Rh×h是权重参数,bc ∈ R1×h是偏差参数。
记忆细胞:我们可以通过元素值域在[0, 1]的输入门、遗忘门和输出门来控制隐藏状态中信息的流动,这一般也是通过使用按元素乘法(符号为⊙)来实现的。当前时间步记忆细胞Ct ∈ Rn×h的计算组合了上一时间步记忆细胞和当前时间步候选记忆细胞的信息,并通过遗忘门和输入门来控制信息的流动:
Ct = Ft ⊙ Ct−1 + It ⊙ C˜t.
如图4所示,遗忘门控制上一时间步的记忆细胞Ct-1中的信息是否传递到当前时间步,而输入门则控制当前时间步的输⼊Xt通过候选记忆细胞C˜t如何流入当前时间步的记忆细胞。如果遗忘门一直近似1且输入门一直近似0,过去的记忆细胞将一直通过时间保存并传递至当前时间步。这个设计主要是针对循环神经网络中的梯度衰减问题,并且还可以更好地捕捉时间序列中时间步距离较大的依赖关系。
image.png
图4:LSTM忆中记忆细胞的计算。这⾥的⊙是按元素乘法
隐藏状态:有了记忆细胞以后,接下来我们还可以通过输出门来控制从记忆细胞到隐藏状态Ht ∈ Rn×h的信息的流动:
Ht = Ot ⊙ tanh(Ct).
这里的tanh函数确保隐藏状态元素值在-1到1之间。需要注意的是,当输出门近似1时,记忆细胞信息将传递到隐藏状态供输出层使用;当输出门近似0时,记忆细胞信息只自己保留。图5展示了长短期记忆中隐藏状态的计算。
image.png
图5:LSTM忆中隐藏状态的计算。这⾥的⊙是按元素乘法
LSTM的输入门、遗忘门和输出门可以控制信息的流动。隐藏层输出包括隐藏状态和记忆细胞,只有隐藏状态会传递到输出层。长短期记忆可以应对循环神经网络中的梯度衰减问题,并更好地捕捉时间序列中时间步距离较大的依赖关系。
三. 总结
LSTM的核心是细胞的状态,以及其中的各种门结构。细胞状态充当传输通道,在序列链中进行着相关信息的传递。也可以抽象为网络的“记忆”。理论上,细胞状态可以在序列的整个处理过程中携带相关信息。当细胞状态继续进行时,信息通过门被添加或移除到细胞状态。门是不同的神经网络,决定在细胞状态上允许哪些信息。有些门可以了解在训练期间保持或忘记哪些信息。
LSTM与GRU相比较有了更多的“门”控制单元,计算也就更加复杂且耗时。但也对长短期记忆性能有了更好的提升,同时在训练过程中LSTM也更容易产生过拟合现象。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。