机器学习中的泰勒展开(基于OBD分析)

在网络剪枝的论文中有时会提及泰勒展开这个操作,那为什么要展开呢?

在网络剪枝方法中,有一个环节是重要度评估。

当前大致分为:①基于幅值;②基于范数;③基于敏感度;④基于损失变化。

泰勒展开是基于敏感度评估的一个环节。

最早的基于敏感度的方法是图灵奖得主Yann Le Cun于1989年提出的《Optimal Brain Damage》方法(简称OBD)

该文章提出了一个假设:有可能从一个合理的网络中删除一半(或更多)的权重,最终得到的网络性能相同或更好。

文章还讨论了网络复杂度与泛化性能之间的关系,指出过多的权重可能导致泛化性能不佳,而过少的权重则可能无法准确表示数据。

OBD中的一个核心步骤就是利用“删除一个参数之后,目标函数的变化”来定义一个参数的贡献度。

我们要如何观察目标函数的变化呢?

最简单最直接的方式就是:对某一个参数添加一个小扰动,计算目标函数扰动前后发生的变化,对网络中的所有参数都要这么计算一遍,才能得到所有参数的贡献度。

如此看来,直接计算每一个参数删除引发的目标函数的变化是很困难的。

OBD提出:通过建立一个误差函数的局部模型,来分析预测扰动参数向量引起的影响。

首先:使用泰勒级数来近似目标函数 E E E,用一个扰动向量 δ U \delta U δU来改变目标函数,变为 δ E \delta E δE,此时的 δ E \delta E δE也称为显著性或敏感度 S i S_i Si

δ E = ∑ i g i δ u i + 1 2 ∑ i h i i δ u i 2 + 1 2 ∑ i ≠ j h i j δ u i δ u j + O ( ∥ δ U ∥ 3 ) \delta E=\sum_{i} g_{i} \delta u_{i}+\frac{1}{2} \sum_{i} h_{i i} \delta u_{i}^{2}+\frac{1}{2} \sum_{i\neq j} h_{i j} \delta u_{i} \delta u_{j}+O\left(\|\delta U\|^{3}\right) δE=igiδui+21ihiiδui2+21i=jhijδuiδuj+O(δU3)

其中, δ u i \delta u_{i} δui δ U \delta U δU的分量, g i g_{i} gi E E E关于 U U U的梯度 G G G的分量, g i = δ E δ u i g_i = \frac{\delta E}{\delta u_i} gi=δuiδE h i j h_{ij} hij为Hessian的元素, h i j = ∂ 2 E ∂ u i ∂ u j h_{i j}=\frac{\partial^{2} E}{\partial u_{i} \partial u_{j}} hij=uiuj2E

现在的目标是,是找到一个参数集合,使得删除掉这个参数集合之后 E E E的变化最小。

上面那个公式有个问题,Hessian矩阵的计算量太大了,对于那个年代来说确实很大。

因此,OBD提出了三种近似方法来简化计算 δ E \delta E δE

对角近似:文章假设非对角元素(即参数之间的相互作用)对总体显著性的影响较小,因此忽略了Hessian矩阵的非对角元素,只考虑对角线元素。这意味着每个权重的影响被假设为相互独立的。

极值近似:文章假设权重删除操作发生在训练收敛后,此时权重向量处于损失函数的局部最小点。在局部最小点,损失函数的一阶导数(梯度)为零,因此可以忽略泰勒展开中的一阶项。

二次近似:文章进一步假设损失函数在权重的当前值附近近似为二次的,从而可以忽略泰勒展开中的高阶项。

此时 δ E \delta E δE的计算则简化为:

S i = δ E = 1 2 ∑ i h i i δ u i 2 S_i = \delta E=\frac{1}{2} \sum_{i} h_{i i} \delta u_{i}^{2} Si=δE=21ihiiδui2

此时就剩 h i i h_{ii} hii的计算了。

根据文章提出的Levenberg-Marquardt(列文伯格-马夸尔特)算法近似计算Hessian矩阵的对角线元素 h i i h_{ii} hii

回到最初的问题,为什么要泰勒展开?

泰勒展开的目的是:利用一系列多项式来近似某个函数。

那为什么要近似某个函数呢?

因为这个函数在原始状态下过于复杂,难以完整地、精确地表示出来。既然表示出来都困难了,更别说计算出来了。

此时,泰勒级数是个很好的数学工具,泰勒级数展开允许我们使用局部信息(即当前参数值附近的导数信息)来近似整个函数。

例如:许多机器学习模型的目标函数是非线性的。泰勒级数的一阶展开(即线性近似)可以将非线性问题在局部线性化,就可以实现我们耳熟能详的基于梯度的反向传播算法。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值