什么是激活函数?
什么是激活函数?
就是在人工神经网络的神经元上运行的函数,引入激活函数是为了增加神经网络模型的非线性,将非线性特性引入到神经网络中。
为什么要用激活函数
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,这种情况就是最原始的感知机(Perceptron)。线性函数能够实现的功能非常有限。
激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
常用的激活函数有什么
sigmoid
函数公式和微分式如下:
优点
易理解,目前不常使用。它把一个实数(输入的连续实值)压缩到0到1之间,当输入的数字非常大的时候,结果会接近1,当输入非常大的负数时,则会得到接近0的结果。(0:几乎没有被激活;1:完全被激活)。
缺点
就会产生梯度消失(梯度为零,神经元权重不再更新,神经元“死亡”)和梯度爆炸的问题,sigmoid函数可用在网络最后一层,作为输出层进行二分类,尽量不要使用在隐藏层。
tanh
函数公式和微分式如下:
优点
进一步弥补了sigmoid的缺点,首先是均值为零,另外可以更快的收敛且可以缓解梯度消失和爆炸的问题。
缺点
仍然有梯度消失和爆炸的问题,在二分类上可能sigmoid更占优势。
ReLU(Rectified Linear Unit)
ReLU函数公式和导函数分别为:
优点
- 在正区间上,解决了梯度消失的问题;
- 计算迅速,线性关系,只需要计算是否大于零,不存在指数求导等操作;
- 收敛速度快
缺点
- ReLU输出不是零平均(以零为中心)
- 由于负数部分恒为零,会导致一些神经元无法激活
- 非常不幸的参数初始化,这种情况比较少见
- learning rate 太高,导致在训练过程中参数更新太大,不幸使网络进入这种状态。
Leaky ReLU
Leaky ReLU 是给所有负值赋予一个非零斜率。是对ReLU函数的一个改进。
函数公式和微分公式为:
人们为了解决 Dead ReLU Problem,提出了将 ReLU 的前半段设为 ax 而非0,通常 a = 0.01.理论上来说,Leaky ReLU 有ReLU的所有优点,外加不会有 Dead ReLU 问题,但是在实际操作当中,并没有完全证明 Leaky ReLU 总是好于 ReLU,它的优缺点和ReLU类似。
Softmax
Softmax函数将一个实值向量转换为概率分布。常用在最后一层,用作多分类任务。
函数公式如下:
优点
- Softmax输出的每个元素值都在(0, 1)范围内,并且它们的和是1。这使得其成为一个很好的概率解释器。
*它在多分类问题中是非常有用的,尤其是当我们想要得到输入属于每个类别的概率时。
如何选择适合的激活函数
一般我们可以这样:
- 首先尝试ReLU,速度快,但是要注意训练的状态(如果是使用 ReLU,那么一定要小心设置learning rate)
- 如果ReLU效果欠佳,尝试Leaky ReLU 或者 Maxout 等变种(总体上来讲,训练深度学习网络尽量使用 zero-centered 数据(可以经过数据预处理实现)和 zero-centered输出。所以要尽量选择输出具有 zero-centered 特点的激活函数以加快模型的收敛速度。)
- 尝试 tanh正切函数(以零为中心,零点处梯度为1)
- Sigmoid tanh 在RMM(LSTM 注意力机制等)结构中有所应用,作为门控或者概率值
- 在浅层神经网络中,如不超过四层,可选择使用多种激励函数,没有太大的影响
参考来源:https://www.cnblogs.com/wj-1314/p/12015278.html