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 yi≤0
其中,
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∂ξ=yi∑∂f(yi)∂ξ∂ai∂f(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}
∂ai∂f(yi)={yi,aiyi,if yi>0if yi≤0
其中,
∑
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∂ξ=i∑yi∑∂f(yi)∂ξ∂a∂f(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的有效性,学习到的系数如下表所示。
这其中,有两个有意思的现象。一,第一个卷积层的系数远远比 0 要大(0.681, 0.596),因为这一层的卷积核大部分是类 Gabor 过滤器,比如说边缘、纹理检测器,学习到的结果表明卷积核的正负响应都被接受。这在卷积核数量有限的情况下,可以被认为是一个更加经济地利用低层次信息的方式。二,对于通道独立的激活函数,较深的卷积层通常具有较小的系数。 这意味着激活函数在深度增加时逐渐变得“更加非线性”。 换句话说,学习模型倾向于在较早阶段保留更多信息,并在更深层次阶段变得更具辨别力。
针对通道共享的版本, 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(yl−1),
f
f
f是激活函数,且有
c
l
=
d
l
−
1
c_l=d_{l-1}
cl=dl−1。若忽略 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=1∑k2cVar[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]
若各个X相互独立,Var[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]2−E[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,yl−1),因此其均值不为 0。
如果让
w
l
−
1
w_{l-1}
wl−1 在 0
附近对称分布,且
w
l
−
1
w_{l-1}
wl−1 ,那么
y
l
−
1
y_{l-1}
yl−1 均值为 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(yl−1)得:
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[yl−12]=21Var[yl−1] 。结合上式,可得:
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[yl−1]
则从第一层传递到第 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=2∏L21nlVar[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)只能为 0
或 1
,且两者概率相等。我们假设
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=2∏L21nl^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=kl2dl−1。上式结果将得到一个 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 ,因为其输入为图像。但是我们仍可将上式用于第一层,与前向传播中一样,单层影响不大。
使用公式 10
或 14
计算权值参数的分布,进行初始化均可。例如,我们如果用式子(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=2∏L21nl^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=2∏L21nlVar[wl]=l=2∏Lnl/nl^=c2l=3∏L(k2dl−1)/(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
,则从 conv10
到 conv2
的反向传播梯度的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能更快收敛。
针对一个 30 层的模型,用本文提出的初始化方式可以使模型收敛,但用
X
a
v
i
e
r
Xavier
Xavier则无法收敛。
4. Reference
[1]Delving Deep into Rectififiers: Surpassing Human-Level Performance on ImageNet Classifification