神经网络剪枝优化方法及理论推导

释放双眼,带上耳机,听听看~!
本文介绍了利用二阶导数信息进行神经网络最小损失剪枝的方法,并提出了引入删除权重补偿概念的解决方案。通过理论推导,我们探讨了删除权重带来的误差定义,以及对目标函数的影响,从而为神经网络的优化提供了新的思路。

核心要点

OBD:引入二阶导数信息对神经网络进行最小损失剪枝。

OBS:引入删除权重补偿概念,使得剪枝损失降到更小。

提出问题

随着神经网络的发展,神经网络在现实世界中解决了越来越多的问题,但随之而来的是模型变的越来越大,结构变得越来越复杂,推理时间变的越来越长,部署起来也越来越不方便,并且随着参数逐渐变多,导致过拟合的风险也越来越大,所以我们就提出了下面这个问题:

如何选择性得删除一些权重来减小网络大小的同时不要引入太多的误差呢?

解决方法

理论推导

为了解决这一问题,我们需要定义什么是删除权重带来的误差呢?

目标函数在机器学习中起着核心作用,因此定义一个参数的显著性是指删除该参数所导致的目标函数的变化。但是通过暂时删除每个参数并重新评估目标函数来从这个定义中评估显著性将是极其繁琐的。

不过,可以构建一个错误函数的局部模型并分析地预测扰动参数向量的影响。我们用对目标函数EE进行泰勒展开。对参数向量的扰动δUdelta U对目标函数的影响如下式所示。

δE=∑igiδui+12∑ihiiδui2+12∑i≠jhijδuiδuj+O(∥δU∥3)begin{equation} 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+Oleft(|delta U|^3right) end{equation}

其中有gi=∂E∂ui and hij=∂2E∂ui∂ujg_i=frac{partial E}{partial u_i} quad text { and } quad h_{i j}=frac{partial^2 E}{partial u_i partial u_j}gig_iUUEE的梯度,hijh_{ij}UUEE的海森矩阵的元素。

有了上面的误差函数,我们接下来的目标就是找到一组参数,使得这个δEdelta E最小,但由于HH太大了,所以这个问题几乎无法解决,所以我们需要对这个函数做出一些近似。

a. Diagonaltext{Diagonal}: 我们假设由于删除多个参数导致的E增量等于分别删除每个参数导致的E增量之和,换句话说就是对于参数的删除导致误差是独立的,参数之间不会有相互影响,所以我们可以把交叉项12∑i≠jhijδuiδujfrac{1}{2} sum_{i neq j} h_{i j} delta u_i delta u_j忽略

b. Extremaltext{Extremal}: 我们假设网络是已经完美收敛了,此时我们的参数UU就是对于EE的局部最小值处,换句话说,就是UUEE的梯度gig_i等于$$$$,所以我们可以把第一项∑igiδuisum_i g_i delta u_i忽略。

c. Quadratictext{Quadratic}: 我们假设这个δEdelta E就是一个二次的函数,更高次的项我们不考虑,所以我们可以把最后一项O(∥δU∥3)Oleft(|delta U|^3right)忽略。

最终,经过一系列的优化,我们可以得到如下所示对于损失的一个近似表示

δE=12∑ihiiδui2begin{equation} delta E=frac{1}{2} sum_i h_{i i} delta u_i^2 end{equation}

具体实现

具体怎么计算海森矩阵我们到下一章进行描述

对于OBD来说,具体流程如下图所示:其中saliency有sk=hkkuk2/s_k=h_{k k} u_k^2 /

神经网络剪枝优化方法及理论推导

再提出问题

我们这种直接把它置零的方法是足够好的吗,有没有更好的缩减误差的方法?

再提出方案

Introducing OBS(Optimal Brain Surgeon).

In addition to cutting out weights, changing the strengths of other weights.

和上面一样,我们考虑训练到局部最小误差的网络。相对于权重扰动δwdelta mathbf{w}的的Loss函数的泰勒展开为:

δE=(∂E∂w)T⋅δw⏟≈0+12δwT⋅H⋅δw+O(∥δw∥3)⏟≈0 begin{equation} delta mathrm{E}=underbrace{left(frac{partial mathrm{E}}{partial mathbf{w}}right)^{mathrm{T}} cdot delta mathbf{w}}_{approx 0}+frac{1}{2} delta mathbf{w}^{mathrm{T}} cdot mathbf{H} cdot delta mathbf{w}+underbrace{Oleft(|delta mathbf{w}|^3right)}_{approx 0} end{equation}

