论文笔记_Optimal Brain Damage
本文是根据LeCun的1990年发表的Optimal Brain Damage论文翻译的,有些地方的理解也不是很透彻,如果有不正确的地方,欢迎评论指正!
文章目录
- 摘要
- 1.介绍
- 2.OPTIMAL BRAIN DAMAGE
- 2.1.计算二阶导数
- 2.2算法步骤
- 2.3实验
- 3.总结和展望
摘要
我们已经利用信息理论的思想推导出了一类实用的、近似最优的神经网络尺寸自适应方案。通过从网络中删除不重要的权重,可以有一些改进:更好的泛化能力、需求更少的训练样本、更少的学习或分类时间。本文的基础思想是使用二阶导数来对网络复杂性和测试误差之间做一个平衡,实验证明该方法在现实世界应用中是有用的。
1.介绍
使用神经网络来解决现实世界中的问题,要么采用高度结构化的网络,要么采用大型的网络。随着现实世界中的应用越来越复杂,神经网络也变得越来越大或者结构复杂,所以就需要我们设计一个比较不同框架和最小化网络的工具。更重要的是,网络的参数越多,可能会导致过拟合,这对于泛化能力是毁灭性的。本文介绍一个OBD方法通过选择性地删除权重来减小网络的大小。我们将展示OBD方法既是一个自动最小化网络的过程,又是一个达到最佳网络架构的交互工具。
OBD的基本思想是将一个训练好的网络,删除一半甚至一半以上的权重,最终会和原来的网络性能一样好,甚至更好。这个思想可以在需要解决的问题很复杂,并且训练数据有限的 情况下使用。这个思想的理论支撑是:当训练数据有限时,有太多权重的神经网络泛化能力反而不好。另一方面,权重数量太少的神经网络又不能很好的表示数据。最好的泛化能力是在训练误差和网络复杂度平衡的时候。
达到这种平衡的一种技术是最小化由两部分组成(原始的训练误差+网络复杂度的度量)的损失函数。
学术界已经提出了各种各样的复杂度评估方法,包括VC维,description length、还有一个历史悠久的方法是:自由参数中的非零参数数量,这个方法也是本文选用的方法[but see?]。使用自由参数而不会连接的原因是:因为在受限网络中,好几个连接是由一个参数控制表示的。
在很多统计推理的文章中,存在一些先验或者是启发式的信息规定了哪些参数应该被删除;例如,在一组多项式中,应该先删除高次项。但是在神经网络中,应该删除哪些次项的参数就不是那么明显了。
一个简单的策略是删除那些具有较小“贡献”的参数,例如,删除那些对最终预测结果贡献度最小的参数。还有其他条件相同的情况:数值小的参数对对最终预测结果贡献度也小,所以一个合理的做法是,先训练一个网络,然后依次删除那些数量级小的参数,最后再重新训练网络,当然,这个过程可以迭代进行;in the limit it reduces to continuous weight-decay during training(using disproportionately rapid decay of small-magnitude parameters)这一句不理解。(在极限情况下,它在训练过程中减小到持续的权重衰减 (使用小数量级参数不成比例的快速衰减))。事实上,已经有人使用非均衡权重衰减或控制系数来实现最小化网络框架,据报道,泛化性能在研究了一些小问题之后显著提高。剪枝参数这个方法存在两个缺点:第一,在剪枝之后需要微调,避免发生灾难性的结果,第二,微调的过程很慢。而且这个方法包含一种潜在的假设:网络复杂度是通过参数个数或者是单元的个数来测量。
本文中重要的一点就是抛弃这个大小等于贡献度的理念,并提出一个理论修正的贡献度测量方式。本文的技术是使用目标函数对参数求二阶导数表示参数的贡献度。该方法稍后在手写数字识别MNIST数据集上进行测试。
2.OPTIMAL BRAIN DAMAGE
目标函数在神经网络领域扮演着重要的角色;因此使用“删除一个参数之后,目标函数的变化”来定义一个参数的贡献度是很合理的。但是计算每一个参数删除引发的目标函数的变化是很困难的。
幸运的是,我们可以通过建立一个误差函数的局部模型来分析预测扰动参数向量引起的影响。我们用泰勒级数来近似目标函数EEE。参数向量的扰动δU\delta UδU将会通过下面的式子来改变目标函数:δE=∑igiδui+12∑ihiiδui2+12∑i!=jhijδuiδuj+O(∣∣δU∣∣3)(1)\delta E = \sum\limits_{i}g_i \delta u_i + \frac{1}{2}\sum\limits_{i}h_{ii} \delta u_i^2 + \frac{1}{2}\sum\limits_{i !=j}h_{ij} \delta u_i \delta u_j + O(||\delta U||^3)\quad\quad\quad(1)δE=i∑giδui+21i∑hiiδui2+21i!=j∑hijδuiδuj+O(∣∣δU∣∣3)(1)
其中,δui\delta u_iδui是δU\delta UδU的元素,gig_igi是目标函数EEE关于UUU的梯度GGG的元素,hijh_{ij}hij是目标函数EEE关于UUU的梯度海森矩阵HHH的元素。gi=∂E∂uihij=∂2E∂ui∂uj(2)g_i = \frac{\partial E}{\partial u_i} \quad\quad\quad h_ij = \frac{\partial ^2E}{\partial u_i \partial u_j}\quad\quad\quad(2)gi=∂ui∂Ehij=∂ui∂uj∂2E(2)
目标是找到一个参数集合,使得删除掉这个参数集合之后EEE的增加最小。这个问题几乎是无法解决的。其中一个原因是海森矩阵HHH很大(具有2600个参数的神经网络,其海森矩阵有 6.5×1066.5×10^66.5×106项)并且海森矩阵的计算也很复杂。因此我们必须引入一个简化的近似方法。首先,给定一个对角逼近理论:对角逼近理论假定删除多个参数所引起的δE\delta EδE是单独删除每个参数所引起的δE\delta EδE的和;其次,交叉项可以忽略,所以公式(1)中的第三项就可以省略。然后,极值近似理论:极值近似理论假设当训练收敛之后进行参数删除,所以参数向量是EEE的(局部)极小值,则公式(1)的第一项可以省略。更近一步,在局部极小情况下,所有的hiih_{ii}hii都是非负的,所以参数的任何扰动只会导致EEE的增加或不变。最后,二次近似假定目标函数是二次的,所以公式(1)的最后一项也可以被省略。那么,公式(1)就变成了δE=12∑ihiiδui2(3)\delta E =\frac{1}{2}\sum\limits_{i}h_{ii} \delta u_i^2 \quad\quad\quad(3)δE=21i∑hiiδui2(3)
2.1.计算二阶导数
现在我们需要一个高效的方式计算对角线二阶导数hiih_{ii}hii。这个过程在LeCun之前的文章中已经推导过了,和使用一阶导数进行反向传播的过程类似,这里只对过程的大概进行描述,不涉及细节。
我们假设目标函数是一般的均方误差函数,推广到其他的加型误差是很简单的。下面的表达式适用于单个输入模式,之后E和H必须在训练集中取平均值。使用下面的标准公式计算网络的状态:xi=f(ai)andai=∑jwijxj(4)x_i = f(a_i)\qquad and\qquad a_i = \sum\limits_{j}w_{ij}x_j\quad\quad\quad(4)xi=f(ai)andai=j∑wijxj(4)
其中xix_ixi是单元i的状态,aia_iai是单元i的整体输入(加权之后的和),fff是激活函数,wijw_{ij}wij是单元j到单元i的权重。在我们实验的这样一个共享权重的网络中,一个参数uku_kuk可以控制1个或多个的连接:对于所有的(i,j)∈Vk,(i, j) \in V_k,(i,j)∈Vk,wij=ukw_{ij} = u_kwij=uk,其中VkV_kVk是一个索引对的集合。根据链式法则,海森矩阵HHH对角线上的元素就是:hkk=∑(i,j)∈Vk∂2E∂wij2(5)h_{kk} = \sum\limits_{(i, j) \in V_k} \frac {\partial ^2E}{\partial w_{ij}^2}\quad\quad\quad(5)hkk=(i,j)∈Vk∑∂wij2∂2E(5)
公式(5)中的被加数可以使用公式(4)进行计算:∂2E∂wij2=∂2E∂ai2xj2(6)\frac {\partial ^2E}{\partial w_{ij} ^2} = \frac {\partial ^2E}{\partial a_i ^2}x_j ^2\quad\quad\quad(6)∂wij2∂2E=∂ai2∂2Exj2(6)
公式(6)的第一项是逐层反向传播的二阶导数:∂2E∂ai2=f′(ai)2∑lwli2∂2E∂al2+f′′(ai)∂E∂xi(7)\frac {\partial ^2E}{\partial a_i ^2} = f'(a_i)^2 \sum\limits_{l}w_{li}^2 \frac{\partial ^2E}{\partial a_l^2} + f''(a_i) \frac{\partial E}{\partial x_i}\quad\quad\quad(7)∂ai2∂2E=f′(ai)2l∑wli2∂al2∂2E+f′′(ai)∂xi∂E(7)
其中lll是单元iii的所有后继结点。公式(7)与反向传播的式子类似,∂E∂ai=∑l∂E∂al∂al∂ai=∑l∂E∂alwlif′(ai)=f′(ai)∑l∂E∂alwli\frac{\partial E}{\partial a_i} = \sum\limits_{l}\frac{\partial E}{\partial a_l} \frac{\partial a_l}{\partial a_i} = \sum\limits_{l}\frac{\partial E}{\partial a_l}w_{li}f'(a_i) = f'(a_i)\sum\limits_{l}\frac{\partial E}{\partial a_l}w_{li}∂ai∂E=l∑∂al∂E∂ai∂al=l∑∂al∂Ewlif′(ai)=f′(ai)l∑∂al∂Ewli,然后二阶偏导数为:∂2E∂ai2=f′(ai)2∑l∂2E∂al2wli2+f′′(ai)∑l∂E∂alwli\frac {\partial ^2E}{\partial a_i^2}=f'(a_i)^2\sum\limits_{l}\frac{\partial ^2E}{\partial a_l^2}w_{li}^2 + f''(a_i)\sum\limits_{l}\frac{\partial E}{\partial a_l}w_{li}∂ai2∂2E=f′(ai)2l∑∂al2∂2Ewli2+f′′(ai)l∑∂al∂Ewli
我们还需要计算边界情况,即最后一层(输出层)的二阶偏导数,因为目标函数EEE是MSE函数,即E=1n∑i=1n(di−xi)2E = \frac{1}{n} \sum\limits_{i=1}^n(d_i - x_i)^2E=n1i=1∑n(di−xi)2,其中did_idi 是真实值,xix_ixi是输出单元i的输出,则∂E∂ai=∂E∂xi∂xi∂ai=−2(di−xi)f′(ai)\frac{\partial E}{\partial a_i}=\frac{\partial E}{\partial x_i} \frac{\partial x_i}{\partial a_i} =-2(d_i - x_i)f'(a_i)∂ai∂E=∂xi∂E∂ai∂xi=−2(di−xi)f′(ai):∂2E∂ai2=2f′(ai)−2(di−xi)f′′(ai)(8)\frac{\partial ^2E}{\partial a_i^2}=2f'(a_i) - 2(d_i - x_i)f''(a_i)\quad\quad\quad(8)∂ai2∂2E=2f′(ai)−2(di−xi)f′′(ai)(8)
我们可以看到,现在求解海森矩阵的复杂度和求梯度的复杂的是一样的了。而且,根据Levenberg-Marquardt近似算法,公式(7)(8)的中的带有fff的二阶导数项可以省略。
2.2算法步骤
OBD方法的过程如下:
- 选择一个合理的网络架构
- 训练网络直至收敛
- 计算每个参数的二阶偏导数值hkkh_{kk}hkk
- 根据公式sk=hkkuk22s_k =h_{kk}\frac{u_k^2}{2}sk=hkk2uk2计算每个参数的贡献度
- 将参数按照贡献度排序,并删除一些贡献度低的参数
- 迭代至第2步
在上述过程中的删除参数的方法是将其值设为0并固定住,也可以是将贡献度低的参数值进一步降低,或者也可以允许删除了的参数(值为0)重新参与运算,再次更新。
2.3实验
在这一部分给出的实验结果是在手写数字识别中采用BP算法的网络上进行实验。最初的网络是高度约束的、稀疏连接的,由2578个自由参数控制着10510^5105的连接。该网络是使用分段手写的邮政编码进行训练,该数据集包含9300个训练样本和3350个测试样本。更多的细节可以通过LeCun之前的论文了解。
图1(a)展示了当参数数量减少时,目标函数的增加,也展示了使用数值大小作为贡献度的剪枝结果时的损失比使用OBD方法作为贡献度剪枝结果时的损失要大。本文也做随机剪枝,但是结果太差,并没有在图上显示。图1(b)展示了当展示了使用Quadratic-Extremum-Diagonal近似的剪枝结果时的损失比使用OBD方法作为贡献度剪枝结果时的损失要大。从图中可以看出当删除800个参数(大约30%的参数)时,可以获得较好的结果。超出临界点,图中的线开始偏离,,原因有第一,随着删除的元素越来越多,在公式(1)中非对角的元素开始变得越来越重要,但是本文直接忽略了那一项,第二,当删除的元素越来越多,会将稍微大一点的数值也删掉,那么在多项式中,高次幂的项也变得越来越重要,但是本文也忽略了这一项,所以OBD表现开始下降。
图2展示了在retraining前后log MSE函数在训练集和测试集上的表现。当剪枝参数数量达到1500个(大约占60%)时其训练集和测试集上的表现基本上一样。
本文还使用OBD方法作为一个神经网络设计和分析的交互式工具。但是这与通常认为权重删除或多或少是自动生成的观点形成了对比。我们绘制了1000个参数的贡献度图表,出乎意料的是,几个大的参数组可以被删除。于是我们删除了倒数第二层,因此将参数数量减少到之前的两分之一,在训练集上的MSE仅仅增加了十分之一,泛化MSE仅仅增加了50%。手写数字识别的10分类任务准确度在测试集上反而增加了(这说明了MSE并不是该任务最佳的目标函数选择)。OBD也激发了其他的框架改变,可以看LeCun的其他论文。
3.总结和展望
本文使用Optimal Brain Damage方法交互式的每次减少四分之一实际应用中神经网络的参数数量。通过使用OBD自动删除参数,我们得到了两个以上的附加因子:神经网络的速度明显增加,识别精度也轻微的增加。但是本文强调的是在剪枝需要在一个最先进的网络上进行,在一个表现不佳的网络上进行剪枝,达到改善的效果是很容易的。该技术可以改进先进的神经网络具有更加实际的用处。
我们认为这个使用二阶导数的技术仅仅是触及表面的技术。另外,我们也探讨了网络复杂度等同于自由参数的数量这一近似理论,我们使用这个近推导出了一个关于网络内容/复杂度改善的方法,我们使用这个方法去对比在特定任务上不同的网络架构,并与MDL概念进行联系。主要思想是,描述需要少量位元的简单网络比更复杂的网络更有可能正确地进行泛化,因为它可能已经提取了数据的本质并从中删除了冗余。
论文笔记_Optimal Brain Damage相关推荐
- 论文笔记(七)ISOINTENSE INFANT BRAIN SEGMENTATION WITH A HYPER-DENSE CONNECTED CNNs
论文地址:ISOINTENSE INFANT BRAIN SEGMENTATION WITH A HYPER-DENSE CONNECTED CNNs 摘要 提出超密集连接的3D卷积神经网络,该网络使 ...
- 论文笔记:Decoding Brain Representations by Multimodal Learning of Neural Activity and Visual Features
论文笔记:Decoding Brain Representations by Multimodal Learning of Neural Activity and Visual Features(通过 ...
- 经验 | 深度学习中从基础综述、论文笔记到工程经验、训练技巧
点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:本文授权转自知乎作者跑者小越,https://zhuanla ...
- 从基础综述、论文笔记到工程经验、训练技巧:值得一看的目标检测好文推荐...
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文授权转自知乎作者跑者小越,https://zhuanlan.z ...
- 论文笔记:Object Detection in 20 Years: A Surve(目标检测20年研究综述)
文章目录 1.介绍 2.目标检测的20年发展历程 2.1.目标检测路线 2.1.1.里程碑:传统检测器 2.1.2.基于CNN的两阶段检测器 2.1.3.基于CNN的单阶段检测器 2.2.目标检测数据 ...
- [深度学习论文笔记]医学图像分割U型网络大合集
[深度学习论文笔记]医学图像分割U型网络大合集 2015 U-Net: Convolutional Networks for Biomedical Image Segmentation (MICCAI ...
- 论文笔记丨关于稳态视觉诱发电位的脑机接口
论文笔记丨关于稳态视觉诱发电位的脑机接口 论文笔记丨关于稳态视觉诱发电位的脑机接口 Paper1 基于稳态视觉诱发电位的脑机制及脑-机接口研究 系统框图 EEG 数据采集 数据预处理 SSVE ...
- 论文笔记-2019-Object Detection in 20 Years: A Survey
Object Detection in 20 Years: A Survey Zhengxia Zou, Zhenwei Shi, Member, IEEE, Yuhong Guo, and Jiep ...
- 论文笔记 | 谷歌 Soft Prompt Learning ,Prefix-Tuning的 -> soft promt -> p tuning v2
论文笔记 | 谷歌 Soft Prompt Learning ptuning -> Prefix-Tuning -> soft promt -> p tuning v2 " ...
最新文章
- 谈谈服务雪崩、降级与熔断
- CVPR2021:推广到开放世界的在线自适应深度视觉里程计
- HDU 1874 畅通工程续
- 连接moogDB数据库
- Apache SkyWalking 为.NET Core带来开箱即用的分布式追踪和应用性能监控
- Git初学札记(零)————EGIT完成Eclipse到GitHub一条龙
- 【其他技术类文章】如何用mapinfo绘制地图
- Python Pandas General functions(静态方法)
- 清华大学出版社-图书详情-《深度学习:语音识别技术实践》
- xpath 获取表单的值
- VLSI Basic4——antenna effect天线效应
- 成功男友因具备的品质
- HDUOJ 1069 Monkey and Banana
- [6] 支付漏洞( 0 元购 )
- Device Sheets
- 7.(css)使用浮动布局学成网案例
- 9种防止电脑辐射的方法
- docker 安装 onlyoffice
- Acwing4269. 校庆
- scrapy mysql 豆瓣_Scrapy爬取豆瓣图书保存MySQL实验
热门文章
- ESP32( IDF平台)+MAX30102 配合Pyqt上位机实现PPG波形显示与心率计算
- 基于PythonDjango框架的电影推荐系统
- 【大咖云集】2021年IEEE电子信息工程与计算机科学国际会议(IEEE-EIECS 2021)征稿中!...
- 谈谈我对电商交易系统的理解
- 一二线城市知名 IT 互联网公司名单!虎~
- 「 每日一练,快乐水题 」953. 验证外星语词典
- 易飞ERP单据自动审核程序
- 支持爱普生r330的打印服务器,软件让照片打印更专业_爱普生 R330_办公打印评测试用-中关村在线...
- Android实现蓝牙耳机连接
- jq animate动画