PReLu

1. 摘要

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

2. 介绍

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

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

2.1 定义

PReLU 的计算方式如下所示:
f ( y i ) = { y i , if  y i > 0 a i y i , if  y i ≤ 0 f(y_i)= \begin{cases} y_i, & \text{if }y_i \gt0 \\ a_iy_i, & \text{if }y_i \le0 \end{cases} f(yi)={yi,aiyi,if yi>0if yi0
其中, y i y_i yi是非线性激活函数 f f f在第 i i i个通道的输入, a i a_i ai负责控制负半轴的斜率。在这里,我们允许不同通道的激活函数不一样。当 a i = 0 a_i=0 ai=0时,就 P R e L u PReLu PReLu变成了 R e L u ReLu ReLu,而且 a i a_i ai是一个可以学习的参数。

上面的计算又可以表示为:
f ( y i ) = m a x ( 0 , y i ) + a i m i n ( 0 , y i ) f(y_i)=max(0,y_i)+a_imin(0,y_i) f(yi)=max(0,yi)+aimin(0,yi)
图像如下:

2.2 优化

反向传播阶段,某一层中,loss 对 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rnS7flup-1643965484109)(https://www.zhihu.com/equation?tex=a_i)] 的梯度为:
∂ ξ ∂ a i = ∑ y i ∂ ξ ∂ f ( y i ) ∂ f ( y i ) ∂ 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} aiξ=yif(yi)ξaif(yi)
其中, ξ \xi ξ 为目标函数, ∂ ξ ∂ f ( y i ) \frac{\partial \xi}{\partial f(y_i)} f(yi)ξ为后续层传回的梯度,而:
∂ f ( y i ) ∂ a i = { y i , if  y i > 0 a i y i , if  y i ≤ 0 \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} aif(yi)={yi,aiyi,if yi>0if yi0
其中, ∑ y i \sum \limits_{y_i} yi 是在当前层的第 i i i 个通道的特征图中,所有像素点上进行求和的。

对于channal-shared的变体来说, a a a的梯度为:
∂ ξ ∂ a = ∑ i ∑ y i ∂ ξ ∂ f ( y i ) ∂ f ( y i ) ∂ 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} aξ=iyif(yi)ξaf(yi)
∑ i \sum \limits_{i} i 代表的是各个通道梯度相加。

在更新参数 a i a_i ai 时,我们使用动量的方法:
Δ a i = μ Δ a i + ϵ ∂ ξ ∂ a i \Delta a_i=\mu \Delta a_i+\epsilon \frac{\partial \xi}{\partial a_i} Δai=μΔai+ϵaiξ
其中, μ \mu μ 为动量系数, ϵ \epsilon ϵ为学习速率。我们并未使用权值衰减(L2 正则),因为其将使得 a i a_i ai 趋于 0

作者设计了一个简单的网络来验证 P R e L u PReLu 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)]

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

2.3 卷积核权重初始化

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

2.3.1 前向传播情况

