三次简化一张图: 一招理解LSTM/GRU门控机制

  


RNN是深度学习中用于处理时序数据的关键技术, 目前已在自然语言处理, 语音识别, 视频识别等领域取得重要突破, 然而梯度消失现象制约着RNN的实际应用。LSTM和GRU是两种目前广为使用的RNN变体,它们通过门控机制很大程度上缓解了RNN的梯度消失问题,但是它们的内部结构看上去十分复杂,使得初学者很难理解其中的原理所在。本文介绍”三次简化一张图”的方法,对LSTM和GRU的内部结构进行分析。该方法非常通用,适用于所有门控机制的原理分析。

预备知识: RNN


RNN (recurrent neural networks, 注意不是recursiveneural networks)提供了一种处理时序数据的方案。和n-gram只能根据前n-1个词来预测当前词不同, RNN理论上可以根据之前所有的词预测当前词。在每个时刻, 隐层的输出ht依赖于当前词输入xt和前一时刻的隐层状态ht-1:

其中:=表示”定义为”, sigm代表sigmoid函数sigm(z):=1/(1+exp(-z)), Wxh和Whh是可学习的参数。结构见下图:

图中左边是输入,右边是输出。xt是当前词,ht-1记录了上文的信息。xt和ht-1在分别乘以Wxh和Whh之后相加,再经过tanh非线性变换,最终得到ht。

在反向传播时,我们需要将RNN沿时间维度展开,隐层梯度在沿时间维度反向传播时需要反复乘以参数。因此, 尽管理论上RNN可以捕获长距离依赖, 但实际应用中,根据谱半径(spectralradius)的不同,RNN将会面临两个挑战:梯度爆炸(gradient explosion)和梯度消失(vanishing gradient)。梯度爆炸会影响训练的收敛,甚至导致网络不收敛;而梯度消失会使网络学习长距离依赖的难度增加。这两者相比, 梯度爆炸相对比较好处理,可以用梯度裁剪(gradientclipping)来解决,而如何缓解梯度消失是RNN及几乎其他所有深度学习方法研究的关键所在。

LSTM

LSTM通过设计精巧的网络结构来缓解梯度消失问题,其数学上的形式化表示如下:

其中代表逐元素相乘。这个公式看起来似乎十分复杂,为了更好的理解LSTM的机制, 许多人用图来描述LSTM的计算过程, 比如下面的几张图:

似乎看完了这些图之后,你对LSTM的理解还是一头雾水? 这是因为这些图想把LSTM的所有细节一次性都展示出来,但是突然暴露这么多的细节会使你眼花缭乱,从而无处下手。

因此,本文提出的方法旨在简化门控机制中不重要的部分,从而更关注在LSTM的核心思想。整个过程是“三次简化一张图”,具体流程如下:

第一次简化: 忽略门控单元i,f,o的来源。3个门控单元的计算方法完全相同, 都是由输入经过线性映射得到的, 区别只是计算的参数不同。这样做的目的是为了梯度反向传导时能对门控单元进行更新。这不是LSTM的核心思想, 在进行理解时,我们可以假定各门控单元是给定的。

第二次简化: 考虑一维情况。LSTM中对各维是独立进行门控的,所以为了理解方便,我们只需要考虑一维情况。

第三次简化: 各门控单元0/1输出。 门控单元输出是[0,1]实数区间的原因是阶跃激活函数无法反向传播进行优化, 所以各门控单元使用sigmoid激活函数去近似阶跃函数。 因此, 为了理解方便, 我们只需要考虑理想情况, 即各门控单元是{0,1}二值输出的,即门控单元扮演了电路中”开关”的角色, 用于控制信息传输的通断。

一张图: 将三次简化的结果用”电路图”表述出来,左边是输入,右边是输出。另外需要特别注意的是LSTM中的c实质上起到了RNN中h的作用, 这点在其他文献资料中不常被提到。最终结果如下:

