OBD&OBS:给神经网络做个外科手术

核心要点

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

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

提出问题

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

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

解决方法

理论推导

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

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

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

δE=igiδui+12ihiiδui2+12ijhijδuiδuj+O(δU3)\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+O\left(\|\delta U\|^3\right) \end{equation}

其中有gi=Eui and hij=2Euiujg_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的海森矩阵的元素。

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

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

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

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

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

δE=12ihiiδui2\begin{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 /

image.png

再提出问题

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

再提出方案

Introducing OBS(Optimal Brain Surgeon).

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

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

δE=(Ew)Tδw0+12δwTHδw+O(δw3)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{O\left(\|\delta \mathbf{w}\|^3\right)}_{\approx 0} \end{equation}

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

δwq+wq=0 or eqTδw+wq=0\begin{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}

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

Minq{Minδw{12δwTHδw} such that eqTδw+wq=0}\begin{equation} \operatorname{Min}_q\left\{\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=0\right\} \end{equation}

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

L=12δwTHδw+λ(eqTδw+wq)\begin{equation} L=\frac{1}{2} \delta \mathbf{w}^{\mathrm{T}} \cdot \mathbf{H} \cdot \delta \mathbf{w}+\lambda\left(\mathbf{e}_q^T \cdot \delta \mathbf{w}+\mathrm{w}_q\right) \end{equation}

不难解出:

δw=wq[H1]qqH1eq and L=12wq2[H1]qq\begin{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}

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

image.png

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

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

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

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

image.png

海森矩阵计算

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

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

image.png

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

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

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

2Evjvj=1Pk=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}
2Evjuji=1Pk=1P{{{f( net [k])2(t[k]o[k])f( net [k])}vjf( net j[k])oi[k]oj[k]}(t[k]o[k])f(net[k])f(netj[k])δjjoi[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}

2Eujiuji=1Pk=1P{[f(net[k])2(t[k]o[k])f(net[k])}vjvjf(netj[k])f(netj[k])oi[k]oi[k](t[k]o[k])f( net [k])vjf( net j[k])δjjoi[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]0\mathrm{t}^{[k]}-\mathrm{o}^{[k]} \approx 0,上式可以简化为:

2Evjvj=1Pk=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}
2Evjuji=1Pk=1Pf( net [k])2vjf(netj[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}
2Eujiuji=1Pk=1Pf( net [k])2vjvjf(netj[k])f(netj[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(net1[k])v1[k]oi=1[k],,f( net [k])f(net1[k])v1[k]oni[k],,f( net [k])f(netnj[k])vnj[k]o1[k],,f( net [k])f(netnj[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=2Ew2=1Pk=1PX[k]X[k]T\begin{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,1000[H]2,2000[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=H\begin{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+BCD)1=A1A1B(C1+DA1B)1DA1\begin{equation} (\mathbf{A}+\mathbf{B} \cdot \mathbf{C} \cdot \mathbf{D})^{-1}=\mathbf{A}^{-1}-\mathbf{A}^{-1} \cdot \mathbf{B} \cdot\left(\mathbf{C}^{-1}+\mathbf{D} \cdot \mathbf{A}^{-1} \cdot \mathbf{B}\right)^{-1} \cdot \mathbf{D} \cdot \mathbf{A}^{-1} \end{equation}

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

Hm+11=Hm1Hm1X[m+1]X[m+1]THm1P+X[m+1]THm1X[m+1]T with H01=α1I and HP1=H1\begin{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(θ)=2ni=1nθfθ(xi)θfθ(xi)T\begin{equation} H_\theta=\nabla_\theta^2 M S E(\theta)=\frac{2}{n} \sum_{i=1}^n \nabla_\theta f_\theta\left(x_i\right) \nabla_\theta f_\theta\left(x_i\right)^T \end{equation}
Hθ=θ2CE(θ)=i=1nfθ(xi)(1fθ(xi) )θfθ(xi)θfθ(xi)T\begin{equation} H_\theta=\nabla_\theta^2 CE(\theta)= \sum_{i=1}^n f_\theta\left(x_i\right)\left(1-f_\theta\left(x_i\right) \right)\nabla_\theta f_\theta\left(x_i\right) \nabla_\theta f_\theta\left(x_i\right)^T \end{equation}

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MYgs4JJ3' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片