1 摘要
通过从网络中删除不重要的权重,可以有更好的泛化能力、需求更少的训练样本、更少的学习或分类时间。本文的基础思想是使用二阶导数将一个训练好的网络,删除一半甚至一半以上的权重,最终会和原来的网络性能一样好,甚至更好。最好的泛化能力是在训练误差和网络复杂度平衡的时候。
2 介绍
达到这种平衡的一种技术是最小化由两部分组成(原始的训练误差+网络复杂度的度量)的损失函数。
复杂度评估方法包括VC维度,描述长度、还有一个历史悠久的方法是:自由参数中的非零参数数量,这个方法也是本文选用的方法。
在很多统计推理的文章中,存在一些先验或者是启发式的信息规定了哪些参数应该被删除;例如,在一组多项式中,应该先删除高次项。但是在神经网络中,应该删除哪些次项的参数就不是那么明显了。
本文的技术是使用目标函数对参数求二阶导数表示参数的贡献度。而不是直观上用数值大小代替贡献度(即数值小的参数对对最终预测结果贡献度也小)
3 OBD
目标函数在神经网络领域扮演着重要的角色;因此使用“删除一个参数之后,目标函数的变化”来定义一个参数的贡献度是很合理的。但是计算每一个参数删除引发的目标函数的变化是很困难的。
幸运的是,我们可以通过建立一个误差函数的局部模型,来分析预测扰动参数向量引起的影响。我们用泰勒级数来近似目标函数e。
数向量的扰动
δ
U
\delta U
δU 将会通过下面的式子来改变目标函数
其中,
δ
u
i
δ u i
δui 是
δ
U
\delta U
δU的分量,
g
i
g_i
gi 是目标函数E关于U的梯度G 的分量,
h
i
j
h_{ij}
hij是海森矩阵H(E)梯度关于U的分量。
目标是找到一个参数集合,使得删除掉这个参数集合之后E的增加最小。
这个问题几乎是无法解决的。其中一个原因是海森矩阵H 很大(具有2600个参数的神经网络,其海森矩阵有6.5×10^6 项)并且海森矩阵的计算也很复杂。
因此我们必须引入一个简化的近似方法。首先,给定一个对角逼近理论、极值近似理论,在局部极小情况下,二次近似假定目标函数是二次的,可以近似为
3.1 计算二阶导数 h i i h_{ii} hii
根据Levenberg-Marquardt近似算法,公式的中的带有f ''的二阶导数项可以省略。
3.2 算法步骤
1 选择一个合理的网络架构
2 训练网络直至收敛
3 计算每个参数的二阶偏导数值
h
k
k
h_{kk}
hkk
4 计算每个参数的贡献度
5 将参数按照贡献度排序,并删除一些贡献度低的参数
6 迭代至第2步
在上述过程中的删除参数的方法是将其值设为0并固定住,也可以是将贡献度低的参数值进一步降低,或者也可以允许删除了的参数(值为0)重新参与运算,再次更新。