激活函数是神经网络中的关键组成部分,它决定了网络中的神经元是否应被激活。这是通过将神经元的输入值转化为输出值来完成的。以下是一些常见的激活函数,包括线性,sigmoid、tanh、relu、leaky relu、softmax,包括它们的原理、优缺点、应用场景,以及相应的Python代码和绘制函数图像的方法:1. 线性激活函数(Identity)公式:f(x) = x优点:简单,易于理解和计算。线性激活函数是可微分的,这使得基于梯度的优化方法如梯度下降法可以很好地运行。缺点:线性激活函数不能很好地捕获复杂的数据模式,因为所有层都是线性的,所以无论你堆叠多少层,最后的输出仍然是输入的线性组合,这限制了模型的表达能力。不能处理复杂的非线性问题,对于深度神经网络并不适用。应用场景:可用于解决线性回归问题。通常用于回归问题的输出层,例如预测房价、股票价格等连续值。2. Sigmoid激活函数原理:f(x) = 1 / (1 + exp(-x)) Sigmoid函数将任何输入压缩到0和1之间。优点:输出在(0,1)之间,适合处理二元分类问题,可以理解为概率输出。缺点:应用场景:Sigmoid函数主要用于二元分类问题的输出层,因为其输出可以解释为概率。例如,预测一个邮件是否为垃圾邮件,输出为1可以解释为垃圾邮件,输出为0可以解释为非垃圾邮件。3. Tanh激活函数原理:f(x) = (exp(x) - exp(-x)) / (exp(x) + exp(-x)) Tanh函数将任何输入压缩到-1和1之间。优点:相比Sigmoid函数,Tanh函数的输出是以0为中心的,这使得后续层的神经元的输入更有可能同时包含正值和负值,这有助于模型的训练。缺点:同样容易出现梯度消失问题,当输入值很大或很小的时候,Tanh函数的梯度接近于0,这会导致在这些区域的参数更新非常慢,这就是所谓的梯度消失问题。应用场景:Tanh函数通常用于隐藏层,因为其输出范围是-1到1,比Sigmoid函数的输出范围更大,能够更好地处理输入数据的负值。例如,在处理自然语言处理问题中,Tanh函数常被用作循环神经网络(RNN)中的激活函数。输出层不适用。4. ReLU激活函数(Rectified Linear Unit)原理:f(x) = max(0, x) ReLU函数在输入大于0时直接输出该值,在输入小于0时输出0。优点:简单,计算效率高。在输入大于0的区域,不存在梯度消失问题,这使得训练过程更快。缺点:死神经元"问题。当输入为负数时,ReLU函数的输出为0,而且这些神经元的梯度也为0,这意味着在训练过程中这些神经元将不会有任何更新,我们称这些神经元为"死神经元"。应用场景:ReLU函数是目前最常用的激活函数,它在处理图像识别、语音识别等深度学习问题中表现出色。例如,卷积神经网络(CNN)和全连接网络(FCN)中大量使用ReLU函数作为激活函数。5. Leaky ReLU激活函数原理:f(x) = max(0.01x, x) Leaky ReLU函数在输入大于0时直接输出该值,在输入小于0时输出0.01倍的该值。优点:通过允许小的负值通过,解决了ReLU函数的"死神经元"问题。缺点:参数固定,没有自适应能力,不同的问题可能需要不同的小负斜率。应用场景:Leaky ReLU函数主要用于解决ReLU函数的"死神经元"问题,它在处理各种深度学习问题中都可以使用。例如,卷积神经网络(CNN)中大量使用Leaky ReLU函数作为激活函数。6. Softmax激活函数原理:它将一组数值转换为概率分布,即所有输出的和为1,并且每个输出都在0和1之间。给定一个实数向量[公式] ,Softmax函数的输出为一个概率分布 [公式] ,其中每个元素[公式] 的计算公式为:[公式] 这里,[公式] 表示 [公式] 的自然指数, [公式] 是对所有 [公式] 的自然指数求和。可以看到,Softmax函数的输出满足以下两个条件:因此,Softmax函数的输出可以看作是一个概率分布,非常适合用于多分类问题的输出层。优点:输出的解释性强,每个类别的概率之和为1,适合多分类问题。缺点:对于大的输入值,可能会出现数值不稳定的问题,例如,输入值很大时,会导致exp(xi)计算结果非常大,可能超出数值表示范围,造成数值溢出问题。应用场景:Softmax函数通常用于多分类问题的输出层,它能够将神经元的输出转化为概率分布。例如,在图像识别问题中,假设有10个类别,我们希望知道一个图像属于每个类别的概率,就可以在最后一层使用Softmax函数。总结在实践中,ReLU和其变体在大多数情况下表现都很好,而Sigmoid和Tanh则常常用于特定的场景,例如二分类问题和需要输出范围在(-1,1)的问题。Softmax函数通常用于多分类问题的输出层。