以下内容主要来自邱锡鹏老师的《神经网络与深度学习》第四章和博客的整理。
1 Sigmoid型函数
型函数是指一类型曲线函数,为两端饱和函数。常用的型函数有函数和函数。
讯享网,若时,其导数
,则称其为左饱和。若
时,其导数
,则称其为右饱和。当同时满足左、右饱和时,就称为两端饱和。
1.1 Logistic函数
函数定义为
其导数为
函数可以看成是一个“挤压”函数,把一个实数域的输入“挤压”到(0, 1)。当输入值在0附近时,型函数近似为线性函数;当输入值靠近两端时,对输入进行抑制。输入越小,越接近于0;输入越大,越接近于1。这样的特点也和生物神经元类似,对一些输入会产生兴奋(输出为1),对另一些输入产生抑制(输出为0)。和感知器使用的阶跃激活函数相比,函数是连续可导的,其数学性质更好。
因为函数的性质,使得装备了激活函数的神经元具有以下两点性质:1)其输出直接可以看作概率分布,使得神经网络可以更好地和统计学习模型进行结合。2)其可以看作一个软性门(Soft Gate),用来控制其他神经元输出信息的数量。
下图左边是函数,右边是该函数的导数,由图像可发现:当输入值大于10或者小于-10时局部梯度都是0,非常不利于网络的梯度流传递。

函数作为激活函数的特点:
- 激活函数计算量大(在正向传播和反向传播中都包含幂运算和除法);
- 反向传播求误差梯度时,求导涉及除法;
导数取值范围是[0, 0.25],当
中
较大或较小时,导数接近0,而反向传播的数学依,据是微积分求导的链式法则,当前层的导数需要之前各层导数的乘积,几个小数的相乘,结果会很接近0;
导数的最大值是0.25,这意味着导数在每一层至少会被压缩为原来的1/4,通过两层后被变为1/16,……,通过10层后为
,第10层的误差相对第一层卷积的参数[公式]的梯度将是一个非常小的值,这就是所谓的“梯度消失”(即Gradient Vanishing)。请注意这里是“至少”,导数达到最大值这种情况还是很少见的。
详细数学分析见文章:http://neuralnetworksanddeeplearning.com/chap5.html
1.2 Tanh函数
函数也是一种型函数。其定义为
函数可以看作放大并平移的函数,其值域是(−1, 1)。
下图给出了函数和函数的形状。函数的输出是零中心化的(Zero-Centered),而函数的输出恒大于0。非零中心化的输出会使得其后一层的神经元的输入发生偏置偏移(Bias Shift),并进一步使得梯度下降的收敛速度变慢。

下图是函数的导数,与类似,局部梯度特性不利于网络梯度流的反向传递。

函数作为激活函数的特点:
- 函数的输出范围为(-1, 1),解决了函数的不是输出问题;但幂运算的问题仍然存在;
- 导数范围在(0, 1)之间,相比
1.3 Hard-Logistic 函数
函数和函数都是型函数,具有饱和性,但是计算开销较大。因为这两个函数都是在中间(0 附近)近似线性,两端饱和。因此,这两个函数可以通过分段函数来近似。
以函数
为例,其导数为
。函数在0 附近的一阶泰勒展开(Taylor expansion)为
这样函数可以用分段函数来近似。

1.4 Hard-Tanh 函数
同样,Tanh 函数在0附近的一阶泰勒展开为
这样Tanh 函数也可以用分段函数来近似。
下图给出了函数和函数的形状。

2 ReLU函数
ReLU(Rectified Linear Unit,修正线性单元),也叫函数,是目前深度神经网络中经常使用的激活函数。实际上是一个斜坡(ramp)函数,定义为
优点: 采用的神经元只需要进行加、乘和比较的操作,计算上更加高效。函数也被认为具有生物学合理性(Biological Plausibility),比如单侧抑制、宽兴奋边界(即兴奋程度可以非常高)。在生物神经网络中,同时处于兴奋状态的神经元非常稀疏。人脑中在同一时刻大概只有1% ∼ 4% 的神经元处于活跃状态。型激活函数会导致一个非稀疏的神经网络,而却具有很好的稀疏性,大约50% 的神经元会处于激活状态。
在优化方面,相比于型函数的两端饱和,函数为左饱和函数,且在
时导数为1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度。
缺点: 函数的输出是非零中心化的,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率。此外,神经元在训练时比较容易“死亡”。在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活。这种现象称为死亡问题(Dying ReLU Problem),并且也有可能会发生在其他隐藏层。
下图分别是函数图像和导函数图像,可以发现:当输入大于0时,局部梯度永远不会为0,比较有利于梯度流的传递。

