ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

PReLu

2022-02-04 17:33:29  阅读:175  来源: 互联网

标签:partial 卷积 Delta Var frac hat PReLu


1. 摘要

在\(ReLu\)的基础上作者提出了\(PReLu\),在几乎没有增加额外参数的前提下既可以提升模型的拟合能力,又能减小过拟合风险。
针对的\(ReLu/PReLu\)矫正非线性,作者设计了一个鲁棒的的参数初始化方法。

2. 介绍

在过去几年,随着更强大网络模型的构建和有效防止过拟合策略的设计,我们在视觉识别任务上取得了长足的进步。一方面,由于网络复杂性的增加(比如增加深度、扩大宽度)、小步长的使用、新的激活函数和更成熟的网络层设计,神经网络变得更加能够拟合训练数据。另一方面,有效的正则化技术、数据增广和大规模的数据让网络获得了更好的泛化能力。

其中,激活函数\(ReLu\)是其中一个非常关键的因素,本文在此基础上做了两点主要改进。首先,我们提出了一个新的激活函数\(PReLu\)(Parametric Rectified Linear Unit),该激活函数可以自适应地学习矫正线性单元的参数,并且能够在增加可忽略的额外计算成本下提高准确率。其次,我们研究了模型训练的难度,得出了一种理论上合理的初始化方法,有助于深层网络模型的收敛。

2.1 定义

PReLU 的计算方式如下所示:

\[f(y_i)= \begin{cases} y_i, & \text{if }y_i \gt0 \\ a_iy_i, & \text{if }y_i \le0 \end{cases} \]

其中,\(y_i\)是非线性激活函数\(f\)在第\(i\)个通道的输入,\(a_i\)负责控制负半轴的斜率。在这里,我们允许不同通道的激活函数不一样。当\(a_i=0\)时,就\(PReLu\)变成了\(ReLu\),而且\(a_i\)是一个可以学习的参数。

上面的计算又可以表示为:

\[f(y_i)=max(0,y_i)+a_imin(0,y_i) \]

图像如下:

2.2 优化

反向传播阶段,某一层中,loss 对 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rnS7flup-1643965484109)(https://www.zhihu.com/equation?tex=a_i)] 的梯度为:

\[\frac{\partial \xi}{\partial a_i}=\sum \limits_{y_i}\frac{\partial \xi}{\partial f(y_i)}\frac{\partial f(y_i)}{\partial a_i} \]

其中, \(\xi\) 为目标函数, \(\frac{\partial \xi}{\partial f(y_i)}\)为后续层传回的梯度,而:

\[\frac{\partial f(y_i)}{\partial a_i}= \begin{cases} y_i, & \text{if }y_i \gt0 \\ a_iy_i, & \text{if }y_i \le0 \end{cases} \]

其中, \(\sum \limits_{y_i}\) 是在当前层的第 \(i\) 个通道的特征图中,所有像素点上进行求和的。

对于channal-shared的变体来说,\(a\)的梯度为:

\[\frac{\partial \xi}{\partial a}=\sum \limits_{i}\sum \limits_{y_i}\frac{\partial \xi}{\partial f(y_i)}\frac{\partial f(y_i)}{\partial a} \]

\(\sum \limits_{i}\) 代表的是各个通道梯度相加。

在更新参数 \(a_i\) 时,我们使用动量的方法:

\[\Delta a_i=\mu \Delta a_i+\epsilon \frac{\partial \xi}{\partial a_i} \]

其中, \(\mu\) 为动量系数, \(\epsilon\)为学习速率。我们并未使用权值衰减(L2 正则),因为其将使得 \(a_i\) 趋于 0

作者设计了一个简单的网络来验证\(PReLu\)的有效性,学习到的系数如下表所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yezHDkGU-1643965484110)(C:\Users\Liujiawang\AppData\Roaming\Typora\typora-user-images\image-20220204151856677.png)]

