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) \]

图像如下:

PReLu

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\)的有效性,学习到的系数如下表所示。

PReLu

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

PReLu

针对通道共享的版本,\(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\)能更快收敛。

PReLu

针对一个 30 层的模型,用本文提出的初始化方式可以使模型收敛,但用\(Xavier\)则无法收敛。
PReLu

4. Reference

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

上一篇:最优检测器,ROC,AUC


下一篇:样条曲线的Fortran程序