对于卷积层,每个卷积窗口的响应为:
y l = W l x l + b l y_l=\pmb W_lx_l+b_l yl=WWWlxl+bl
其中,输入通道数为 c c c ,卷积核尺寸为 k × k k\times k k×k ,因此每个卷积核的参数数量为 n = k 2 c n=k^2c n=k2c,输出通道数为 d d d y l y_l yl 表示第 l l l个输出特征图, W l \pmb W_l WWWl为一个 1 × n 1\times n 1×n的向量, y l y_l yl W l \pmb W_l WWWl x l x_l xl的点积;我们用 l l l来标识每一层,则有 x l = f ( y l − 1 ) x_l=f(y_{l-1}) xl=f(yl1) f f f是激活函数,且有 c l = d l − 1 c_l=d_{l-1} cl=dl1。若忽略 b,则有:
V a r ( [ y i ] ) = ∑ i = 1 k 2 c V a r [ w i x i ] Var([y_i])=\sum \limits_{i=1}^{k^2c}Var[w_ix_i] Var([yi])=i=1k2cVar[wixi]
Theorm:
若 各 个 X 相 互 独 立 , V a r [ X 1 + X 2 + . . . + X n ] = V a r [ X 1 ] + V a r [ X 2 ] + . . . + V a r [ X n ] 若各个X相互独立,\\ Var[X_1+X_2+...+X_n]=Var[X_1]+Var[X_2]+...+Var[X_n] XVar[X1+X2+...+Xn]=Var[X1]+Var[X2]+...+Var[Xn]
我们假设参数 W l \pmb W_l WWWl 内的内各元素相互独立,且服从相同分布。 x l x_l xl 亦是如此。 W l \pmb W_l WWWl x l \pmb x_l xxxl 之间相互独立。因此有:
V a r [ y i ] = n l V a r [ w l x l ] Var[y_i]=n_lVar[w_lx_l] Var[yi]=nlVar[wlxl]
其中, y l , x l , w l y_l,x_l,w_l yl,xl,wl 分别表示 y l , W l , x l \pmb y_l,\pmb W_l,\pmb x_l yyyl,WWWl,xxxl 内的每个元素的随机变量。我们使得 w l w_l wl 均值为 0。因此:
V a r [ y l ] = n l ( E ( [ ( w l x l ) 2 ] ) − E [ w l x l ] 2 ) = n l ( E ( [ w l 2 ] E [ x l ] 2 − E [ w l ] 2 E [ 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 ] ) \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[yl]=nl(E([(wlxl)2])E[wlxl]2)=nl(E([wl2]E[xl]2E[wl]2E[xl]2)=nl(E([wl2]E[xl]2)=nl((E[wl2]E[wl]2)E[xl2])
所以有:
V a r [ y l ] = n l V a r [ w l ] E [ x l 2 ] Var[y_l]=n_lVar[w_l]E[x_l^2] Var[yl]=nlVar[wl]E[xl2]
其中, E [ x l 2 ] ≠ V a r [ x l ] E[x_l^2]\ne Var[x_l] E[xl2]=Var[xl] ,除非 x l x_l xl 均值为 0。对于 ReLU 激活函数, x l = m a x ( 0 , y l − 1 ) x_l=max(0,y_{l-1}) xl=max(0,yl1),因此其均值不为 0。

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

在使用 ReLU 时,由于负向值为 0,因此由 x l = f ( y l − 1 ) x_l=f(y_{l-1}) xl=f(yl1)得: E [ x l 2 ] = 1 2 E [ 0 ] + 1 2 E [ y l − 1 2 ] = 1 2 V a r [ 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}] E[xl2]=21E[0]+21E[yl12]=21Var[yl1] 。结合上式,可得:
V a r [ y l ] = 1 2 V a r [ w l ] V a r [ y l − 1 ] Var[y_l]=\frac{1}{2}Var[w_l]Var[y_{l-1}] Var[yl]=21Var[wl]Var[yl1]
则从第一层传递到第 L 层,有:
V a r [ y L ] = V a r [ y 1 ] ( ∏ l = 2 L 1 2 n l V a r [ w l ] ) (9) Var[y_L]=Var[y_1](\prod \limits_{l=2}^L \frac{1}{2}n_lVar[w_l]) \tag{9} Var[yL]=Var[y1](l=2L21nlVar[wl])(9)
其乘积是初始化设计的关键。一个合适的初始化方法,应该避免以指数形式改变输入信号。因此,我们期望上面的乘积能够得到一个合适的标量,比如说 1。因此,令每一层下:
1 2 n l V a r [ w l ] = 1 , ∀ l (10) \frac{1}{2}n_lVar[w_l]=1, \forall l \tag{10} 21nlVar[wl]=1,l(10)
这将导致一个 0 均值的高斯分布,其标准差为 2 / n l \sqrt{2/n_l} 2/nl ,这也正是我们对参数进行初始化的方式。同样的将偏置值初始化为 0

对于第一层,令 n 1 V a r [ w 1 ] = 1 n_1Var[w_1]=1 n1Var[w1]=1 ,因为输入信号上,不存在 ReLU 的作用。由于只有一层,所以系数 n 1 V a r [ w 1 ] = 1 n_1Var[w_1]=1 n1Var[w1]=1 无关紧要。

2.3.2 反向传播情况

在反向传播阶段,卷积层的梯度为:
Δ x l = W l ^ Δ y l \Delta x_l=\hat{\pmb W_l}\Delta y_l Δxl=WWWl^Δyl
其中,我们用 Δ x \Delta x Δx Δ y \Delta y Δy 表示梯度: ∂ ξ ∂ x \frac{\partial \xi}{\partial x} xξ ∂ ξ ∂ y \frac{\partial \xi}{\partial y} yξ 。每个卷积核内,参数总数为 n l ^ = k 2 d \hat{n_l}=k^2d nl^=k2d W ^ \hat{\pmb W} WWW^ 是一个 c × n ^ c\times \hat{n} c×n^ 的矩阵,其以反向传播的方式进行了重新排列。上述式子与前向传播过程相似,相当于后往前的卷积,只是权重矩阵 W \pmb W WWW不一样。

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

在反向传播阶段,我们同时有 Δ y l = f ′ ( y l ) Δ x l + 1 \Delta y_l=f^{'}(y_l)\Delta x_{l+1} Δyl=f(yl)Δxl+1 ,其中 f ′ f^{'} f f f f 的微分。在 ReLU 的情况下, f ′ ( y l ) f^{'}(y_l) f(yl)只能为 01,且两者概率相等。我们假设 f ′ ( y l ) f^{'}(y_l) f(yl) Δ x l + 1 \Delta x_{l+1} Δxl+1 相互独立。因此可得, E [ Δ y l ] = 1 2 × 0 + E [ Δ x l + 1 ] / 2 = 0 E[\Delta y_l]=\frac{1}{2}\times 0+E[\Delta x_{l+1}]/2=0 E[Δyl]=21×0+E[Δxl+1]/2=0以及 E [ ( Δ y l ) 2 ] = E [ Δ y l ] 2 + V a r [ Δ y l ] = 1 2 V a r [ Δ x l + 1 ] E[(\Delta y_l)^2]=E[\Delta y_l]^2+Var[\Delta y_l]=\frac{1}{2}Var[\Delta x_{l+1}] E[(Δyl)2]=E[Δyl]2+Var[Δyl]=21Var[Δxl+1] 。对于 PReLU 1 2 \frac{1}{2} 21将变为 1 + a 2 2 \frac{1+a^2}{2} 21+a2 。因此,可得反向传播的方差为:
V a r [ Δ x l ] = n l ^ V a r [ w l ] V a r [ Δ y l ] = 1 2 n l ^ V a r [ w l ] V a r [ Δ x l + 1 ] \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} Var[Δxl]=nl^Var[wl]Var[Δyl]=21nl^Var[wl]Var[Δxl+1]
从第 L 层往前反向传播,可得:
V a r [ Δ x 2 ] = V a r [ Δ x L + 1 ] ( ∏ l = 2 L 1 2 n l ^ V a r [ w l ] ) (13) 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} Var[Δx2]=Var[ΔxL+1](l=2L21nl^Var[wl])(13)
我们考虑到一个充分的条件,即:梯度不是指数级的大或小:
1 2 n l ^ V a r [ w l ] = 1 , ∀ l (14) \frac{1}{2}\hat{n_l}Var[w_l]=1, \forall l \tag{14} 21nl^Var[wl]=1,l(14)
该公式与公式 10 的唯一区别在于, n l ^ = k l d l 2 \hat{n_l}=k_ld_l^2 nl^=kldl2 n l = k l 2 c l = k l 2 d l − 1 n_l=k_l^2c_l=k_l^2d_{l-1} nl=kl2cl=kl2dl1。上式结果将得到一个 0 均值的高斯分布,其标准差为 2 / n l ^ \sqrt{2/\hat{n_l}} 2/nl^

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

