关于激活函数的讨论      

在多层神经网络中,两层之间有一个函数,该函数称为激活函数,其结构如图12所示。

conda激活函数 激活函数层_conda激活函数

conda激活函数 激活函数层_机器学习_02

如果未使用激活函数或使用线性函数,则每层的输入将是前一层输出的线性函数。在这种情况下,Heet al.验证无论神经网络有多少层,输出总是输入的线性组合,这意味着隐藏层没有效果。这种情况是原始感知器,它的学习能力有限。因此,引入非线性函数作为激活函数。理论上,具有非线性激活函数的深度神经网络可以逼近任何函数,这大大提高了神经网络拟合数据的能力。

激活函数介绍

          sigmoid函数可以将元素的值变换到0和1之间:

conda激活函数 激活函数层_深度学习_03

下面绘制了sigmoid函数。当输入接近0时, sigmoid函数接近线性变换

conda激活函数 激活函数层_深度学习_04

 

        依据链式法则, sigmoid函数的导数,当输入为0时, sigmoid函数的导数达到最大值;当输入越偏离0时, sigmoid函数的导数越接近0。

conda激活函数 激活函数层_深度学习_05

conda激活函数 激活函数层_激活函数_06

二元分类问题。此外,SENet和MobileNet v3需要将注意力机制的输出值转换为(0,1),其中sigmoid是一种合适的实现方式。

归一化。这使得下一层更容易学习。

conda激活函数 激活函数层_机器学习_07

        此外,ReLU见图13(c)]是另一种有效的激活功能。当x小于0时,其函数值为0;当x大于或等于0时,其函数值为itself。与sigmoid函数和tanh函数相比,使用ReLU函数的一个显著优点是可以加快学习速度。Sigmoid和tanh涉及指数运算,在计算导数时需要除法,而ReLU的导数是常数。此外,在sigmoid和tanh函数中,如果x的值太大或太小,函数的梯度就很小,这会导致函数缓慢收敛。然而,当x小于0时,ReLU的导数为0,当x大于0时,导数为1;因此,它可以获得理想的收敛效果。ILSVRC-2012中的最佳模型AlexNet使用ReLU作为基于CNN的模型的激活函数,这缓解了网络较深时的梯度消失问题,并验证了在较深网络中使用ReLU优于sigmoid。根据前面的讨论,我们可以发现ReLU不包括上限。实际上,我们可以设置一个上限,如ReLU6。

conda激活函数 激活函数层_深度学习_08

Heet al.认为PReLU是在ImageNet 2012分类数据集上超越人类分类水平的关键。

        指数线性单位(ELU)函数[见图13(f)]是ReLU的另一个改进版本。由于ReLU是非负激活的,因此其输出的平均值大于0。此问题导致下一层单元的偏移。ELU函数为负值;因此,其输出的平均值接近于0,使得收敛速度比ReLU快。然而,负部分是一条曲线,需要很多复杂的导数。

conda激活函数 激活函数层_深度学习_09

conda激活函数 激活函数层_机器学习_10

因一些段落内插入了公式,上传时就保存为了图片,给大家带来不便,请谅解!

参考:Dive_into_DL_Pytorch

A Survey of Convolutional Neural Networks:Analysis, Applications, and Prospects