深度学习中各激活函数的优缺点

转自:https://blog.csdn.net/NOT_GUY/article/details/78749509

在深度学习中,信号从一个神经元传入到下一层神经元之前是通过线性叠加来计算的,而进入下一层神经元需要经过非线性的激活函数,继续往下传递,如此循环下去。由于这些非线性函数的反复叠加,才使得神经网络有足够的capacity来抓取复杂的特征。

为什么要使用非线性激活函数?

答:如果不使用激活函数,这种情况下每一层输出都是上一层输入的线性函数。无论神经网络有多少层,输出都是输入的线性函数,这样就和只有一个隐藏层的效果是一样的。这种情况相当于多层感知机(MLP)。

 

1、Sigmoid函数

优点:(1)便于求导的平滑函数;

    (2)能压缩数据,保证数据幅度不会有问题;

    (3)适合用于前向传播。

缺点:(1)容易出现梯度消失(gradient  vanishing)的现象:当激活函数接近饱和区时,变化太缓慢,导数接近0,根据后向传递的数学依据是微积分求导的链式法则,当前导数需要之前各层导数的乘积,几个比较小的数相乘,导数结果很接近0,从而无法完成深层网络的训练。

    (2)Sigmoid的输出不是0均值(zero-centered)的:这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响。以 f=sigmoid(wx+b)为例, 假设输入均为正数(或负数),那么对w的导数总是正数(或负数),这样在反向传播过程中要么都往正方向更新,要么都往负方向更新,导致有一种捆绑效果,使得收敛缓慢。

    (3)幂运算相对耗时

 

2、tanh函数

tanh函数将输入值压缩到 -1~1 的范围,因此它是0均值的,解决了Sigmoid函数的非zero-centered问题,但是它也存在梯度消失和幂运算的问题。

其实 tanh(x)=2sigmoid(2x)-1

 

3、ReLU函数:全区间不可导

优点:(1)SGD算法的收敛速度比 sigmoid 和 tanh 快;(梯度不会饱和,解决了梯度消失问题)

    (2)计算复杂度低,不需要进行指数运算;

    (3)适合用于后向传播。

缺点:(1)ReLU的输出不是zero-centered;

    (2)Dead  ReLU  Problem(神经元坏死现象):某些神经元可能永远不会被激活,导致相应参数永远不会被更新(在负数部分,梯度为0)。产生这种现象的两个原因:参数初始化问题;learning  rate太高导致在训练过程中参数更新太大。 解决方法:采用Xavier初始化方法,以及避免将learning  rate设置太大或使用adagrad等自动调节learning  rate的算法。

    (3)ReLU不会对数据做幅度压缩,所以数据的幅度会随着模型层数的增加不断扩张。

 

4、Leakly  ReLU函数

用来解决ReLU带来的神经元坏死的问题,可以将0.01设置成一个变量a,其中a由后向传播学出来。但是其表现并不一定比ReLU好。

 

5、ELU函数(指数线性函数)

ELU有ReLU的所有优点,并且不会有 Dead  ReLU问题,输出的均值接近0(zero-centered)。但是计算量大,其表现并不一定比ReLU好。。

### 不同激活函数深度学习中的优缺点 #### Sigmoid 激活函数 Sigmoid 函数是一个经典的激活函数,其输出范围为 (0, 1),能够将任意实数值映射到这个区间内。然而,它存在梯度消失的问题,在反向传播过程中可能导致训练困难。 - **优点**: 输出值被压缩至固定范围内,适合用于概率预测场景下的二分类问题[^1]。 - **缺点**: 当输入较大或较小时,导数接近于零,容易引发梯度消失现象;计算指数运算较为耗时[^2]。 #### Tanh 激活函数 Tanh 是另一个常用的激活函数,可以看作是 Sigmoid 的变体,输出范围为 (-1, 1)。相比 Sigmoid,它的均值更接近于零,有助于中心化数据分布。 - **优点**: 能够更好地处理负值输入,并且通常收敛速度比 Sigmoid 更快[^3]。 - **缺点**: 同样面临梯度消失问题,尤其是在极端输入条件下表现不佳。 #### ReLU (Rectified Linear Unit) 激活函数 ReLU 定义简单直观:f(x) = max(0, x)。它是目前许多神经网络架构中最受欢迎的选择之一。 - **优点**: 计算效率高,因为只需判断输入是否大于零即可完成前向传播;有效缓解了梯度消失问题,促进了深层网络的学习能力。 - **缺点**: 对于小于零的部分会完全抑制信号传递,可能造成部分神经元“死亡”,即永远不再响应任何输入。 #### Leaky ReLU 激活函数 为了克服标准 ReLU 存在的死区问题,提出了改进版本——Leaky ReLU。该方法允许少量负斜率通过,即使当输入为负时也有微弱反应。 - **优点**: 避免了传统 ReLU 中可能出现的大规模神经元失活情况,保留了一定程度上的非线性特性。 - **缺点**: 参数调整敏感性强,如果设置不当可能会引入额外噪声或者影响最终性能。 #### ReLU6 激活函数 这是专门为移动设备优化设计的一种特殊形式的ReLU ,主要用于轻量级模型如MobileNet系列中 。ReLU6 将最大输出限定为6而不是无限大。 - **优点**: 特别适用于资源受限环境下的高效实现,同时保持良好的表达力。 - **缺点**: 可能限制某些特定应用场景下潜在的表现上限,特别是在需要非常宽泛动态范围表示的任务里。 ```python import numpy as np def sigmoid(x): return 1 / (1 + np.exp(-x)) def tanh(x): return np.tanh(x) def relu(x): return np.maximum(0, x) def leaky_relu(x, alpha=0.01): return np.where(x >= 0, x, alpha * x) def relu6(x): return np.minimum(np.maximum(0, x), 6) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值