Deep learning chapter10(part3)

10.10.2 其他类型的门控RNN

LSTM网络的哪个结构是最必要的?其他成功的网络结构是怎么被设计成能动态地控制时间尺度而且能忘记不同单元的行为? 最近的一个关于门控RNN的工作给出了这个问题的答案,所谓门控RNN就是类似于一般的RNN,不过门控RNN中的单元是门控的循环单元(GRU,gated recurrent units), 与LSTM最大的不同在于GRU只使用一个门控单元同时充当忘记门和更新门的角色,更新规则如下:

\[h_i^{t} = u_i^{t-1}h_i^{t-1} + (1-u_i^{t-1})\sigma(b_i + \sum_jU_{i,j}x_j^{t-1} + \sum_jW_{i,j}r_j^{t-1}h_j^{t-1}) \]

这里\(u\)表示更新门,\(r\)表示 重置门(reset gate),它们的计算方式如下:

\[u_i^t = \sigma(b_i^u + \sum_jU_{i,j}^ux_j^{t} + \sum_jW_{i,j}^uh_j^{t}) \]

\[r_i^t = \sigma(b_i^r + \sum_jU_{i,j}^rx_j^{t} + \sum_jW_{i,j}^rh_j^t) \]

从公式来看,更新门和重置门各自能够ignore 状态向量中的一部分(相当于起到了过滤的作用),更新门就像一个条件泄露整合器,他能线性门控任意维度的数据(这句话翻译得有点不知所云),因此能够选择直接复制上一时刻的状态(在其中一个极端),也能够完全丢弃上一时刻的状态而采用新状态作为当前时刻的状态(在另一个极端)。重置门能控制当前状态的哪一个部分能继续传递到下一状态,引入了一个额外的关于过去时刻的状态与未来时刻状态之间的非线性关系。

关于门控RNN,有很多变种的结构。比如 重置门(或者是忘记门)的输出可以在不同的隐藏单元之间共享。虽然有很多变种,但是还没有发现一些变种的结构能够在一系列不同的任务中明显地击败LSTM和GRU。

10.11 长期依赖的优化

前面的章节已经介绍了当RNN的时间步较长时,容易发生梯度消失和梯度爆炸的问题。

Matrens and Sutskever(2011) 提出一个有趣的想法:二阶导数可能在一阶导数消失的同时消失。二阶优化算法可以大体上被理解为用一阶导数除以二阶导数(在高维情况下,也相当于乘以Hessian 矩阵)。如果二阶导数与一阶导数的缩减速率一致,那么一阶导数与二阶导数的比例会保持相对不变。然而,二阶优化方法也有很多缺点,比如计算代价较高,需要大的batch size,而且容易收敛到鞍点。 Martens and Sutskever(2011)使用二阶方法得到了一个较好的结果。 后来 Sutskever et al.(2013) 发现使用简单的方法如 Nesterov momentum 加上 合适的初始化可以得到相似的结果。应用到LSTM时,这两类方法很大程度上会被SGD取代(甚至没有动量)。这是机器学习中一个延续的主题,设计一个易于优化的模型通常比设计一个强大的优化算法更简单。

10.11.1 截断梯度


如同在 Sec 8.2.4中讨论的那样,强非线性函数可能会有非常大或者非常小的梯度,如图10.17所示,可以看出目标函数关于参数的示意图中有非常大的斜坡。

困难在于,当梯度非常大,一步梯度下降会使参数更新的距离也非常大, 导致参数落到目标函数值较大的区域。梯度告诉我们的是在当前参数周围的无限小的参数空间内,目标函数值下降最快的方向。出了这个无限小的范围,目标函数值可能会增大。所以每次更新的步长必须要足够小,从而能避免函数值上升。

一个简单的解决方案被用了很多年:梯度截断。关于这个想法有很多种实现,一种选项是在参数更新之前,逐元素地截断小批量数据的梯度。另一种方法是在参数更新之前截断梯度\(g\)的二范数\(||g||\)

\[if \quad ||g|| > v \quad then g = \frac{gv}{||g||} \]

这里\(v\)是范数的阈值,截断之后的梯度\(g\)用来更新参数。因为所有参数的梯度被单个缩放因子联合重整化,后一种方法能保证经过处理的梯度方向仍然是正确的梯度方向。但是实验结果表明这两种方法的结果类似。

10.11.2 引导信息流的正则化

这一节需要结合论文理解,待后续理解了再补充。

posted @ 2017-10-09 19:14  Mata  阅读(225)  评论(0编辑  收藏  举报