使用公式 1014 计算权值参数的分布,进行初始化均可。例如,我们如果用式子(14):
∏ l = 2 L 1 2 n l ^ V a r [ w l ] = 1 \prod \limits_{l=2}^L \frac{1}{2}\hat{n_l}Var[w_l]=1 l=2L21nl^Var[wl]=1
带入到(9):
∏ l = 2 L 1 2 n l V a r [ w l ] = ∏ l = 2 L n l / n l ^ = c 2 ∏ l = 3 L ( k 2 d l − 1 ) / ( k 2 d l ) = c 2 / d L \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 l=2L21nlVar[wl]=l=2Lnl/nl^=c2l=3L(k2dl1)/(k2dl)=c2/dL
这意味着,如果初始化可以正确地缩放了后向信号,那么前向信号也是如此;反之亦然。对于本文中的所有模型,这两种形式都可以使它们收敛。

2.4 讨论

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

该文的推导也解释了为什么0.01的标准差使一些更深层次的网络停滞。我们同时做了实验,解释为什么常量的标准差,比如 0.01 会导致深度网络训练停滞。我们以一个 VGG 网络(model B)为例,其有 10 层卷积层,每一层的尺寸均为 3 × 3 3\times 3 3×3 。前两层的滤波器数量为 64,三四层为 128,五六层为 256,其余的为 512。标准差计算: 2 / n l ^ \sqrt{2/\hat{n_l}} 2/nl^ 分别为 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 × 1 0 4 ) 1/(5.9+4.2^2+2.9^2+2.1^2)=1/(1.7\times 10^4) 1/(5.9+4.22+2.92+2.12)=1/(1.7×104) 。这就解释了,为什么实验过程中会发现梯度衰减的现象。


Proof:

应用(14)式,
1 2 n l ^ V a r [ w l ] = 1 , ∀ l (14) \frac{1}{2}\hat{n_l}Var[w_l]=1, \forall l \tag{14} 21nl^Var[wl]=1,l(14)
我们得到对应层的 s t d [ w l ] std[w_l] std[wl]分别为0.059,0.042,0.029,0.021;但此时如果采用std为0.01的方法,
1 2 n l ^ ( 0.01 ) 2 = 1 2 n l ^ S t d 2 [ w l ] × 0.0 1 2 S t d 2 [ w l ] = 0.0 1 2 S t d 2 [ w l ] , ∀ l \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 21nl^(0.01)2=21nl^Std2[wl]×Std2[wl]0.012=Std2[wl]0.012,l


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

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

3. 结果

针对一个 22 层的模型,用本文提出的初始化方式比 X a v i e r Xavier Xavier能更快收敛。

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

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

4. Reference

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值