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

核心要点

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

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

提出问题

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

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

解决方法

理论推导

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

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

不过,可以构建一个错误函数的局部模型并分析地预测扰动参数向量的影响。我们用对目标函数 <math xmlns="http://www.w3.org/1998/Math/MathML"> E E </math>E进行泰勒展开。对参数向量的扰动 <math xmlns="http://www.w3.org/1998/Math/MathML"> δ U \delta U </math>δU对目标函数的影响如下式所示。
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> δ 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 ) \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} </math>δE=i∑giδui+21i∑hiiδui2+21i=j∑hijδuiδuj+O(∥δU∥3)

其中有 <math xmlns="http://www.w3.org/1998/Math/MathML"> g i = ∂ E ∂ u i and h i j = ∂ 2 E ∂ u i ∂ u j g_i=\frac{\partial E}{\partial u_i} \quad \text { and } \quad h_{i j}=\frac{\partial^2 E}{\partial u_i \partial u_j} </math>gi=∂ui∂E and hij=∂ui∂uj∂2E, <math xmlns="http://www.w3.org/1998/Math/MathML"> g i g_i </math>gi是 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U对 <math xmlns="http://www.w3.org/1998/Math/MathML"> E E </math>E的梯度, <math xmlns="http://www.w3.org/1998/Math/MathML"> h i j h_{ij} </math>hij是 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U对 <math xmlns="http://www.w3.org/1998/Math/MathML"> E E </math>E的海森矩阵的元素。

有了上面的误差函数,我们接下来的目标就是找到一组参数,使得这个 <math xmlns="http://www.w3.org/1998/Math/MathML"> δ E \delta E </math>δE最小,但由于 <math xmlns="http://www.w3.org/1998/Math/MathML"> H H </math>H太大了,所以这个问题几乎无法解决,所以我们需要对这个函数做出一些近似。

a. <math xmlns="http://www.w3.org/1998/Math/MathML"> Diagonal \text{Diagonal} </math>Diagonal: 我们假设由于删除多个参数导致的E增量等于分别删除每个参数导致的E增量之和,换句话说就是对于参数的删除导致误差是独立的,参数之间不会有相互影响,所以我们可以把交叉项 <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 2 ∑ i ≠ j h i j δ u i δ u j \frac{1}{2} \sum_{i \neq j} h_{i j} \delta u_i \delta u_j </math>21∑i=jhijδuiδuj忽略

b. <math xmlns="http://www.w3.org/1998/Math/MathML"> Extremal \text{Extremal} </math>Extremal: 我们假设网络是已经完美收敛了,此时我们的参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U就是对于 <math xmlns="http://www.w3.org/1998/Math/MathML"> E E </math>E的局部最小值处,换句话说,就是 <math xmlns="http://www.w3.org/1998/Math/MathML"> U U </math>U对 <math xmlns="http://www.w3.org/1998/Math/MathML"> E E </math>E的梯度 <math xmlns="http://www.w3.org/1998/Math/MathML"> g i g_i </math>gi等于$$$$,所以我们可以把第一项 <math xmlns="http://www.w3.org/1998/Math/MathML"> ∑ i g i δ u i \sum_i g_i \delta u_i </math>∑igiδui忽略。

c. <math xmlns="http://www.w3.org/1998/Math/MathML"> Quadratic \text{Quadratic} </math>Quadratic: 我们假设这个 <math xmlns="http://www.w3.org/1998/Math/MathML"> δ E \delta E </math>δE就是一个二次的函数,更高次的项我们不考虑,所以我们可以把最后一项 <math xmlns="http://www.w3.org/1998/Math/MathML"> O ( ∥ δ U ∥ 3 ) O\left(\|\delta U\|^3\right) </math>O(∥δU∥3)忽略。

最终,经过一系列的优化,我们可以得到如下所示对于损失的一个近似表示
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> δ E = 1 2 ∑ i h i i δ u i 2 \begin{equation} \delta E=\frac{1}{2} \sum_i h_{i i} \delta u_i^2 \end{equation} </math>δE=21i∑hiiδui2

具体实现

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

对于OBD来说,具体流程如下图所示:其中saliency有 <math xmlns="http://www.w3.org/1998/Math/MathML"> s k = h k k u k 2 / s_k=h_{k k} u_k^2 / </math>sk=hkkuk2/

再提出问题

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

再提出方案