和RNN相同的是,网络接受两个输入,得到一个输出。不同之处在于, LSTM中通过3个门控单元来对记忆单元c的信息进行交互。

根据这张图,我们可以对LSTM中各单元作用进行分析:

输入门it: it控制当前词xt的信息融入记忆单元ct。在理解一句话时,当前词xt可能对整句话的意思很重要,也可能并不重要。输入门的目的就是判断当前词xt对全局的重要性。当it开关打开的时候,网络将不考虑当前输入xt。

遗忘门ft: ft控制上一时刻记忆单元ct-1的信息融入记忆单元ct。在理解一句话时,当前词xt可能继续延续上文的意思继续描述,也可能从当前词xt开始描述新的内容,与上文无关。和输入门it相反, ft不对当前词xt的重要性作判断, 而判断的是上一时刻的记忆单元ct-1对计算当前记忆单元ct的重要性。当ft开关打开的时候,网络将不考虑上一时刻的记忆单元ct-1。

输出门ot: 输出门的目的是从记忆单元ct产生隐层单元ht。并不是ct中的全部信息都和隐层单元ht有关,ct可能包含了很多对ht无用的信息,因此, ot的作用就是判断ct中哪些部分是对ht有用的,哪些部分是无用的。

记忆单元ct:ct综合了当前词xt和前一时刻记忆单元ct-1的信息。这和ResNet中的残差逼近思想十分相似,通过从ct-1到ct的”短路连接”, 梯度得已有效地反向传播。 当ft处于闭合状态时, ct的梯度可以直接沿着最下面这条短路线传递到ct-1,不受参数W的影响,这是LSTM能有效地缓解梯度消失现象的关键所在。

GRU


GRU是另一种十分主流的RNN衍生物。RNN和LSTM都是在设计网络结构用于缓解梯度消失问题, 只不过是网络结构有所不同。GRU在数学上的形式化表示如下:

为了理解GRU的设计思想,我们再一次运用“三次简化一张图”的方法来进行分析:

第一次简化: 忽略门控单元z, r的来源。

第二次简化: 考虑一维情况。

第三次简化: 各门控单元0/1输出。这里和LSTM略有不同的地方在于,GRU需要引入一个”单刀双掷开关”。

一张图: 把三次简化的结果用”电路图”表述出来,左输入,右输出:

与LSTM相比,GRU将输入门it和遗忘门ft融合成单一的更新门zt,并且融合了记忆单元ct和隐层单元ht,所以结构上比LSTM更简单一些。

根据这张图,我们可以对GRU的各单元作用进行分析:

重置门rt:rt用于控制前一时刻隐层单元ht-1对当前词xt的影响。如果ht-1对xt不重要,即从当前词xt开始表述了新的意思,与上文无关, 那么rt开关可以打开, 使得ht-1对xt不产生影响。

更新门zt:zt用于决定是否忽略当前词xt。类似于LSTM中的输入门it, zt可以判断当前词xt对整体意思的表达是否重要。当zt开关接通下面的支路时,我们将忽略当前词xt,同时构成了从ht-1到ht的”短路连接”,这梯度得已有效地反向传播。和LSTM相同,这种短路机制有效地缓解了梯度消失现象, 这个机制于highwaynetworks十分相似。

小结


尽管RNN, LSTM,和GRU的网络结构差别很大,但是他们的基本计算单元是一致的,都是对xt和ht-1做一个线性映射加tanh激活函数,见三个图的红色框部分。他们的区别在于如何设计额外的门控机制控制梯度信息传播用以缓解梯度消失现象。LSTM用了3个门,GRU用了2个,那能不能再少呢? MGU (minimal gate unit)尝试对这个问题做出回答, 它只有一个门控单元。

最后留个小练习, 参考LSTM和GRU的例子,你能不能用“三次简化一张图”的方法来分析一下MGU呢?

Leave a Reply

Your email address will not be published. Required fields are marked *