当时间步数较大或者时间步数较小的时候,循环神经网络的梯度较容易出现衰减或者爆炸。虽然裁剪梯度能够应对梯度爆炸,网络
可是没法解决梯度衰减的问题。正由于如此,循环神经网络在实际中难以捕捉时间序列中的时间步较大的依赖的关系。门控循环函数
神经网络的提出,真是为了更好地捕捉时间序列中时间步较大的依赖关系。它经过能够学习的门来控制信息的流动。学习
门控循环单元中的重置门和更新门的输入均为当前时间步输入 Xt 与上一时间步的隐藏状态 Ht-1,输出由激活函数sigmoid函数设计
的全链接层计算获得。blog
假设隐藏单元的个数为 h ,给定时间步 t 的小批量输入,(样本数量为 n ,输入个数为 d )和上一时间步的隐藏状态
,io
重置门和更新门的计算以下:神经网络
由于sigmiod函数能够将元素的值变换到0和1之间,所以重置门和更新门中的每一个元素的值域都是【0,1】循环
门控循环单元将计算候选隐藏状态来辅助稍后的隐藏状态的计算。咱们将当前时间步的重置门的输出与上一时间步的隐藏状态im
作按元素乘法(符号为 )。若是重置门中的元素值接近 0 ,则意味着重置对应隐藏状态元素为 0 ,即丢弃上一时间步的隐藏状态。d3
若是元素值接近1,那么表示保留上一时步的隐藏状态。而后,将按元素乘法的结果与当前时间步的输入链接,在经过激活函数tanh的
全链接层计算出候选隐藏状态,其全部元素的值域都为【-1,1】
具体的来讲,时间步 t 的候选状态的计算为:
从这个公式能够看出,重置门控制了上一时间步的隐藏状态如何流入当前时间步的候选隐藏状态。而上一时间不的隐藏状态
可能包含了时间序列截止至上一时间步的所有历史信息。所以,重置门能够用来丢弃与预测无关的历史信息。
最后时间步 t 的隐藏状态的计算使用当前时间步的更新门Zt来对上一时间步的隐藏状态 Ht-1 和当前时间步的候选隐藏
状态 作组合:
值得注意的是,更新门能够控制隐藏状态应该如何被包含当前时间步信息的候选隐藏状态所更新,假设更新门在时间步 t‘ 到 t 之间一直近似 1
那么,在时间步 t‘ 到 t 之间的输入信息几乎没有流入时间步 t 的隐藏状态 Ht 。实际上,这能够看做较早时刻的隐藏状态 一直经过时间
并传递至当前时间步 t 。这个设计能够应对循环神经网络中的梯度衰减问题,并更好的捕捉时间序列中时间步距离较大的依赖关系。
一、重置门有助于捕捉时间序列里短时间的依赖关系;
二、更新门有助于捕捉时间序列里长期的依赖关系。