“激活函数”,又称“非线性映射函数”,是深度卷积神经网络中不可或缺的关键模块。可以说,深度网络模型其强大的表示能力大部分便是由激活函数的非线性带来的。
1.Sigmoid型函数
Sigmoid型函数也称Logistic函数:
其函数形状如下图(a)所示。很明显可以看出,经过Sigmoid型函数作用后,输出响应的值域被压缩到[0, 1] 之间,而0对应了生物神经元的“抑制状态”,1则恰好对应了“兴奋状态”。但对于Sigmoid函数两端大于5(或小于−5)的区域,这部分输出会被压缩到1(或0)。这样的处理会带来梯度的“饱和效应”(saturation effect)。不妨对照Sigmoid型函数的梯度图(图(b)),大于5(或小于−5)部分的梯度接近0,这会导致在误差反向传播过程中导数处于该区域的误差很难甚至无法传递至前层,进而导致整个网络无法正常训练。
从上图(a)中可观察到Sigmoid型激活函数值域的均值并非为0,而是全为正,这样的结果实际上并不符合我们对神经网络内数值的期望(均值)应为0的设想。
2.tanh(x) 型函数
tanh(x) 型函数是在Sigmoid型函数基础上为解决均值问题提出的激活函数:
tang(x) = 2S(2x)-1。tanh(x) 型函数又称作双曲正切函数(hyperbolic tangent function),其函数范围是(−1,+1),输出响应的均值为0。但由于tanh(x) 型函数仍基于Sigmoid型函数,使用tanh(x) 型函数依然会发生“梯度饱和”现象。
3.修正线性单元(ReLU)
为了避免梯度饱和现象的发生,将修正线性单元(Rectified Linear Unit,简称ReLU)引入神经网。ReLU函数是目前深度卷积神经网络中最为常用的激活函数之一。ReLU函数实际上是一个分段函数,其定义为:
ReLU(x) = MAX{0, x}.
与前两个激活函数相比:ReLU函数的梯度在x ≥ 0 时为1,反之为0(如上图所示);对x ≥ 0 部分完全消除了Sigmoid型函数的梯度饱和效应。计算复杂度上,ReLU函数也相对前两者的指数函数计算更为简单。同时,实验中还发现ReLU函数有助于随机梯度下降方法收敛,收敛速度约快6倍左右。不过,ReLU函数也有自身缺陷,即在x < 0 时,梯度便为0。换句话说,对于小于0的这部分卷积结果响应,它们一旦变为负值将再无法影响网络训练——这种现象被称作“死区”。
4.Leaky ReLU
为了缓解“死区”现象,研究者将ReLU函数中x < 0 的部分调整为f(x) = α·x,其中α 为0.01或0.001数量级的较小正数。这种新型的激活函数被称作“Leaky ReLU”:
可以发现,原始ReLU函数实际上是Leaky ReLU函数的一个特例,即α = 0。不过由Leaky ReLU中α 为超参数,合适的值较难设定且较为敏感,因此Leaky ReLU函数在实际使用中的性能并不十分稳定。
5.参数化ReLU
参数化ReLU的提出很好的解决了Leaky ReLU中超参数α 不易设定的问题:参数化ReLU直接将α 也作为一个网络中可学习的变量融入模型的整体训练过程。在求解参数化ReLU时,文献中仍使用传统的误差反向传播和随机梯度下降,对于参数α 的更新遵循链式法则,具体推导细节在此不过多赘述,感兴趣的读者可参考文献Surpassing human-level performance on ImageNet classification。实验结果验证方面,曾在一个14层卷积网络上对比了ReLU和参数化ReLU在ImageNet 2012数据集上的分类误差(top-1和top-5)。
网络结构如表1,每层卷积操作后均有参数化ReLU操作。表中第二列和第三列数值分别表示各层不同通道(channel)共享参数α 和独享参数α1时网络自动学习的α 取值。
实验结果如表2中所示。可以发现,在分类精度上,使用参数化ReLU作为激活函数的网络要优于使用原始ReLU的网络,同时自由度较大的各通道独享参数的参数化ReLU性能更优。另外,需指出表1中几个有趣的观察:
1)与第一层卷积层搭配的参数化ReLU的α 取值(表1中第一行0.681和0.596)远大于ReLU中的0。这表明网络较浅层所需非线性较弱。同时,我们知道浅层网络特征一般多为表示“边缘”、“纹理”等特性的泛化特征。这一观察说明对于此类特征正负响应(activation)均很重要;这也解释了固定α 取值的ReLU(α = 0)和Leaky ReLU相比参数化ReLU性能较差的原因。
2)请注意独享参数设定下学到的α 取值(表1中的最后一列)呈现由浅层到深层依次递减的趋势,说明实际上网络所需的非线性能力随网络深度增加而递增。
不过万事皆具两面性,参数化ReLU在带来更大自由度的同时,也增加了网络模型过拟合的风险,在实际使用中需格外注意。
6.随机化ReLU
另一种解决α 超参设定的方式是将其随机化,这便是随机化ReLU。对于随机化ReLu中α 的设定,其取值在训练阶段服从均匀分布,在测试阶段则将其指定为该均匀分布对应的分布期望(l+u)/2:
7.指数化线性单元(ELU)
显然,ELU具备ReLU函数的优点,同时ELU也解决了ReLU函数自身的“死区”问题。不过,ELU函数中的指数操作稍稍增大了计算量。实际使用中,ELU中的超参数λ 一般设置为1。