多种神经网络激活函数介绍及可视化
在神经网络的构建中,激活函数的作用是决定一个节点的输出,根据所给的输入集。在实践中,采用非线性激活函数可以使得神经网络可以模拟复杂的非线性行为。然而,为了使神经网络可以通过梯度下降进行优化,激活函数需要是可微分的(或者至少是几乎可微分的)。因此,在神经网络中使用复杂的激活函数有可能导致梯度消失或者梯度爆炸等问题。为了解决这些问题,神经网络通常会采用一些特定的激活函数,例如 identity、sigmoid、ReLU 及其变体。
下面是多个激活函数的图像以及它们的一阶导数,图像右侧是一些与神经网络相关的属性,同时我还补充了对这些激活函数的介绍。
1. Step
Step 函数是一种特殊的激活函数,它的输出是二值的,即 0 或 1。具体来说,当输入的数值大于等于阈值时,Step 函数的输出为 1,否则为 0。Step 函数最初是用于人工神经网络中,但在现代机器学习和深度学习中并不常用。这是因为 Step 函数是非连续的和不可导的,因此可能影响模型的性能。相比之下,常用的激活函数,如 Sigmoid 函数和 ReLU 函数,通常更加适合用于深度学习模型中。总的来说,Step 函数可能在一些特定的应用场景中有用,但并不是深度学习模型中的首选激活函数。
2. Identity
Identity 函数的定义为: f(x) = x,该函数输入和输出是相等的,所以没有任何非线性转换。同时,导数值始终为 1,因此对于反向传播算法来说,该激活函数不会对学习速率产生影响。它通常用于输出层,特别是在回归问题中,因为它不会对网络的输出产生影响。然而,在其他情况下,它可能不适用于隐藏层,因为它不能帮助网络学习非线性特征。
3. ReLU
ReLU(Rectified Linear Unit)是一种常用的人工神经网络激活函数。它的输出为:f(x) = max(0, x),其中 x 是输入,0 是阈值。这意味着如果输入是非负的,则输出与输入相同;如果输入是负的,则输出为 0。ReLU 函数的一个重要特征是它可以防止梯度消失问题,这是深层神经网络中常见的问题。因此,ReLU 函数在很多情况下都是首选激活函数。
不过,ReLU 函数还有一个缺点,就是存在“死神经元”的问题。如果输入为负,则输出永远为 0,这意味着该神经元不再对模型的预测结果产生贡献。为了避免这个问题,人们通常使用其他激活函数,例如 Leaky ReLU 和 Parametric ReLU,我将在下面进行介绍。
4. Sigmoid
Sigmoid 函数是一种广泛使用的激活函数,用于二分类任务,如预测某个样本是否为某个类别。它在深度学习模型中用于隐藏层的单元。Sigmoid 函数的数学表达式为:f(x) = 1 / (1 + exp(-x)),其中 exp(x) 是指以自然常数 e 为底的 x 次幂。
Sigmoid 函数的特点是它的输出值始终在 (0, 1) 之间,并且它是一个 S 形函数,对于所有输入值都是单调的,当输入值接近 0 时,函数的输出值接近 0.5,而当输入值越来越大或越来越小时,函数的输出值越来越接近 1 或 0。在人工神经网络中,Sigmoid 函数也会被应用于构建输出层,以实现二分类任务,如判断图片中是否存在某种物品。然而,对于多分类问题,通常使用Softmax函数代替Sigmoid函数,因为Softmax函数能够在多分类问题中生成概率分布。
5. Tanh
Tanh (hyperbolic tangent) 激活函数是一种常用的激活函数,它是对现有的 Sigmoid 激活函数的扩展,并且在隐藏层中使用得更广泛。Tanh 函数的输出值在-1到1之间,因此它能够更好地处理非线性关系。同样,Tanh 函数也具有非常好的导数特性,因此它在反向传播中的梯度很好地保持不变。总的来说,tanh 激活函数比 Sigmoid 函数更加广泛地使用,因为它对于非线性问题的适应性更好。
6. Leaky ReLU
Leaky ReLU(Leaky Rectified Linear Unit)是一种带有极小斜率的 ReLU 激活函数。与普通的 ReLU不 同,Leaky ReLU 允许负值,但是以极小的斜率进行非线性转换。
Leaky ReLU 公式如下:f(x) = max(αx, x),其中 α 是极小的常数,通常设置为 0.01。因此,当 x 为负数时,Leaky ReLU 函数的斜率为 α,而当 x 为正数时,Leaky ReLU 的斜率为1。
Leaky ReLU 的目的是防止梯度消失问题,并在某些情况下提高学习速度。在 ReLU 激活函数中,如果网络的某些权重导致负值的预测,则对该层的权重没有任何更新,并且这种情况可能在整个网络中扩散。但是,使用 Leaky ReLU 可以通过允许负值以极小的斜率传递信息来避免这种情况。
7. PReLU
PReLU (Parametric Rectified Linear Unit) 和 Leaky ReLU 有一些相似之处,但是也有一些不同。Leaky ReLU 具有固定的梯度值,如果激活函数的输入是负数,它将以比正数低得多的速度逼近零。因此,Leaky ReLU 可以防止梯度消失,但它可能难以获得最佳结果,因为它的梯度是固定的。PReLU 具有可学习的梯度值,这意味着每一层的梯度值都可以被训练网络的权重确定。这可以提供更大的灵活性,并使模型能够更快地找到最佳结果。总而言之,PReLU 和 Leaky ReLU 都是解决梯度消失问题的有效方法,但是 PReLU 更灵活,因为它具有可调整的梯度值。
8. RReLU
RReLU (Randomized ReLU) 是一种带有随机滑动边界的 ReLU 激活函数。与 PReLU 不同,RReLU 的负滑动边界是随机生成的,而不是预先设定的。每一次激活时 RReLU 函数的负滑动边界都有可能不同。
在训练过程中,RReLU 可以避免权重被卡在零的情况,因为滑动边界是随机的,网络不太可能发生任何卡住的情况。这使得 RReLU 能够有效抑制网络的欠拟合问题,并在训练过程中促进了模型的收敛。
9. ELU
Exponential Linear Unit (ELU) 激活函数是一种神经网络激活函数,它的公式如下:f(x) = x, for x >= 0;α * (exp(x) – 1), for x < 0,其中,α 是一个超参数,通常被设置为 1,但也可以调整。
ELU 激活函数的优点在于它的非线性性比 sigmoid 和 tanh 激活函数更强,可以加快神经网络的学习速度,并且在解决梯度消失和梯度爆炸问题方面比 Leaky ReLU 更加有效。另外,ELU 激活函数也具有抑制网络的稀疏性,这对于训练深层神经网络来说非常重要。然而,ELU 激活函数的缺点是它需要更多的计算代价,因为它需要在每个神经元上执行指数运算。因此,它通常不是用于大型神经网络中。
10. SoftPlus
作为 ReLU 的一个不错的替代选择,SoftPlus 能够返回任何大于 0 的值。与 ReLU 不同,SoftPlus 的导数是连续的、非零的,无处不在,从而防止出现静默神经元。然而,SoftPlus 另一个不同于 ReLU 的地方在于其不对称性,不以零为中心,这兴许会妨碍学习。此外,由于导数常常小于 1,也可能出现梯度消失的问题。
11. Log Log
Log Log 激活函数是一种少见的激活函数,与常见的激活函数(如 Sigmoid、ReLU 等)不同。Log Log 函数定义为: log(log(1 + e^x)),其中 e 为自然对数的底数。这个函数的形状与 Sigmoid 函数相似,但在某些方面更加平滑,导数值总是非负的。Log Log 函数用于分类任务(例如二分类或多分类),并且在某些情况下,它可以与其他常见的激活函数(如 Sigmoid 或 Softmax)相结合,以在神经网络中提高准确性和性能。然而,需要注意的是,Log Log 函数相对于其他常见的激活函数较为复杂,并且可能难以训练和优化,因此通常不是首选的激活函数。
12. Absolute
顾名思义,Absolute 激活函数返回输入的绝对值。该函数的导数除了零点外处处有定义,且导数的量值处处为 1。这种激活函数一定不会出现梯度爆炸或消失的情况。
以下是一些介绍神经网络激活函数的优秀网站:
- Coursera 上的 Neural Networks and Deep Learning 课程(https://www.coursera.org/courses/neural-networks-deep-learning)
- deeplearning.ai 上的 Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization 课程(https://www.deeplearning.ai/deep-learning-specialization/)
- 博客文章:A Comprehensive Guide to Activation Functions in Neural Networks(https://towardsdatascience.com/a-comprehensive-guide-to-activation-functions-in-neural-networks-3cdf8feb5baf)
- 官方文档:Keras 库的激活函数文档(https://keras.io/api/layers/activations/)
神经网络的激活函数:(https://towardsdatascience.com/ activation-functions-neural-networks-1cbd9f8d91d6)