函数作为激活函数的特点:
优点:
- 解决了梯度消失问题 (在正区间)
- 计算速度非常快,只需要判断输入是否大于0
- 收敛速度远快于和 缺点:
- 的输出不是零中心化
- ,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) 学习率太大导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将学习率设置太大或使用等自动调节学习率的算法。
- 在
下,导数为常数1的好处就是在链式法则中不会出现梯度消失,但梯度下降的强度就完全取决于权值的乘积,这样就可能会出现梯度爆炸问题。解决这类问题:一是控制权值,让它们在(0,1)范围内;二是做梯度裁剪,控制梯度下降强度,如
在实际使用中,为了避免上述情况,有几种的变种也会被广泛使用,如下:
2.1 带泄露的ReLU
带泄露的(Leaky ReLU)在输入
时,保持一个很小的梯度
。这样当神经元非激活时也能有一个非零的梯度可以更新参数,避免永远不能被激活。带泄露的的定义如下:
其中
是一个很小的常数,比如0.01。当
时,带泄露的也可以写为
相当于是一个比较简单的单元。
时,
,函数和导函数的图像分别如下,可以发现:基本没有“死区”, 也就是梯度永远不会为0。之所以说“基本”,是因为函数在0处没有导数。

理论上来讲,有的所有优点,外加不会有问题,但是在实际操作当中,并没有完全证明总是好于。
2.2 带参数的ReLU
带参数的ReLU(Parametric ReLU,PReLU)引入一个可学习的参数,不同神经元可以有不同的参数。对于第𝑖个神经元,其的定义为
其中
为
时函数的斜率。因此,是非饱和函数。如果
,那么就退化为。如果
为一个很小的常数,则可以看作带泄露的。可以允许不同神经元具有不同的参数,也可以一组神经元共享一个参数。
2.3 ELU 函数
ELU(Exponential Linear Unit,指数线性单元)是一个近似的零中心化的非线性函数,由Djork等人提出,被证实有较高的噪声鲁棒性,其定义为
是一个超参数,决定 
也是为解决存在的问题而提出,显然,有的基本所有优点,还不会有问题,输出的均值接近0,。但缺点在于需要计算指数,计算量稍大。类似于,理论上虽然好于,但在实际使用中目前并没有好的证据总是优于。该函数和导数的图像如下图所示:


2.4 Softplus 函数
函数可以看作函数的平滑版本,其定义为

函数其导数刚好是函数。函数虽然也具有单侧抑制、宽兴奋边界的特性,却没有稀疏激活性。

激活函数尽量选择函数或者函数,相对于,函数或者函数会让梯度流更加顺畅,训练过程收敛得更快,但要注意初始化和学习率的设置。
3 其他函数
3.1 Swish 函数
函数是一种自门控(Self-Gated)激活函数,定义为
其中
为函数,
为可学习的参数或一个固定超参数。
可以看作一种软性的门控机制。当
接近于1 时,门处于“开”状态,激活函数的输出近似于
本身;当
下图给出了函数的示例

当
时,函数变成线性函数
。当
时,函数在
时近似线性,在
时近似饱和,同时具有一定的非单调性。当
时,
趋向于离散的0-1函数,函数近似为函数。因此,函数可以看作线性函数和函数之间的非线性插值函数,其程度由参数 
3.2 GELU 函数
(Gaussian Error Linear Unit,高斯误差线性单元)也是一种通过门控机制来调整其输出值的激活函数,和函数比较类似。
其中
是高斯分布
的累积分布函数,其中
为超参数,一般设
即可。由于高斯分布的累积分布函数为S型函数,因此函数可以用函数或函数来近似,
当使用函数来近似时,相当于一种特殊的函数.
3.3 Maxout 单元
单元也是一种分段线性函数。型函数、等激活函数的输入是神经元的净输入
,是一个标量.而单元的输入是上一层神经元的全部原始输出,是一个向量
。
每个单元有
个权重向量
和偏置
。对于输入
,可以得到
个净输入
,
。
其中
为第 
单元的非线性函数定义为
单元不单是净输入到输出之间的非线性映射,而是整体学习输入到输出之间的非线性映射关系。激活函数可以看作任意凸函数的分段线性近似,并且在有限的点上是不可微的。
4 小结
深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用数据 (可以经过数据预处理实现) 和输出。所以要尽量选择输出具有特点的激活函数以加快模型的收敛速度。
和的特点是将输出限制在(0,1)和(-1,1)之间,说明和适合做概率值的处理,例如中的各种门;而就不行,因为无最大值限制,可能会出现很大值。同样,根据的特征,适合用于深层网络的训练,而和则不行,因为它们会出现梯度消失。

为什么在等结构中将原先的、换成可以取得比较好的效果?为什么在中,将换成不能取得类似的效果?详细解答,请阅读:RNN 中为什么要采用 tanh,而不是 ReLU 作为激活函数?
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/207295.html