一个还可以的译文链接:论文笔记_Optimal Brain Damage_maqian5的博客-CSDN博客
本文的思想是使用二阶导数来对网络复杂性和测试误差之间做一个平衡
1、介绍
本文介绍一个OBD方法通过选择性地删除权重来减小网络的大小。我们将展示OBD方法既是一个自动最小化网络的过程,又是一个达到最佳网络架构的交互工具。
OBD的基本思想是将一个训练好的网络,删除一半甚至一半以上的权重,最终会和原来的网络性能一样好,甚至更好。这个思想可以在需要解决的问题很复杂,并且训练数据有限的情况下使用。这个思想的理论支撑是:当训练数据有限时,有太多权重的神经网络泛化能力反而不好。另一方面,权重数量太少的神经网络又不能很好的表示数据。最好的泛化能力是在训练误差和网络复杂度平衡的时候。
达到这种平衡的一种技术是最小化由两部分组成(原始的训练误差+网络复杂度的度量)的损失函数
学术界已经提出了各种各样的复杂度评估方法,包括VC维,description length、还有一个历史悠久的方法是:自由参数中的非零参数数量,这个方法也是本文选用的方法。使用自由参数而不是连接,因为在受约束的网络中,几个连接可以由单个参数控制。(Free parameters are used rather than connections,since in constrained networks ,several connections can bu controlled by a single parameter)
一个简单的策略是删除那些具有较小“贡献”的参数,例如,删除那些对最终预测结果贡献度最小的参数。还有其他条件相同的情况:数值小的参数对对最终预测结果贡献度也小,所以一个合理的做法是,先训练一个网络,然后依次删除那些数量级小的参数,最后再重新训练网络,当然,这个过程可以迭代进行。在受限的情况下(in the limit),它减少训练过程中持续的权重衰减(使用小幅度参数的不成比例的快速衰减)。事实上,一些网络最小化方案已经实现了使用非比例权重衰减。据报道,广义性能大大增加了所检查的一些小问题的信号(Generalization performance increase significantly on the somewhat small problems examined)这些技术的两个缺点是:它们需要调整修剪的条件,以避免灾难性的缺陷,而学习过程也大大减慢。这些方法包括一个隐式假设(implicit hypothesis),即网络复杂度的适当度量(the appropriate measure of network complexity)是网络中参数的数量(或者有时是单位数)
本文的主要观点之一是超越了“大小等于显著性(magnitude equals saliency)”的近似,并提出了一个理论上正确的显著性的度量。我们的技术使用目标函数(objective function)对参数的二阶导数来计算显著性(saliencies)。该方法通过反向传播训练的手写数字识别网络进行了验证
2、optimal brain damage(最佳裁剪)
目标函数(objective function)在此过程中起着核心作用。因此,将一个参数的显著性(saliency)称为删除该参数所引起的目标函数的变化是非常合理的。直接利用这种定义评估显著性将是非常费力的,即临时删除每一个参数并重新估算目标函数。
幸运的是,我们可以通过建立一个误差函数的局部模型来分析预测.扰动.参数向量(perturbing the parameter vector)引起的影响。我们用泰勒级数来近似目标函数E。参数向量的扰动δU将通过下面的式子来改变目标参数:
目标是找到一个参数集合,使得删除掉这个参数集合之后E的增加最小。这个问题几乎是无法解决的。其中一个原因是汉森矩阵H很大(具有2600个参数的神经网络,其海森矩阵有项)并且海森矩阵的计算也很复杂。因此我们必须引入一个简化的近似方法。首先,给定一个对角逼近理论:对角逼近理论嘉定删除多个参数所引起的
是单独删除每个参数所引起的
的和;其次,交叉项可以省略,所以公式(1)中的第三项就可以省略。然后,极值近似理论:极值近似理论假设当训练收敛之后进行参数删除,所以参数向量是E的(局部)极小值,则公式(1)的第一项可以省略。更进一步,在局部极小情况下,所有的
都是非负的,所以参数的任何扰动只会导致E的增加或不变。最后,二次近似嘉定目标函数是二次的,所以公式(1)的最后一项也可以省略。那么,公式(1)就变成了
2.1.计算二阶导数
现在我们需要一个高效的方式计算对角线二阶导数。这个过程在LeCun之前的文章中已经推导过了,和使用一阶导数进行反向传播的过程类似,这里只对过程的大概进行描述,不涉及细节。
我们假设目标函数是一般的均方误差函数,推广到其他的加型误差是很简单的。下面的表达式适用于单个输入模式,
2.2算法步骤
1.选择一个合理的网络架构
2.训练网络直到收敛
3.计算每个参数的二阶偏导数值
4.根据公式计算每个参数的贡献度
5.将参数按照贡献度排序,并删除一些贡献度低的参数
6.迭代至第二步
在上述过程中删除参数的方法是将其值设为0并固定住,也可以是将贡献度低的参数值进一步降低,或者也可以允许删除了的参数(值为0)重新参与运算,再次更新。
说实话这里图二的,retrain没看明白,都retrain了为啥还要给MSE和Parameters的函数。
本文使用Optimal Brain Damage方法交互式的每次减少四分之一实际应用中神经网络的参数数量。通过使用OBD自动删除参数,我们得到了两个以上的附加因子:神经网络的速度明显增加,识别精度也轻微的增加。但是本文强调的是在剪枝需要在一个最先进的网络上进行,在一个表现不佳的网络上进行剪枝,达到改善的效果是很容易的。该技术可以改进先进的神经网络具有更加实际的用处。
我们认为这个使用二阶导数的技术仅仅是触及表面的技术。另外,我们也探讨了网络复杂度等同于自由参数的数量这一近似理论,我们使用这个近推导出了一个关于网络内容/复杂度改善的方法,我们使用这个方法去对比在特定任务上不同的网络架构,并与MDL概念进行联系。主要思想是,描述需要少量位元的简单网络比更复杂的网络更有可能正确地进行泛化,因为它可能已经提取了数据的本质并从中删除了冗余。