这其中,有两个有意思的现象。一,第一个卷积层的系数远远比 0 要大(0.681, 0.596),因为这一层的卷积核大部分是类 Gabor 过滤器,比如说边缘、纹理检测器,学习到的结果表明卷积核的正负响应都被接受。这在卷积核数量有限的情况下,可以被认为是一个更加经济地利用低层次信息的方式。二,对于通道独立的激活函数,较深的卷积层通常具有较小的系数。 这意味着激活函数在深度增加时逐渐变得“更加非线性”。 换句话说,学习模型倾向于在较早阶段保留更多信息,并在更深层次阶段变得更具辨别力。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tlGWGIcQ-1643965484110)(C:\Users\Liujiawang\AppData\Roaming\Typora\typora-user-images\image-20220204152028699.png)]

针对通道共享的版本,\(PReLu\)仅仅引入了 13 个额外的参数,却取得了相对于基线情况 1.1% 的提升,这也表明了自适应学习激活函数形状的重要性。

2.3 卷积核权重初始化

与传统的s型激活网络相比,整流器网络更容易训练。但是一个糟糕的初始化仍然会阻碍一个高度非线性的系统的学习。在本小节中,我们提出了一种鲁棒的初始化方法,它消除了训练极深整流网络的障碍。

2.3.1 前向传播情况

对于卷积层,每个卷积窗口的响应为:

\[y_l=\pmb W_lx_l+b_l \]

其中,输入通道数为 \(c\) ,卷积核尺寸为 \(k\times k\) ,因此每个卷积核的参数数量为 \(n=k^2c\),输出通道数为 \(d\) , \(y_l\) 表示第 \(l\)个输出特征图,\(\pmb W_l\)为一个\(1\times n\)的向量,\(y_l\)为\(\pmb W_l\)和\(x_l\)的点积;我们用\(l\)来标识每一层,则有\(x_l=f(y_{l-1})\),\(f\)是激活函数,且有\(c_l=d_{l-1}\)。若忽略 b,则有:

\[Var([y_i])=\sum \limits_{i=1}^{k^2c}Var[w_ix_i] \]

Theorm:

\[若各个X相互独立,\\ Var[X_1+X_2+...+X_n]=Var[X_1]+Var[X_2]+...+Var[X_n] \]

我们假设参数 \(\pmb W_l\) 内的内各元素相互独立,且服从相同分布。 \(x_l\) 亦是如此。 \(\pmb W_l\)和 \(\pmb x_l\) 之间相互独立。因此有:

\[Var[y_i]=n_lVar[w_lx_l] \]

其中, \(y_l,x_l,w_l\) 分别表示 \(\pmb y_l,\pmb W_l,\pmb x_l\) 内的每个元素的随机变量。我们使得 \(w_l\) 均值为 0。因此:

