1. 什么是激活函数 activation function
激活函数 是一种添加到ANN中的函数,它决定了最终要发射给下一个神经元的内容。
在人工神经网络中,一个节点的激活函数 定义了该节点在给定的输入或输入的集合下的 输出。
因此,激活函数是确定神经网络输出的数学方程式。
2. artificial neuron的工作原理
![640](https://i-blog.csdnimg.cn/blog_migrate/87a944c0c406df7edd00edebd5a0f93c.png)
上述过程的数学可视化如下图:
![640](https://i-blog.csdnimg.cn/blog_migrate/2c600cbdaea189c08884ebbc25069d5e.png)
可以看到,每个输入x都有相对应的权值w,相乘后求和,然后加上偏置bias。最后根据激活函数,来决定输出。
3. 10种激活函数
1. Sigmoid激活函数
sigmoid的函数图像看起来像s型的曲线,sigmoid的意思 也有s型的。
函数图像:
![640](https://i-blog.csdnimg.cn/blog_migrate/94097adf4303d767a3a244e8602b46ac.png)
函数表达式:
![640](https://i-blog.csdnimg.cn/blog_migrate/8c00b0aee7b082f58560ebfbadf9a1da.png)
适合使用sigmoid激活函数的情况:
- 由于sigmoid函数的输出范围是0-1,所以它对每个神经元的输出都进行了归一化。
- 用于将预测概率作为输出的模型。因为概率的值就是0-1,所以非常合适。
- sigmoid函数梯度平滑,避免跳跃的输出值。
- 函数是可微的。
- 明确的预测,即非常接近1或0。
sigmoid函数的缺点:
-
倾向于梯度消失
补充:梯度不稳定
概念:在深度神经网络中的梯度是不稳定的,在靠近输入层的隐藏层中或消失或爆炸。这种不稳定性,才是深度神经网络中基于梯度学习的根本问题。
产生的根本原因:神经网络模型的层数过多,以及连乘效应。
具体内容见https://zhuanlan.zhihu.com/p/25631496
-
当x取值为负时,函数值趋近于0。换言之,函数输出不是以0为中心的,这会降低权重更新的效率。
-
sigmoid函数执行的是指数运算,计算机运行的速度比较慢。
2. Tanh/双曲正切激活函数
函数图像:
函数表达式:
![640](https://i-blog.csdnimg.cn/blog_migrate/b4f69604063f73c0e283270bb5bcf0df.png)
tanh是一个双曲正切函数,它的曲线和sigmoid的曲线相类似,但是相对于sigmoid函数有一些优势。下面是两个函数的图像对比图:
![640](https://i-blog.csdnimg.cn/blog_migrate/2a30e462833cc1e95195e2249717fe37.png)
tanh的优势:
- 首先,当输入较大或较小时,输出几乎是平滑的并且梯度较小,这不利于权重更新。二者的区别在于输出间隔,tanh的输出间隔是1,并且整个函数的输出以0为中心,比sigmoid函数要好。
- 在tanh中,负输入将被强映射为负,而零输入被映射为接近0。
注意,在一般的二元分类问题(在机器学习中,被认为是监督式学习)中,tanh函数用于隐藏层,而sigmoid函数用于输出层。但这个也不是固定的,具体情况具体对待。
3. ReLU激活函数
全称是Rectified Linear Unit,中文名字:修正线性单元。
函数图像:
![640](https://i-blog.csdnimg.cn/blog_migrate/a282ff0e78aadb395d550635ca8af7eb.png)
函数表达式:
![640](https://i-blog.csdnimg.cn/blog_migrate/deaf01db8a9ac2f2517b0c30f2c400c6.png)
ReLU函数是深度学习中比较流行的一个激活函数,相较于sigmoid和tanh,有以下优点:
-
当输入为正的时候,不存在梯度饱和问题。
刚才的sigmoid函数和tanh函数就会出现梯度饱和问题,当输入x逐渐变大的时候,输出趋近于同一值,变化很小,造成模型训练缓慢。
-
计算速度快。ReLU函数是线性关系,sigmoid和tanh是非线性,因此计算速度快得多。
也有缺点:
-
Dead ReLU问题。
当输入为负的时候,relu全为0,直接失效。当然在正向传播中,这不是问题,但是在反向传播过程中,如果输入为负,则梯度将完全为0。sigmoid和tanh也有相同的问题。
-
ReLU函数不是以0为中心的函数。
4. Leaky ReLU激活函数
该激活函数是专门设计用来解决Dead ReLU问题的激活函数。
下面是两者的对比图:
![640](https://i-blog.csdnimg.cn/blog_migrate/e6e0e9440f249303dafdaeecd2853ec2.png)
函数表达式:
![640](https://i-blog.csdnimg.cn/blog_migrate/97656bc47cc5cad7032cec3a0416dd30.png)
为什么leaky relu比relu更好呢?
- Leaky ReLU 通过把 x 的非常小的线性分量给予负输入(0.01x)来调整负值的零梯度(zero gradients)问题
- leak可以扩大relu的范围,通常a的值为0.01左右
- leaky relu函数的范围是负无穷 - 正无穷
5. ELU激活函数
ELU的英文全称是“Exponential Linear Units”,中文全称是“指数线性单元”。
看一下ELU、Leaky ReLU、ReLU三者的函数图像:
ELU的出现也解决了ReLU的问题。
与ReLU相比,ELU有负值,这会使激活的平均值接近0。均值接近0可以使学习更快,因为它们使梯度更接近自然梯度。
函数表达式:
![640](https://i-blog.csdnimg.cn/blog_migrate/4572a5f4ec3545c45a71c92397480a9e.png)
显然,ELU具有ReLU的所有优点,并且:
- 没有Dead ReLU问题,输出的平均值接近0,以0为中心。
- ELU通过减少偏置偏移的影响,使正常梯度更接近于单位自然梯度,从而使均值向0加速学习。
- ELU当x较小时,会饱和值一个负值,从而减少前向传播的变异和信息。
注意,有一个小问题是,ELU的计算量更大。与Leaky ReLU相似,尽管理论上比ReLU更好,但是目前的实践并没有充分的证据表示确实比ReLU好。
6. PReLU激活函数
全称:parametric ReLU
![640](https://i-blog.csdnimg.cn/blog_migrate/c954a136914f0507640dc8349c233eac.png)
主要特点就是这里的参数a是可变的,通常为0-1之间的数字,并且通常相对较小。
- 如果参数a = 0,则就是ReLU。
- 如果参数a > 0,则就是Leaky ReLU。
- 如果参数a是可学习的参数,则就是PReLU.
优点:
- 在负值域,PReLU的斜率较小,可以避免Dead ReLU问题。
- 与ELU相比,PReLU在负值域是线性运算。
7. Softmax激活函数
函数图像:
Softmax是用于多类分类问题的激活函数,在多类分类问题中,超过两个类标签则需要类成员关系。
对于长度为k的任意实向量,Softmax可以将其压缩为长度为k,值在(0,1)范围内,并且向量元素的总和为1的实向量。
![640](https://i-blog.csdnimg.cn/blog_migrate/083f2cfc9aca2ed6ea8ddc48488c3a88.png)
Softmax 与正常的 max 函数不同:max 函数仅输出最大值,但 Softmax 确保较小的值具有较小的概率,并且不会直接丢弃。我们可以认为它是 argmax 函数的概率版本或「soft」版本。
Softmax 函数的分母结合了原始输出值的所有因子,这意味着 Softmax 函数获得的各种概率彼此相关。
Softmax函数的缺点:
- 在零点不可微。
- 负输入的梯度为0,这说明:对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元!
8. Swish激活函数
函数图像:
![640](https://i-blog.csdnimg.cn/blog_migrate/2b52b67385a60d45a24c487b0e9df082.png)
函数表达式:y = x * sigmoid (x)
Swish 激活函数的主要优点如下:
- 「无界性」有助于防止慢速训练期间,梯度逐渐接近 0 并导致饱和;(同时,有界性也是有优势的,因为有界激活函数可以具有很强的正则化,并且较大的负输入问题也能解决);
- 导数恒 > 0;
- 平滑度在优化和泛化中起了重要作用。