1、激活函数
激活函数是神经网络中输出值处理的一个函数。通过激活函数,神经网络能训练更为复杂的数据。
上图所示为神经网络的一个神经元,若没有经过激活函数的处理,则神经网络只能训练线性关系的数据,若使用激活函数处理,则可以根据激活函数的不同训练不同类型的数据。
激活函数分为两种类型:线性激活函数和非线性激活函数,神经网络使用的激活函数一般都是非线性激活函数。因为非线性激活函数能帮助神经网络训练复杂数据,计算和学习几乎表达问题的任何函数并提供精准的预测。同时他们具有导数可以反向传播。
2、常用激活函数
- Sigmoid函数
Sigmoid函数是非线性函数,其输出值在区间(0,1)。函数表达式: - Sigmoid函数优点:
1、简单、非常适用分类任务;
Sigmoid函数缺点:
1、反向传播训练时有梯度消失的问题;
2、输出值区间为(0,1),不关于0对称;
3、梯度更新在不同方向走得太远,使得优化难度增大,训练耗时; - Tanh函数
Tanh函数是非线性函数,其输出值在区间[-1,1]。函数表达式: - Tanh函数优点:
1、解决了Sigmoid函数输出值非0对称的问题
2、训练比Sigmoid函数快,更容易收敛;
Tanh函数缺点:
1、反向传播训练时有梯度消失的问题;
Tanh函数和Sigmoid函数非常相似。 - ReLU函数
ReLU函数是目前在神经网络使用最流行的激活函数。其表达式非常简单: - ReLU函数优点:
1、解决了梯度消失的问题;
2、计算更为简单,没有Sigmoid函数和Tanh函数的指数运算;
3、稀疏性激活
ReLU函数缺点:
1、训练时可能出现神经元死亡; - Leaky ReLU函数
LReLU函数是ReLU函数的变体。其表达式: - LReLU函数优点:
1、解决了ReLU的神经元死亡问题;
LReLU函数缺点:
1、无法为正负输入值提供一致的关系预测(不同区间函数不同) - SoftMax激活函数
SoftMax函数通常被用在多分类网络模型中。其表达式: - 把结果映射到[0,1],且所有结果的值之和为1。
- ELU(Exponential Linear Unit)激活函数
没有梯度消失和爆炸的问题,同时也没有神经元死亡的问题。被证明比ReLU及其变种好。 - 优点:
1、elu在所有点上都连续且可导。
2、比其他线性非饱和激活函数(如ReLU及其变种)训练速度快。
3、没有神经元死亡的问题,因为对于所有的点,其梯度都是非零的。
4、是一个非饱和函数,没有梯度消失和爆炸的问题。
5、对比其他的激活函数可以获得更高的准确率。
缺点:
1、由于非饱和函数涉及到负值输入,导致它的计算比ReLU函数慢。然而,在训练时由于elu激活函数的快速收敛,可以弥补这一缺点,但是在测试时则要比ReLU及其变种慢。
3、常见问题
Sigmoid、Tanh主要应用在二分类任务输出层、模型隐藏层
ReLU、Leaky ReLU主要应用在回归任务、卷积神经网络隐藏层
SoftMax主要应用在多分类任务输出层
- 为什么输出值要关于0对称?
由于权重更新公式:假设有两个权重且最优解满足条件这也就是说,我们希望 适当增大,但希望 适当减小。因此,在一次更新权重训练中,和的符号必须相反。对于Sigmoid函数输出值在[0,1]的这种非0对称输出其收敛就如同下图的红折线,直接导致模型的收敛速度。而使用Tanh这样的输出值关于0对称的激活函数,其和有正有负,模型的收敛就如同下图的绿线,达到快速收敛。 - 为什么Sigmoid和Tanh激活函数会导致梯度消失?
上一节我们知道,Sigmoid函数的导数值域为和Tanh函数的导数值域为。都小于1,从而导致模型的梯度消失。虽然说ReLU函数解决了梯度消失的问题,但是在ReLU函数的左侧导数是0,引起了另一个问题:神经元死亡。故出现了其变体Leaky ReLU和Parametric ReLU。 - ReLU函数稀疏性激活
注意:我们在这里讨论模型稀疏性。数据稀疏性(缺少信息)是不同的,通常是不好的。
为什么模型稀疏性好?如果我们考虑一下人工神经网络试图模仿的生物神经网络,这在直觉上是有意义的。尽管我们体内有数十亿个神经元,但并非所有时间都为我们所做的所有事情激发。相反,它们具有不同的作用,并由不同的信号激活。
稀疏性导致简洁的模型,这些模型通常具有更好的预测能力和更少的过拟合。在稀疏网络中,神经元更有可能实际上正在处理问题的有意义的方面。例如,在检测图像中猫的模型中,可能存在可以识别耳朵的神经元,如果图像是关于建筑物的,则显然不应激活该神经元。
最后,稀疏网络比密集网络更快,因为要计算的东西更少。