\[\begin{aligned} Var[y_l]&=n_l(E([(w_lx_l)^2])-E[w_lx_l]^2) \\ &=n_l(E([w_l^2]E[x_l]^2-E[w_l]^2E[x_l]^2) \\ &=n_l(E([w_l^2]E[x_l]^2) \\ &=n_l((E[w_l^2]-E[w_l]^2)E[x_l^2]) \end{aligned} \]

所以有:

\[Var[y_l]=n_lVar[w_l]E[x_l^2] \]

其中, \(E[x_l^2]\ne Var[x_l]\) ,除非 \(x_l\) 均值为 0。对于 ReLU 激活函数, \(x_l=max(0,y_{l-1})\),因此其均值不为 0。

如果让 \(w_{l-1}\) 在 0 附近对称分布,且 \(w_{l-1}\) ,那么 \(y_{l-1}\) 均值为 0,且在 0 附近对称分布(\(E(XY)=E(X)E(Y)\))。

在使用 ReLU 时,由于负向值为 0,因此由\(x_l=f(y_{l-1})\)得: \(E[x_l^2]=\frac{1}{2}E[0]+\frac{1}{2}E[y_{l-1}^2]=\frac{1}{2}Var[y_{l-1}]\) 。结合上式,可得:

\[Var[y_l]=\frac{1}{2}Var[w_l]Var[y_{l-1}] \]

则从第一层传递到第 L 层,有:

\[Var[y_L]=Var[y_1](\prod \limits_{l=2}^L \frac{1}{2}n_lVar[w_l]) \tag{9} \]

其乘积是初始化设计的关键。一个合适的初始化方法,应该避免以指数形式改变输入信号。因此,我们期望上面的乘积能够得到一个合适的标量,比如说 1。因此,令每一层下:

\[\frac{1}{2}n_lVar[w_l]=1, \forall l \tag{10} \]

这将导致一个 0 均值的高斯分布,其标准差为 \(\sqrt{2/n_l}\) ,这也正是我们对参数进行初始化的方式。同样的将偏置值初始化为 0

对于第一层,令 \(n_1Var[w_1]=1\) ,因为输入信号上,不存在 ReLU 的作用。由于只有一层,所以系数 \(n_1Var[w_1]=1\) 无关紧要。

2.3.2 反向传播情况

在反向传播阶段,卷积层的梯度为:

\[\Delta x_l=\hat{\pmb W_l}\Delta y_l \]

其中,我们用 \(\Delta x\) 和 \(\Delta y\) 表示梯度: \(\frac{\partial \xi}{\partial x}\) 和 \(\frac{\partial \xi}{\partial y}\) 。每个卷积核内,参数总数为 \(\hat{n_l}=k^2d\) 。 \(\hat{\pmb W}\) 是一个 \(c\times \hat{n}\) 的矩阵,其以反向传播的方式进行了重新排列。上述式子与前向传播过程相似,相当于后往前的卷积,只是权重矩阵\(\pmb W\)不一样。

综上,我们假设 \(w_l\) 和 \(\Delta y_l\)相互独立,那么当 \(w_l\) 初始化为 0 附近的对称分布时,对于所有的 \(l\) , \(\Delta x_l\) 具有 0 均值。

在反向传播阶段,我们同时有\(\Delta y_l=f^{'}(y_l)\Delta x_{l+1}\) ,其中 \(f^{'}\) 为 \(f\) 的微分。在 ReLU 的情况下, \(f^{'}(y_l)\)只能为 01,且两者概率相等。我们假设 \(f^{'}(y_l)\) 和 \(\Delta x_{l+1}\) 相互独立。因此可得, \(E[\Delta y_l]=\frac{1}{2}\times 0+E[\Delta x_{l+1}]/2=0\)以及 \(E[(\Delta y_l)^2]=E[\Delta y_l]^2+Var[\Delta y_l]=\frac{1}{2}Var[\Delta x_{l+1}]\) 。对于 PReLU,\(\frac{1}{2}\)将变为\(\frac{1+a^2}{2}\) 。因此,可得反向传播的方差为:

\[\begin{aligned} Var[\Delta x_l]&=\hat{n_l}Var[w_l]Var[\Delta y_l] \\ &=\frac{1}{2}\hat{n_l}Var[w_l]Var[\Delta x_{l+1}] \end{aligned} \]

从第 L 层往前反向传播,可得:

\[Var[\Delta x_2]=Var[\Delta x_{L+1}](\prod \limits_{l=2}^L \frac{1}{2}\hat{n_l}Var[w_l]) \tag{13} \]

我们考虑到一个充分的条件,即:梯度不是指数级的大或小:

\[\frac{1}{2}\hat{n_l}Var[w_l]=1, \forall l \tag{14} \]

该公式与公式 10 的唯一区别在于, \(\hat{n_l}=k_ld_l^2\) 而 \(n_l=k_l^2c_l=k_l^2d_{l-1}\)。上式结果将得到一个 0 均值的高斯分布,其标准差为 \(\sqrt{2/\hat{n_l}}\) 。

对于第一层( [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fq8lrQAc-1643965484111)(https://www.zhihu.com/equation?tex=l+%3D+1)] ),我们无需计算 \(\Delta x_1\) ,因为其输入为图像。但是我们仍可将上式用于第一层,与前向传播中一样,单层影响不大。

使用公式 1014 计算权值参数的分布,进行初始化均可。例如,我们如果用式子(14):

\[\prod \limits_{l=2}^L \frac{1}{2}\hat{n_l}Var[w_l]=1 \]

带入到(9):

\[\prod \limits_{l=2}^L \frac{1}{2}n_lVar[w_l]=\prod \limits_{l=2}^L n_l/\hat{n_l}=c_2 \prod \limits_{l=3}^L (k^2d_{l-1})/(k^2d_l)=c_2/d_L \]

这意味着,如果初始化可以正确地缩放了后向信号,那么前向信号也是如此;反之亦然。对于本文中的所有模型,这两种形式都可以使它们收敛。

2.4 讨论

如果正向/后向信号在每一层中不适当地放大一个因子β,则最终传播的信号将在L层后按\(\beta^L\)的因子重新调整,其中L可以代表部分或所有层。当L很大时,如果β>为1,则导致信号被极大放大,算法输出为无穷大;如果β<1,则导致信号减少。在任何一种情况下,算法都不收敛——它在前一种情况下发散,在后一种情况下停滞。

该文的推导也解释了为什么0.01的标准差使一些更深层次的网络停滞。我们同时做了实验,解释为什么常量的标准差,比如 0.01 会导致深度网络训练停滞。我们以一个 VGG 网络(model B)为例,其有 10 层卷积层,每一层的尺寸均为 \(3\times 3\) 。前两层的滤波器数量为 64,三四层为 128,五六层为 256,其余的为 512。标准差计算: \(\sqrt{2/\hat{n_l}}\) 分别为 0.059, 0.042, 0.029 和 0.021。

而如果直接初始化为 0.01,则从 conv10conv2 的反向传播梯度的std为 \(1/(5.9+4.2^2+2.9^2+2.1^2)=1/(1.7\times 10^4)\) 。这就解释了,为什么实验过程中会发现梯度衰减的现象。


Proof:

应用(14)式,

\[\frac{1}{2}\hat{n_l}Var[w_l]=1, \forall l \tag{14} \]

我们得到对应层的\(std[w_l]\)分别为0.059,0.042,0.029,0.021;但此时如果采用std为0.01的方法,

\[\frac{1}{2}\hat{n_l}(0.01)^2=\frac{1}{2}\hat{n_l}Std^2[w_l]\times \frac{0.01^2}{Std^2[w_l]}=\frac{0.01^2}{Std^2[w_l]}, \forall l \]


同样要注意,输入信号的方差可大致的从第一层保持到最后一层。当输入信号未进行标准化时(例如取值范围为 [-128, 128]),其影响较大,将使得 softmax 上溢。可以通过对输入进行标准化解决,但是这可能会影响其他超参数。另一种解决方式是在部分或全部层的权值上,引入一个小的因子,例如 \(\sqrt[L]{1/128}\) 在 L 层上。

实际上,我们对前两层全连接层使用 0.01 的标准差,对最后一层使用 0.001 的标准差,比其理论值要小( \(\sqrt{2/4096}\) ),并将解决归一化问题。

3. 结果

针对一个 22 层的模型,用本文提出的初始化方式比\(Xavier\)能更快收敛。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w0XksavT-1643965484111)(C:\Users\Liujiawang\AppData\Roaming\Typora\typora-user-images\image-20220204170311538.png)]

针对一个 30 层的模型,用本文提出的初始化方式可以使模型收敛,但用\(Xavier\)则无法收敛。
在这里插入图片描述

4. Reference

[1]Delving Deep into Rectififiers: Surpassing Human-Level Performance on ImageNet Classifification

标签:partial,卷积,Delta,Var,frac,hat,PReLu
来源: https://www.cnblogs.com/a-runner/p/15863095.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有