目录
激活函数
0、激活函数的作用与性质
0.1 激活函数的作用
仅用线性激活函数(y = x)的多层网络会与相当于单层线性网络,加入非线性激励函数后,神经网络就会学习到平滑的曲线来分割平面,而不是用复杂的线性组合逼近平滑曲线来分割平面,使神经网络的表示能力更强了,能够更好的拟合目标函数;它能通过限定数据的值域避免梯度爆炸,而且能加快神经网络的收敛速度。
0.2 激活函数的性质
1、非线性:主要因为线性激活函数(y = x)的多层网络会与相当于单层线性网络,对于解决复杂的非线性问题时,没有意义。当激活函数是非线性的,一个神经网络就可以基本上逼近所有的函数 。
2、可导性:现有BP算法是基于链式法则而成的,不可导则无法更新梯度。
3、输出值的范围:当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况下,一般需要更小的 学习率。现在较优秀的激活函数,当x≥0时,(这里的“ ≈ ”表趋于);当x靠近于0时, ,因为当一个神经网络快要训练完成后,权重分布是靠近于x=0的,此时需要较小的梯度稳定的训练网络;当x<0时, 和 。
1 Sigmoid和tanh激活函数
1.1 Sigmoid激活函数
- 公式
- 函数图像
- 优缺点
优点:值域为(0,1)。在隐藏层中可压缩数据加快模型训练;可以作用在输出层限定网络的输出范围。
缺点:由于|x| >= 6 时,图像平行于x轴,梯度接近于0,在反向传播时易出现梯度消失的问题。
1.2 tanh激活函数
- 公式
- 函数图像
- 优缺点
优点:值域为(-1,1)。同Sigmoid激活函数,加入至隐藏层可压缩网络输出;加入至输出层可以限定网络的输出范围;但比Sigmoid的更有优秀,一阶导数的取值范围更大、图像关于y轴对称更易网络训练(如下图)。
缺点:由于|x| >= 2 时,图像平行于x轴,梯度接近于0,在反向传播时会导致梯度消失的问题。
2 ReLU系列激活函数
2.1 ReLU激活函数
- 公式
- 函数图像
- 优缺点
优点:值域为[0, )。加入至隐藏层可缓解梯度消失。
缺点:由于x <= 0 时,y=0,直接会使特征变为0,梯度为0,在深层次网络中反向传播时会导致梯度消失的问题。
2.2 PReLU激活函数
- 公式
- 函数图像
- 优缺点
优点:值域为(, )。加入至隐藏层可缓解梯度消失。参数a是可学习的,若参数a≠0,则x的负半轴是可以保留特征的;若参数a=0 则等同于ReLU。
2.3 LeakReLU激活函数
- 公式
- 函数图像
- 优缺点
优点:给予了一个较小的斜率,弥补了ReLU直接丢失特征的缺点,但在实际使用中和ReLU没有区别。
2.4 ReLU系列函数缺点
只有一阶可导,二阶及更高阶不可导,使得使用ReLU系列函数激活的网络在解决复杂的问题时,需要将网络设计的更深才能满足非线性的需求。
3 Swish与Mish激活函数
3.1 Swish激活函数
- 公式
- 函数图像
- 优缺点:
优点:更改了ReLU函数高阶不可导的问题,使得网络可以设计的更轻巧。保留ReLU系列当x>0时梯度较大的优点,使得学习速度比Sigmoid函数快。修改了Sigmoid函数的饱和性,使的梯度消失的可能性大大降低。还有Swish函数在x=0处梯度较为平缓,因为当一个网络快要训练好的时候,梯度会集中分布在0左右,这时梯度较小就有利于网络的训练趋于稳定。
缺点:Sigmoid函数中含有e^(x)函数,使得比ReLU计算量更大、更慢。
3.2 Mish激活函数
- 公式
- 函数图像
- 优缺点
优点:同Swish优点,但比Swish更好,因为tanh函数梯度区间更大,关于y轴对称。
缺点:同Swish缺点,计算量大。
3.3 Hard-Swish激活函数
- 公式
- 函数图像
- 优缺点
优点:计算简单速度快,比较适用于嵌入式设备等。梯度曲线同Swish很像,具有Swish的部分优点,如保留ReLU系列当x>0时梯度较大的优点,使得学习速度比Sigmoid函数快;修改了Sigmoid函数的饱和性,使的梯度消失的可能性大大降低。。
缺点:高阶不可导。
- 其他——paddle内的计算公式与函数
公式 :
代码:
paddle.fluid.layers.hard_swish(x, threshold=6.0, scale=6.0, offset=3.0, name=None)
参数:
- x (Variable) - 输入特征,多维Tensor。数据类型为float32或float64。
- threshold (float,可选) - 激活操作中Relu函数的阈值,默认值为6.0。
- scale (float,可选) - 激活操作的缩放因子,默认值为6.0。
- offset (float,可选) - 激活操作的位移,默认值为3.0
4 线性激活函数
- 公式
- 函数图像
- 应用场景
在部分目标检测网络结构中做Concat时,为保留低层次特征完整性,不使用非线性激活函数进行激活。如YOLOv4中的CSP模块中的Concat则没有使用非线性激活,下图中红框中的DBM块:
上图来自:【博客 —— YOLO系列网络结构图(YOLOv5,YOLOv4,PPYOLO,YOLOv3等)】
5 总结
YOLOV4的CSPDarkNet结构在浅层时全部使用了Swish函数进行激活,在深层时使用了LeakReLU进行激活,推荐在设计网络时仿照这是种使用方法。
6 其他资料
更新日志:
2020/11/7 --- 更新LeakReLU 以及mish激活函数等
2020/11/14 --- 更新部分解释以及线性激活函数
2020/12/12 --- 更新Hard-Swish激活函数
作者:阳一子
本文地址:https://blog.csdn.net/qq_279033270/article/details/108594323