Introducing OBS(Optimal Brain Surgeon).

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

和上面一样,我们考虑训练到局部最小误差的网络。相对于权重扰动 <math xmlns="http://www.w3.org/1998/Math/MathML"> δ w \delta \mathbf{w} </math>δw的的Loss函数的泰勒展开为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> δ E = ( ∂ E ∂ w ) T ⋅ δ w ⏟ ≈ 0 + 1 2 δ w T ⋅ 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{O\left(\|\delta \mathbf{w}\|^3\right)}{\approx 0} \end{equation} </math>δE=≈0 (∂w∂E)T⋅δw+21δwT⋅H⋅δw+≈0 O(∥δw∥3)

其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> H = ∂ 2 E ∂ w 2 \mathbf{H}=\frac{\partial^2 \mathrm{E}}{\partial \mathbf{w}^2} </math>H=∂w2∂2E是Loss对参数的海森矩阵。和上面一样,我们忽略第一项和第三项,那么我们对权重 <math xmlns="http://www.w3.org/1998/Math/MathML"> w q \mathrm{w_q} </math>wq进行删除的操作可以表示为(其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> e q \mathbf{e}_q </math>eq是权重空间 <math xmlns="http://www.w3.org/1998/Math/MathML"> e q \mathbf{e}_q </math>eq中相对于 <math xmlns="http://www.w3.org/1998/Math/MathML"> w q \mathrm{w_q} </math>wq的单位向量
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> δ w q + w q = 0 or e q T ⋅ δ w + w q = 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} </math>δwq+wq=0 or eqT⋅δw+wq=0

这样,我们的目标就是解下面这个最优化问题:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> Min ⁡ q { Min ⁡ δ w { 1 2 δ w T ⋅ H ⋅ δ w } such that e q T ⋅ δ w + w q = 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} </math>Minq{Minδw{21δwT⋅H⋅δw} such that eqT⋅δw+wq=0}

接下来我们把他转换为拉格朗日乘数法有如下表示:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> L = 1 2 δ w T ⋅ H ⋅ δ w + λ ( e q T ⋅ δ w + w q ) \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} </math>L=21δwT⋅H⋅δw+λ(eqT⋅δw+wq)

不难解出:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> δ w = − w q [ H − 1 ] q q H − 1 ⋅ e q and L = 1 2 w q 2 [ H − 1 ] q q \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} </math>δw=−[H−1]qqwqH−1⋅eq and L=21[H−1]qqwq2

这样的话我们就可以得到一个 <math xmlns="http://www.w3.org/1998/Math/MathML"> δ w \delta \mathbf{w} </math>δw使得我们剪切了 <math xmlns="http://www.w3.org/1998/Math/MathML"> w q \mathrm{w_q} </math>wq的同时调整了其他的权重使得Loss变动最小。

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

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

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

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

海森矩阵计算

现在我们已经知道了如何对神经网络进行修剪优化,但海森矩阵具体怎么算呢。接下来,我们参考 <math xmlns="http://www.w3.org/1998/Math/MathML"> PRML \text{PRML} </math>PRML 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> OBS \text{OBS} </math>OBS 来对如何计算对角海森矩阵进行讲述。

假设我们有如图所示的一个网络,那么这个网络有两部分参数,input到hidden的参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> u j i \mathbf{u}_{ji} </math>uji、hidden到output的参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> v j \mathbf{v}_j </math>vj,接下来我们以MSE为例解释如何计算这些参数对Loss的海森矩阵。

首先,我们易知MSE的表达式如下所示:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> E = 1 2 P ∑ k = 1 P ( 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} </math>E=2P1k=1∑P(t[k]−o[k])2

