1. 摘要
在\(ReLu\)的基础上作者提出了\(PReLu\),在几乎没有增加额外参数的前提下既可以提升模型的拟合能力,又能减小过拟合风险。
针对的\(ReLu/PReLu\)矫正非线性,作者设计了一个鲁棒的的参数初始化方法。
2. 介绍
在过去几年,随着更强大网络模型的构建和有效防止过拟合策略的设计,我们在视觉识别任务上取得了长足的进步。一方面,由于网络复杂性的增加(比如增加深度、扩大宽度)、小步长的使用、新的激活函数和更成熟的网络层设计,神经网络变得更加能够拟合训练数据。另一方面,有效的正则化技术、数据增广和大规模的数据让网络获得了更好的泛化能力。
其中,激活函数\(ReLu\)是其中一个非常关键的因素,本文在此基础上做了两点主要改进。首先,我们提出了一个新的激活函数\(PReLu\)(Parametric Rectified Linear Unit),该激活函数可以自适应地学习矫正线性单元的参数,并且能够在增加可忽略的额外计算成本下提高准确率。其次,我们研究了模型训练的难度,得出了一种理论上合理的初始化方法,有助于深层网络模型的收敛。
2.1 定义
PReLU
的计算方式如下所示:
其中,\(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)] 的梯度为:
其中, \(\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\)的有效性,学习到的系数如下表所示。
这其中,有两个有意思的现象。一,第一个卷积层的系数远远比 0 要大(0.681, 0.596),因为这一层的卷积核大部分是类 Gabor 过滤器,比如说边缘、纹理检测器,学习到的结果表明卷积核的正负响应都被接受。这在卷积核数量有限的情况下,可以被认为是一个更加经济地利用低层次信息的方式。二,对于通道独立的激活函数,较深的卷积层通常具有较小的系数。 这意味着激活函数在深度增加时逐渐变得“更加非线性”。 换句话说,学习模型倾向于在较早阶段保留更多信息,并在更深层次阶段变得更具辨别力。
针对通道共享的版本,\(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
,则有:
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
。因此:
所以有:
\[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}]\) 。结合上式,可得:
则从第一层传递到第 L
层,有:
其乘积是初始化设计的关键。一个合适的初始化方法,应该避免以指数形式改变输入信号。因此,我们期望上面的乘积能够得到一个合适的标量,比如说 1
。因此,令每一层下:
这将导致一个 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)\)只能为 0
或 1
,且两者概率相等。我们假设 \(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}\) 。因此,可得反向传播的方差为:
从第 L
层往前反向传播,可得:
我们考虑到一个充分的条件,即:梯度不是指数级的大或小:
\[\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\) ,因为其输入为图像。但是我们仍可将上式用于第一层,与前向传播中一样,单层影响不大。
使用公式 10
或 14
计算权值参数的分布,进行初始化均可。例如,我们如果用式子(14):
带入到(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
,则从 conv10
到 conv2
的反向传播梯度的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\)能更快收敛。
针对一个 30 层的模型,用本文提出的初始化方式可以使模型收敛,但用\(Xavier\)则无法收敛。
4. Reference
[1]Delving Deep into Rectififiers: Surpassing Human-Level Performance on ImageNet Classifification