机器学习中的 Softmax 激活函数是什么?

2025年2月28日 | 阅读 6 分钟

它已经成为一项如此革命性的技术,彻底改变了人们在从金融、医学到人工智能等广泛领域的各种问题上的处理方式。机器学习,狭义上讲,是对能够基于数据进行预测而无需显式编程的算法的研究。神经网络是机器学习方法的一个子集,它们模仿大脑的结构,能够捕获数据中复杂的模式和关系。神经网络由一系列相互连接的节点或神经元组成,这些节点或神经元通过管道或一系列转换来处理输入数据。神经网络中的每个层都代表着对输入应用某个数学函数,以便最终将其转换为另一个层可以使用的一种形式。这个过程有助于神经网络理解和建模复杂的模式,并产生高层次的预测。

激活函数是神经网络的关键组成部分,因为它们为模型增加了非线性。没有它们,神经网络将不仅仅是一个线性模型,只能理解和建模数据中可能存在的复杂关系。如果神经网络使用一种激活函数,该函数对输入数据应用非线性变换,那么它将能够学习数据中存在的各种模式。激活函数的类型直接影响网络性能,因为它决定了网络在训练过程中是否会收敛,以及它如何学习特征和泛化。首先,需要注意的是,在考虑神经网络学习过程中产生的动态时,ReLU、Tanh 和 Sigmoid 是基本的激活函数。它们会影响每个神经元的输出以及在反向传播期间计算的梯度,这对于在训练过程中更新网络的权重和偏差非常重要。

Softmax 激活函数

Softmax 是多类别分类问题的 Sigmoid 的推广。与用于二元分类并输出一个类概率的Sigmoid 相反,Softmax 在多类别设置中计算每个类的概率。Softmax 函数接收来自神经网络最后一层的原始分数(logits)向量,并将这些分数转换为多类别上的概率分布。

Softmax 函数通过对每个未处理的原始结果(例如神经网络或分类模型的最后一层输出)进行指数运算,然后对产生的指数值进行归一化来工作。归一化确保所有概率加起来等于 1,这意味着输出可以解释为属于每个类的概率。

Softmax 激活函数在多类别分类中的应用

Softmax 函数是机器学习中最重要的操作之一,尤其是在进行分类时;它接收神经网络的最终连续原始输出,并将它们转换为可理解的概率。当需要将一个输入归入众多类别中的一个时,这种转换变得至关重要。当神经网络执行分类时,它的最后一层通常会输出一个原始分数向量,通常称为 logits。这些 logits 代表了网络对每个类别的原始、无界预测。Softmax 函数将未处理的原始结果(例如神经网络或分类模型的最后一层输出)归一化为概率分布。

  • 指数运算:每个 logits 都进行指数运算,这使得所有输出值都为正,并且较大的 logits 具有不成比例地更高的值。
  • 归一化:然后将指数化的 logits 除以它们的总和,从而确保结果值加起来等于 1,因此形成一个有效的概率分布。

输出解释

处理 Softmax 函数的一个优点是,它的输出是一组针对每个类别的定义良好且可解释的概率。事实上,这种类型的输出在分类任务的决策制定中尤其有用。以下是概率的解释方式:

  • 类别预测:网络通常选择具有最高概率的类别作为预测。例如,Softmax 为三个类别输出的概率是 [0.7, 0.2, 0.1]。它选择的预测类别是 0.7。
  • 置信度水平:概率的大小也表明了网络对其估计的置信度。概率越高,置信度越大,反之亦然。这对于需要考虑置信度水平的应用也很有用,例如诊断医学或自动驾驶。
  • 多类别决策制定:当存在多个相关类别,或者决策基于阈值时(换句话说,一个概率高于某个阈值代表一个正类),Softmax 输出可以用于基于这些概率阈值驱动此类决策。

Softmax 激活函数的优点

虽然在机器学习计算中,Softmax 激活函数提供了很多优势,但这里列出其中一些:

  • 可微分性:它为梯度计算提供了计算,这些梯度用于更新模型参数,这对于有效训练至关重要。
  • 处理多类别:Softmax 特别擅长处理多类别分类任务,在这些任务中,每个输入都应该属于一个或多个类别。它通过其概率框架处理多类别输出带来的复杂性。
  • 概率输出:Softmax 函数的一个主要亮点是它能够将原始模型的输出转换为一个良好归一化的概率分布。这种转换在分类任务中非常有用,因为了解每个类别的可能性至关重要。

Softmax 激活函数的缺点

尽管它提供了相当多的优势,但它也存在一些缺点,这里列出其中一些:

  • 计算复杂度:Softmax 虽然功能强大,但存在一定的计算开销,尤其是在类别数量很多的情况下。
  • 受异常值影响:它倾向于对可能位于正常范围之外的值更敏感。这会导致它产生不正确和不稳定的输出。
  • 输出中的假设:Softmax 函数中有一个隐含的假设,即所有类别都是互斥的,而这可能并不适用于所有问题。

Softmax 激活函数的实现

它是几乎所有神经网络模型中以某种方式存在的基本构建块之一。它在 Pyttorch 和 Tensorflow 等主要机器学习模块中得到了支持。将使用这些工具中的每一种来实现 Softmax 函数,如下所示:

TensorFlow

在 TensorFlow 中,您可以使用 `tf.keras.layers.Softmax` 类轻松集成到您的模型中。现在,例如。

在模型定义中,一个密集层后面跟着一个 Softmax 层;因此,这进一步将原始 logits 转换为概率分布。

Adam Optimizer 编译了模型。即使存在多类别分类的情况,我们也使用了稀疏分类交叉熵损失。对于预测,该模型会输出一个包含 10 个不同类别的概率分布,表示网络对每个类别的置信度。

PyTorch

PyTorch 中的 Softmax 通常与 `torch.nn.Module` 类一起使用。以下是一个简单的例子:

模型定义了一个完全连接层,并在 `forward` 方法中应用了 Softmax 激活函数。最后,在 `forward` 方法中,Softmax 的应用通过规定的维度 `dim = 1` 进行,这对于将 logits 转换为分类任务的概率是必需的。因此,模型的输出将是一个包含类别概率的张量,反映了网络对给定结果的每个类别的看法。


下一主题回归分析