一,什么是激活函数?
激活函数(Activation Function)是一种在人工神经网络中使用的函数,其主要目的是引入非线性特性,使得神经网络可以学习和理解复杂、非线性的模式和数据。一个节点的激活函数定义了该节点在给定的输入或输入集合下的输出。在神经元中,输入的inputs通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。
二,为什么要使用激活函数?
1.引入非线性:激活函数通过非线性变换,打破了神经网络仅由线性层组成的结构,使得网络可以学习到非线性的复杂模式。如果没有非线性变换,多层网络将无法提供比单层网络更强大的表达能力。
2.解决线性不可分问题:许多实际问题是非线性的,线性模型无法很好地拟合这些数据。通过使用激活函数,神经网络可以捕捉数据中的非线性特征,从而更好地处理线性不可分的问题。
3.增加网络的表示能力:激活函数通过引入非线性,扩展了神经网络的表示能力。神经网络可以通过组合不同的激活函数来表示更加复杂的函数关系,从而提高对输入数据的建模能力。
4.梯度传播:激活函数的导数对于反向传播算法中的梯度计算和参数更新非常重要。良好的激活函数设计可以保证梯度能够有效地传播,避免梯度消失或梯度爆炸的问题
三,常用的激活函数和定义
1.Sigmoid函数:将输入映射到0和1之间。它的定义是:f(x) = 1 / (1 + e^(-x))。
2.Tanh函数:将输入映射到-1和1之间。它的定义是:f(x) = (e^x - e^-x) / (e^x + e^-x)。
3.ReLU函数:将输入映射到0和输入值之间。它的定义是:f(x) = max(0, x)。
4.Leaky ReLU函数:是ReLU函数的变体,允许小的负数通过。它的定义是:f(x) = alpha * x if x < 0, f(x) = x if x >= 0。
5.Parametric ReLU函数:也是ReLU函数的变体,通过引入一个参数来控制负值的输出。它的定义是:f(x) = alpha * x if x < 0, f(x) = max(0, x) if x >= 0。
四,常用激活函数
1.Sigmoid函数将输入值映射到0到1的范围,常用于将神经网络的输出转换为概率分布。
适用于二分类问题,如判断一张图片是猫还是狗、判断一封邮件是否为垃圾邮件等。此外,Sigmoid函数的输出范围在0到1之间,可以将输入信号映射到一个概率值。
2.Tanh函数将输入值映射到-1到1的范围,与Sigmoid函数类似,但它输出范围更小。
3.ReLU函数是近年来非常流行的激活函数,当输入值大于0时,输出值等于输入值;当输入值小于或等于0时,输出值为0。ReLU函数的计算速度快,而且可以加速神经网络的训练。
适用于深度卷积神经网络(CNN)中,具有简单的计算方式和非线性特性。
4.Leaky ReLU是ReLU函数的一个变种,当输入值小于或等于0时,它不是完全将输出设置为0,而是设置一个小的正数作为输出。这样可以避免神经元“死亡”,即权重不再更新。
5.PReLU是另一个ReLU的变种,与Leaky ReLU类似,PReLU在输入值小于或等于0时设置一个小的正数作为输出。但与Leaky ReLU不同的是,PReLU的斜率可以作为一个参数进行学习,使得神经网络能够更好地适应不同的数据分布。
五,激活函数的优缺点
优点:
1.sigmoid 输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可用作输出层,求导容易。
2.Tanh 比sigmoid函数收敛速度更快。相比sigmoid函数,其输出以0为中心。
3.RELU 解决了梯度消失问题(在正区间);只需判断输入是否大于0,计算速度快;收敛速度远快于sigmoid和tanh,因为sigmoid和tanh涉及很多expensive的操作;提供了神经网络的稀疏表达能力。
缺点:
1.sigmoid 易造成梯度消失;输出非0均值,收敛慢;幂运算复杂,训练时间长。
2.tanh 易造成梯度消失;幂运算复杂,训练时间长。
3.RELU 输出非0均值,收敛慢;Dead ReLU问题:某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。