则Loss对这些参数的二阶导数有如下表示:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∂ 2 E ∂ v j ∂ v j ′ = 1 P ∑ k = 1 P { f ′ ( net [ k ] ) 2 − ( t [ k ] − o [ k ] ) f ′ ′ ( n e t [ k ] ) } o j [ k ] o j ′ [ 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} </math>∂vj∂vj′∂2E=P1k=1∑P{f′( net [k])2−(t[k]−o[k])f′′(net[k])}oj[k]oj′[k]
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∂ 2 E ∂ v j ∂ u j ′ i ′ = 1 P ∑ k = 1 P { { { f ′ ( net [ k ] ) 2 − ( t [ k ] − o [ k ] ) f ′ ′ ( net [ k ] ) } v j ′ f ′ ( net j ′ [ k ] ) o i ′ [ k ] o j [ k ] } − ( t [ k ] − o [ k ] ) f ′ ( n e t [ k ] ) f ′ ( n e t j ′ [ k ] ) δ j j ′ o i ′ [ 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} </math>∂vj∂uj′i′∂2E=P1k=1∑P{{{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]}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∂ 2 E ∂ u j i ∂ u j ′ i ′ = 1 P ∑ k = 1 P { [ f ′ ( n e t [ k ] ) 2 − ( t [ k ] − o [ k ] ) f ′ ′ ( net ⁡ [ k ] ) } v j v j ′ f ′ ( net ⁡ j [ k ] ) f ′ ( net ⁡ j ′ [ k ] ) o i [ k ] o i ′ [ k ] − ( t [ k ] − o [ k ] ) f ′ ( net [ k ] ) v j f ′ ′ ( net j [ k ] ) δ j j ′ o i [ k ] o i ′ [ 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} </math>∂uji∂uj′i′∂2E=P1k=1∑P{[f′(net[k])2−(t[k]−o[k])f′′(net[k])}vjvj′f′(netj[k])f′(netj′[k])oi[k]oi′[k]−(t[k]−o[k])f′( net [k])vjf′′( net j[k])δjj′oi[k]oi′[k]}

由于我们进行剪切的网络已经是一个经过训练达到了局部最小的网络,即 <math xmlns="http://www.w3.org/1998/Math/MathML"> t [ k ] − o [ k ] ≈ 0 \mathrm{t}^{[k]}-\mathrm{o}^{[k]} \approx 0 </math>t[k]−o[k]≈0,上式可以简化为:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∂ 2 E ∂ v j ∂ v j ′ = 1 P ∑ k = 1 P f ′ ( n e t [ k ] ) 2 o j [ k ] o j ′ [ 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} </math>∂vj∂vj′∂2E=P1k=1∑Pf′(net[k])2oj[k]oj′[k]
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∂ 2 E ∂ v j ∂ u j ′ i ′ = 1 P ∑ k = 1 P f ′ ( net [ k ] ) 2 v j ′ f ′ ( net ⁡ j ′ [ k ] ) o i ′ [ k ] o j [ 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} </math>∂vj∂uj′i′∂2E=P1k=1∑Pf′( net [k])2vj′f′(netj′[k])oi′[k]oj[k]
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ∂ 2 E ∂ u j i ∂ u j ′ i ′ = 1 P ∑ k = 1 P f ′ ( net [ k ] ) 2 v j v j ′ f ′ ( net ⁡ j [ k ] ) f ′ ( net ⁡ j ′ [ k ] ) o i [ k ] o i ′ [ 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} </math>∂uji∂uj′i′∂2E=P1k=1∑Pf′( net [k])2vjvj′f′(netj[k])f′(netj′[k])oi[k]oi′[k]

这样的话,我们就可以通过一阶导向量的外积对海森矩阵进行近似:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> [ X v [ k ] ] T = ( f ′ ( net [ k ] ) o j = 1 [ k ] , ... , f ′ ( net [ k ] ) o n j [ 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} </math>[Xv[k]]T=(f′( net [k])oj=1[k],...,f′( net [k])onj[k])
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> [ X u [ k ] ] T = ( f ′ ( n e t [ k ] ) f ′ ( net ⁡ 1 [ k ] ) v 1 [ k ] o i = 1 [ k ] , ... , f ′ ( net [ k ] ) f ′ ( net ⁡ 1 [ k ] ) v 1 [ k ] o n i [ k ] , ... , f ′ ( net [ k ] ) f ′ ( net ⁡ n j [ k ] ) v n j [ k ] o 1 [ k ] , ... , f ′ ( net [ k ] ) f ′ ( net ⁡ n j [ k ] ) v n j [ k ] o n i [ 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} </math>[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])

接下来我们把这两个向量连接起来成为一个维度大小为该层网络参数量的一阶导向量 <math xmlns="http://www.w3.org/1998/Math/MathML"> X [ k ] \mathbf{X}^{[k]} </math>X[k],
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> X [ k ] = ( X V [ k ] X u [ 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} </math>X[k]=(XV[k]Xu[k])

那么我们可以得到海森矩阵的外积近似如下所示:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> H = ∂ 2 E ∂ w 2 = 1 P ∑ k = 1 P X [ 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} </math>H=∂w2∂2E=P1k=1∑PX[k]⋅X[k]T

这样我们就得到了OBD中所需要的海森矩阵的对角矩阵
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> D = [ [ H ] 1 , 1 0 ⋯ 0 0 [ H ] 2 , 2 ⋯ 0 ⋮ ⋮ ⋱ ⋮ 0 0 ⋯ [ 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} </math>D=⎣ ⎡[H]1,10⋮00[H]2,2⋮0⋯⋯⋱⋯00⋮[H]n,n⎦ ⎤

我们可以看到上面对海森矩阵\mathbf{H的表示是一个加和最终结果的形式,具体每一步的计算如下所示:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> H m + 1 = H m + 1 P X [ m + 1 ] ⋅ X [ m + 1 ] T with H 0 = α I and H P = 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} </math>Hm+1=Hm+P1X[m+1]⋅X[m+1]T with H0=αI and HP=H

矩阵和的逆的计算法则如下所示:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> ( A + B ⋅ C ⋅ D ) − 1 = A − 1 − A − 1 ⋅ B ⋅ ( C − 1 + D ⋅ A − 1 ⋅ B ) − 1 ⋅ D ⋅ A − 1 \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} </math>(A+B⋅C⋅D)−1=A−1−A−1⋅B⋅(C−1+D⋅A−1⋅B)−1⋅D⋅A−1

那么我们则有海森矩阵的逆 <math xmlns="http://www.w3.org/1998/Math/MathML"> H − 1 \mathbf{H}^{-1} </math>H−1的计算方式如下所示:
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> H m + 1 − 1 = H m − 1 − H m − 1 ⋅ X [ m + 1 ] ⋅ X [ m + 1 ] T ⋅ H m − 1 P + X [ m + 1 ] T ⋅ H m − 1 ⋅ X [ m + 1 ] T with H 0 − 1 = α − 1 I and H P − 1 = H − 1 \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} </math>Hm+1−1=Hm−1−P+X[m+1]T⋅Hm−1⋅X[m+1]THm−1⋅X[m+1]⋅X[m+1]T⋅Hm−1 with H0−1=α−1I and HP−1=H−1

下面是不考虑bias的MSE,CE的海森矩阵的外积近似,大家有兴趣可以推导一下。
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> H θ = ∇ θ 2 M S E ( θ ) = 2 n ∑ i = 1 n ∇ θ f θ ( x i ) ∇ θ f θ ( x i ) 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} </math>Hθ=∇θ2MSE(θ)=n2i=1∑n∇θfθ(xi)∇θfθ(xi)T
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> H θ = ∇ θ 2 C E ( θ ) = ∑ i = 1 n f θ ( x i ) ( 1 − f θ ( x i ) ) ∇ θ f θ ( x i ) ∇ θ f θ ( x i ) 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} </math>Hθ=∇θ2CE(θ)=i=1∑nfθ(xi)(1−fθ(xi) )∇θfθ(xi)∇θfθ(xi)T

相关推荐
墨绿色的摆渡人2 小时前
用 Python 从零开始创建神经网络(六):优化(Optimization)介绍
人工智能·python·深度学习·神经网络
埃菲尔铁塔_CV算法12 小时前
深度学习神经网络创新点方向
人工智能·深度学习·神经网络
哇咔咔哇咔14 小时前
【科普】简述CNN的各种模型
人工智能·神经网络·cnn
Jurio.21 小时前
【SPIE出版,EI稳定检索】2024年信号处理与神经网络应用国际学术会议(SPNNA 2024,12月13-15日)
图像处理·人工智能·深度学习·神经网络·机器学习·计算机视觉·信号处理
fanxbl9571 天前
LVQ 神经网络的 MATLAB 函数详解
人工智能·神经网络·matlab
新手小白勇闯新世界1 天前
点云论文阅读-1-pointnet++
论文阅读·人工智能·深度学习·神经网络·计算机视觉
千天夜1 天前
激活函数解析:神经网络背后的“驱动力”
人工智能·深度学习·神经网络
清如许.1 天前
DNN云边协同工作汇总(持续更新)
人工智能·神经网络·dnn
Chef_Chen2 天前
从0开始机器学习--Day16--神经网络作业
人工智能·神经网络·机器学习
李歘歘2 天前
深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总
深度学习·神经网络·算法