其中H=∂2E∂w2mathbf{H}=frac{partial^2 mathrm{E}}{partial mathbf{w}^2}是Loss对参数的海森矩阵。和上面一样,我们忽略第一项和第三项,那么我们对权重wqmathrm{w_q}进行删除的操作可以表示为(其中eqmathbf{e}_q 是权重空间eqmathbf{e}_q中相对于wqmathrm{w_q} 的单位向量

δwq+wq=0 or eqT⋅δw+wq=0begin{equation} delta mathrm{w}_q+mathrm{w}_q=0 quad text { or } quad mathbf{e}_q^{mathrm{T}} cdot delta mathbf{w}+mathrm{w}_q=0 end{equation}

这样,我们的目标就是解下面这个最优化问题:

Min⁡q{Min⁡δw{12δwT⋅H⋅δw} such that eqT⋅δw+wq=0}begin{equation} operatorname{Min}_qleft{operatorname{Min}_{delta mathbf{w}}left{frac{1}{2} delta mathbf{w}^{mathrm{T}} cdot mathbf{H} cdot delta mathbf{w}right} quad text { such that } mathbf{e}_q^T cdot delta mathbf{w}+mathrm{w}_q=0right} end{equation}

接下来我们把他转换为拉格朗日乘数法有如下表示:

L=12δwT⋅H⋅δw+λ(eqT⋅δw+wq)begin{equation} L=frac{1}{2} delta mathbf{w}^{mathrm{T}} cdot mathbf{H} cdot delta mathbf{w}+lambdaleft(mathbf{e}_q^T cdot delta mathbf{w}+mathrm{w}_qright) end{equation}

不难解出:

δw=−wq[H−1]qqH−1⋅eq and L=12wq2[H−1]qqbegin{equation} delta mathbf{w}=-frac{mathrm{w}_q}{left[mathbf{H}^{-1}right]_{q q}} mathbf{H}^{-1} cdot mathbf{e}_q quad text { and } quad L=frac{1}{2} frac{mathrm{w}_q^2}{left[mathbf{H}^{-1}right]_{q q}} end{equation}

这样的话我们就可以得到一个δwdelta mathbf{w}使得我们剪切了wqmathrm{w_q}的同时调整了其他的权重使得Loss变动最小。

神经网络剪枝优化方法及理论推导

为什么OBS是更好的方法呢?

我们考虑如图所示的例子,来对比OBS、OBD和基于大小的权重剪切方法。

w∗mathrm{w}^* 处的局部最小值开始,基于大小的方法删除错误的 weight2text{weight2} 并且通过再训练,weight1text{weight1}将增加。而与之对比OBD和OBS删除正确的weight1text{weight1},并且OBS更改了 weight2text{weight2} 来达到局部最小值。在这个例子中可能最终误差的大小差异并不明显,但是如果在一个比较大的网络中,使用基于大小的方法删除了错误的权重可能会导致最终误差的明显增加,显然这是不合理的。

并且在实验中表明了海森矩阵并不是只有对角的部分是有用的,其他的部分也是有和对角线部分几乎相同的作用,所以我们的方法并不会只考虑对角海森矩阵,而是通过外积近似的方式计算整个海森矩阵。

神经网络剪枝优化方法及理论推导

海森矩阵计算

现在我们已经知道了如何对神经网络进行修剪优化,但海森矩阵具体怎么算呢。接下来,我们参考 PRMLtext{PRML}OBStext{OBS} 来对如何计算对角海森矩阵进行讲述。

假设我们有如图所示的一个网络,那么这个网络有两部分参数,input到hidden的参数ujimathbf{u}_{ji}、hidden到output的参数vjmathbf{v}_j,接下来我们以MSE为例解释如何计算这些参数对Loss的海森矩阵。

神经网络剪枝优化方法及理论推导

首先,我们易知MSE的表达式如下所示:

E=12P∑k=1P(t[k]−o[k])2begin{equation} E=frac{1}{2 mathrm{P}} sum_{k=1}^{mathrm{P}}left(mathrm{t}^{[k]}-mathrm{o}^{[k]}right)^2 end{equation}

则Loss对这些参数的二阶导数有如下表示:

∂2E∂vj∂vj′=1P∑k=1P{f′( net [k])2−(t[k]−o[k])f′′(net[k])}oj[k]oj′[k]begin{equation} frac{partial^2 E}{partial mathrm{v}_j partial mathrm{v}_{j^{prime}}}=frac{1}{mathrm{P}} sum_{k=1}^{mathrm{P}}left{mathrm{f}^{prime}left(text { net }^{[k]}right)^2-left(mathrm{t}^{[k]}-mathrm{o}^{[k]}right) mathrm{f}^{prime prime}left(mathrm{net}^{[k]}right)right} mathrm{o}_j^{[k]} mathrm{o}_{j^{prime}}^{[k]} end{equation}
∂2E∂vj∂uj′i′=1P∑k=1P{{{f′( net [k])2−(t[k]−o[k])f′′( net [k])}vj′f′( net j′[k])oi′[k]oj[k]}−(t[k]−o[k])f′(net[k])f′(netj′[k])δjj′oi′[k]}begin{equation}

begin{aligned}

frac{partial^2 E}{partial mathrm{v}_j partial mathrm{u}_{j^{prime} i^{prime}}}= & frac{1}{mathrm{P}} sum_{k=1}^{mathrm{P}}left{left{left{mathrm{f}^{prime}left(text { net }^{[k]}right)^2-left(mathrm{t}^{[k]}-mathrm{o}^{[k]}right) mathrm{f}^{prime prime}left(text { net }^{[k]}right)right} mathrm{v}_{j^{prime}} mathrm{f}^{prime}left(text { net }_{j^{prime}}^{[k]}right) mathrm{o}_{i^{prime}}^{[k]} mathrm{o}_j^{[k]}right}-right. \

& left.left(mathrm{t}^{[k]}-mathrm{o}^{[k]}right) mathrm{f}^{prime}left(mathrm{net}^{[k]}right) mathrm{f}^{prime}left(mathrm{net}_{j^{prime}}^{[k]}right) delta_{j j^{prime}} mathrm{o}_{i^{prime}}^{[k]}right}

end{aligned}

end{equation}
∂2E∂uji∂uj′i′=1P∑k=1P{[f′(net[k])2−(t[k]−o[k])f′′(net⁡[k])}vjvj′f′(net⁡j[k])f′(net⁡j′[k])oi[k]oi′[k]−(t[k]−o[k])f′( net [k])vjf′′( net j[k])δjj′oi[k]oi′[k]}begin{equation} begin{aligned} & frac{partial^2 E}{partial mathrm{u}_{j i} partial mathrm{u}_{j^{prime} i^{prime}}}=frac{1}{mathrm{P}} sum_{k=1}^{mathrm{P}}left{left[mathrm{f}^{prime}left(mathrm{net}^{[k]}right)^2-left(mathrm{t}^{[k]}-mathrm{o}^{[k]}right) mathrm{f}^{prime prime}left(operatorname{net}^{[k]}right)right} mathrm{v}_j mathrm{v}_{j^{prime}} mathrm{f}^{prime}left(operatorname{net}_j^{[k]}right) mathrm{f}^{prime}left(operatorname{net}_{j^{prime}}^{[k]}right) mathrm{o}_i^{[k]} mathrm{o}_{i^{prime}}^{[k]}-right. \ & left.left(mathrm{t}^{[k]}-mathrm{o}^{[k]}right) mathrm{f}^{prime}left(text { net }^{[k]}right) mathrm{v}_j mathrm{f}^{prime prime}left(text { net }_{mathrm{j}}^{[k]}right) delta_{j j^{prime}} mathrm{o}_i^{[k]} mathrm{o}_{i^{prime}}^{[k]}right} \ & end{aligned} end{equation}

由于我们进行剪切的网络已经是一个经过训练达到了局部最小的网络,即t[k]−o[k]≈0mathrm{t}^{[k]}-mathrm{o}^{[k]} approx 0,上式可以简化为:

∂2E∂vj∂vj′=1P∑k=1Pf′(net[k])2oj[k]oj′[k]begin{equation} frac{partial^2 E}{partial mathrm{v}_j partial mathrm{v}_{j^{prime}}}=frac{1}{mathrm{P}} sum_{k=1}^{mathrm{P}} mathrm{f}^{prime}left(mathrm{net}^{[k]}right)^2 mathrm{o}_j^{[k]} mathrm{o}_{j^{prime}}^{[k]} end{equation}
∂2E∂vj∂uj′i′=1P∑k=1Pf′( net [k])2vj′f′(net⁡j′[k])oi′[k]oj[k]begin{equation} frac{partial^2 E}{partial mathrm{v}_j partial mathrm{u}_{j^{prime} i^{prime}}}=frac{1}{mathrm{P}} sum_{k=1}^{mathrm{P}} mathrm{f}^{prime}left(text { net }^{[k]}right)^2 mathrm{v}_{j^{prime}} mathrm{f}^{prime}left(operatorname{net}_{j^{prime}}^{[k]}right) mathrm{o}_{i^{prime}}^{[k]} mathrm{o}_j^{[k]} end{equation}
∂2E∂uji∂uj′i′=1P∑k=1Pf′( net [k])2vjvj′f′(net⁡j[k])f′(net⁡j′[k])oi[k]oi′[k]begin{equation} frac{partial^2 E}{partial mathrm{u}_{j i} partial mathrm{u}_{j^{prime} i^{prime}}}=frac{1}{mathrm{P}} sum_{k=1}^{mathrm{P}} mathrm{f}^{prime}left(text { net }^{[k]}right)^2 mathrm{v}_j mathrm{v}_{j^{prime}} mathrm{f}^{prime}left(operatorname{net}_j^{[k]}right) mathrm{f}^{prime}left(operatorname{net}_{j^{prime}}^{[k]}right) mathrm{o}_i^{[k]} mathrm{o}_{i^{prime}}^{[k]} end{equation}

这样的话,我们就可以通过一阶导向量的外积对海森矩阵进行近似:

[Xv[k]]T=(f′( net [k])oj=1[k],…,f′( net [k])onj[k])begin{equation} left[mathbf{X}_{mathrm{v}}^{[k]}right]^{mathrm{T}}=left(mathrm{f}^{prime}left(text { net }^{[k]}right) mathrm{o}_{j=1}^{[k]}, ldots, mathrm{f}^{prime}left(text { net }^{[k]}right) mathrm{o}_{n_j}^{[k]}right) end{equation}
[Xu[k]]T=(f′(net[k])f′(net⁡1[k])v1[k]oi=1[k],…,f′( net [k])f′(net⁡1[k])v1[k]oni[k],…,f′( net [k])f′(net⁡nj[k])vnj[k]o1[k],…,f′( net [k])f′(net⁡nj[k])vnj[k]oni[k])begin{equation} begin{aligned} {left[mathbf{X}_{mathrm{u}}^{[k]}right]^{mathrm{T}}=} & left(mathrm{f}^{prime}left(mathrm{net}^{[k]}right) mathrm{f}^{prime}left(operatorname{net}_1^{[k]}right) mathrm{v}_1^{[k]} mathrm{o}_{i=1}^{[k]}, ldots, mathrm{f}^{prime}left(text { net }^{[k]}right) mathrm{f}^{prime}left(operatorname{net}_1^{[k]}right) mathrm{v}_1^{[k]} mathrm{o}_{n_i}^{[k]}, ldots,right. \ & left.mathrm{f}^{prime}left(text { net }^{[k]}right) mathrm{f}^{prime}left(operatorname{net}_{n_j}^{[k]}right) mathrm{v}_{n_j}^{[k]} mathrm{o}_1^{[k]}, ldots, mathrm{f}^{prime}left(text { net }^{[k]}right) mathrm{f}^{prime}left(operatorname{net}_{n_j}^{[k]}right) mathrm{v}_{n_j}^{[k]} mathrm{o}_{n_i}^{[k]}right) end{aligned} end{equation}

接下来我们把这两个向量连接起来成为一个维度大小为该层网络参数量的一阶导向量X[k]mathbf{X}^{[k]},

X[k]=(XV[k]Xu[k])begin{equation} mathbf{X}^{[k]}=left(begin{array}{c} mathbf{X}_{mathrm{V}}^{[k]} \ mathbf{X}_{mathbf{u}}^{[k]} end{array}right) end{equation}

那么我们可以得到海森矩阵的外积近似如下所示:

H=∂2E∂w2=1P∑k=1PX[k]⋅X[k]Tbegin{equation} mathbf{H}=frac{partial^2 mathrm{E}}{partial mathbf{w}^2}=frac{1}{mathrm{P}} sum_{k=1}^{mathrm{P}} mathbf{X}^{[k]} cdot mathbf{X}^{[k] mathrm{T}} end{equation}

这样我们就得到了OBD中所需要的海森矩阵的对角矩阵

D=[[H]1,10⋯00[H]2,2⋯0⋮⋮⋱⋮00⋯[H]n,n]begin{equation} D=left[begin{array}{cccc} [H]_{1,1} & 0 & cdots & 0 \ 0 & [H]_{2,2} & cdots & 0 \ vdots & vdots & ddots & vdots \ 0 & 0 & cdots & [H]_{n, n} end{array}right] end{equation}

我们可以看到上面对海森矩阵mathbf{H的表示是一个加和最终结果的形式,具体每一步的计算如下所示:

Hm+1=Hm+1PX[m+1]⋅X[m+1]T with H0=αI and HP=Hbegin{equation} mathbf{H}_{mathrm{m}+1}=mathbf{H}_{mathrm{m}}+frac{1}{mathrm{P}} mathbf{X}^{[mathrm{m}+1]} cdot mathbf{X}^{[mathrm{m}+1] mathrm{T}} quad text { with } quad mathbf{H}_0=alpha mathbf{I} text { and } mathbf{H}_{mathrm{P}}=mathbf{H} end{equation}

矩阵和的逆的计算法则如下所示:

(A+B⋅C⋅D)−1=A−1−A−1⋅B⋅(C−1+D⋅A−1⋅B)−1⋅D⋅A−1begin{equation} (mathbf{A}+mathbf{B} cdot mathbf{C} cdot mathbf{D})^{-1}=mathbf{A}^{-1}-mathbf{A}^{-1} cdot mathbf{B} cdotleft(mathbf{C}^{-1}+mathbf{D} cdot mathbf{A}^{-1} cdot mathbf{B}right)^{-1} cdot mathbf{D} cdot mathbf{A}^{-1} end{equation}

那么我们则有海森矩阵的逆H−1mathbf{H}^{-1}的计算方式如下所示:

Hm+1−1=Hm−1−Hm−1⋅X[m+1]⋅X[m+1]T⋅Hm−1P+X[m+1]T⋅Hm−1⋅X[m+1]T with H0−1=α−1I and HP−1=H−1begin{equation} mathbf{H}_{mathrm{m}+1}^{-1}=mathbf{H}_{mathrm{m}}^{-1}-frac{mathbf{H}_{mathrm{m}}^{-1} cdot mathbf{X}^{[mathrm{m}+1]} cdot mathbf{X}^{[mathrm{m}+1] mathrm{T}} cdot mathbf{H}_{mathrm{m}}^{-1}}{mathrm{P}+mathbf{X}^{[mathrm{m}+1] mathrm{T}} cdot mathbf{H}_{mathrm{m}}^{-1} cdot mathbf{X}^{[mathrm{m}+1] mathrm{T}}} quad text { with } quad mathbf{H}_0^{-1}=alpha^{-1} mathbf{I} text { and } mathbf{H}_{mathrm{P}}^{-1}=mathbf{H}^{-1} end{equation}

下面是不考虑bias的MSE,CE的海森矩阵的外积近似,大家有兴趣可以推导一下。

Hθ=∇θ2MSE(θ)=2n∑i=1n∇θfθ(xi)∇θfθ(xi)Tbegin{equation} H_theta=nabla_theta^2 M S E(theta)=frac{2}{n} sum_{i=1}^n nabla_theta f_thetaleft(x_iright) nabla_theta f_thetaleft(x_iright)^T end{equation}
Hθ=∇θ2CE(θ)=∑i=1nfθ(xi)(1−fθ(xi) )∇θfθ(xi)∇θfθ(xi)Tbegin{equation} H_theta=nabla_theta^2 CE(theta)= sum_{i=1}^n f_thetaleft(x_iright)left(1-f_thetaleft(x_iright) right)nabla_theta f_thetaleft(x_iright) nabla_theta f_thetaleft(x_iright)^T end{equation}

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

OpenAI发布GPT类模型对美国劳动力影响报告

2023-11-25 11:14:14

AI教程

AIGC最新动态和热门事件

2023-11-25 11:28:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索