门结构简介

因为梯度消失的问题[Pascanu et al. , 2012],S-RNN很难有效地训练。误差信号(梯度)在反向传播过程中到达序列的后面部分时迅速减少,以至于无法到达先前的输入信号的位置,这导致S-RNN难以捕捉到长距离依赖信息。因此,LSTM[Hochreiter and Schmidhuber, 1997]和GRU[Chp et. , 2014b]等基于门的结构被设计出来,用于解决这一问题。
考虑将RNN视为一个通用的计算工具,其中的状态Si代表一个有限的记忆。每一种R函数的实现都会读入一个输入Xi+1以及当前的记忆Si,对它们进行某种操作,并将结果写入记忆得到新的记忆状态Si+1。从这种方式看来,S-RNN的一个明显的问题在于记忆的获取是不受控制的。在每一步的计算过程中,整个记忆状态都被读入,并且整个记忆状态也被改写。
那么如何提供一种更加受控的记忆读写方式?考虑一个二进制的向量g,这样的一个向量使用hadamard乘积操作,能够作为一个控制n维向量读写的门。考虑一个记忆s、输入x和门g,运算中,“读入”x中被g中为1的值选中的那些入口,并将它们写入新的记忆s’中。然后那些没有被读入的位置通过使用门(1-g)从记忆s中复制到新记忆s’中。
上述的门机制可以作为构建新RNN的基本模块:门向量能够控制记忆状态Si读写。然而,我们仍然缺少了两个重要的(并且是相关的)组件:门不应该是静态的,而应该是由当前的记忆状态和输入共同控制,并且应该从输入状态和记忆中进行学习。这导致了一个问题,因为我们结构中的学习过程需要函数可微(由于误差反向传播算法),而门中使用的二值0-1方式不是可微的。
对于上述问题的一种解决方法就是使用一种软但是可微的门机制代替原来的硬性门机制。为了实现可微的门,我们不在限制g属于0-1,而是允许使用任意实数值,即g属于Rn,这个实数值随后通过一个sigmoid函数。这一操作将数值限定在了(0,1)区间内,并且大多数值都在接近边界的位置。当使用门sigmoid(g’)hadamard乘积x的时候,经过sigmoid(g’)后x中那些数值接近1的下标被允许通过,而接近0的那些下标则被阻挡。门的取值可以通过输入和目前的记忆来决定,并且能够通过使用基于梯度下降的方式来训练一个性能令人满意的网络。
受控的门机制是下面将要定义的LSTM和GRU的结构的基础:在每个时间片上,可微的门机制决定哪一部分记忆会被写入,以及哪一部分会被覆盖(忘记)。

猜你喜欢

转载自blog.csdn.net/Miracle_520/article/details/88168096