解码Softmax:理解其在人工智能中的功能和影响
激活函数在神经网络(NN)中引入非线性,将原始输入转换为有意义的输出。没有非线性,神经网络就是一个线性回归模型,简单地将一个神经元的结果传递给另一个神经元。激活函数允许神经网络通过决定哪些神经元对决策至关重要并激活它们传递到下一层来学习复杂模式。
Softmax激活函数 最常见于神经网络的输出层。它对于多类分类很有帮助,因为它输出一个代表类可能性的概率向量。Softmax通过将原始输入转换为概率分布,弥补了神经网络原始输出与有意义的置信度分数之间的差距。这些概率或置信度分数使其成为现实世界机器学习问题中至关重要的激活函数。
本文将讨论Softmax激活函数,它的应用、挑战以及提高性能的技巧。
什么是Softmax? Softmax函数或归一化指数函数,是一种流行的多类分类激活函数。与其他如Sigmoid这样的激活函数限于单类用例不同,Softmax可以处理多个标签。Softmax将神经网络的对数几率或原始输出缩放成一个概率数组。在概率数组中,每个概率代表每个类标签存在的可能性,并且数组的总和为1。具有最高概率的类被神经网络选为最终预测。
Softmax激活函数的公式是:f(xi) = e^xi / Σj e^xj
其中:
x = 来自神经网络前一层的原始输出向量
i = 类别 i 的概率
e = 2.718
将对数几率缩放为总和为1的概率增强了模型预测的可解释性。这些概率可以被解释为置信度分数,强制执行一个决策,其中模型选择具有最高概率的类。
Softmax的可视化 考虑到数学公式,Softmax函数按照以下步骤将对数几率转换为概率:
计算原始向量中每个条目的指数,这表示神经网络的输出层向量。较高的分数在指数化后变得更加突出,而较低的分数进一步最小化,指示哪些分数被激活。
将每个条目的指数除以所有条目指数的总和。这将指数化值归一化为概率。
归一化后的值代表每个类的概率。这些被排列成一个向量,代表最终的Softmax输出。
在Python中实现Softmax激活 在Python中实现Softmax函数是直接的。让我们看看我们如何在TensorFlow和PyTorch中分别实现它:
TensorFlow中的Softmax激活函数 在TensorFlow中,实现Softmax激活就像定义输出层并使用Softmax激活一样简单:
上述代码片段定义了以下内容:
num_classes: 你数据集中的类别数量。
hidden_layer_output: 前一层的输出(在大多数情况下是最后的隐藏层)。
activation="softmax": 指定模型使用Softmax作为激活函数。
另外,TensorFlow中的nn.softmax函数允许更直接的控制:
其中:
logits: 最后隐藏层的输出。
axis=-1: 指定在最后一个维度应用Softmax。
PyTorch中的Softmax激活函数 类似于TensorFlow,PyTorch提供了一个Softmax函数,实现简单:
其中:
logits: 最后隐藏层的输出。
dim=1: 指定在最后一个维度应用Softmax。
也可以使用nn.Softmax函数在PyTorch中创建一个专门的Softmax层:
其中:
dim=1: 指定沿维度1应用Softmax。
Softmax在人工智能(AI)中的应用 Softmax是现实世界多类机器学习问题中流行的激活函数。其中一些包括:
图像分类 神经网络在图像分类中表现出色,分析并将图像归类为预定义的类别。Softmax函数在这个过程中发挥着至关重要的作用,根据其学习结果为每个类别分配概率。具有最高概率的类别被选为模型的最终输出。
例如,考虑一个在其最后一层使用Softmax的卷积神经网络(CNN)。任务是将图像分类为“猫”、“狗”和“兔子”。假设为每个类别分配的概率为[0.728, 0.268, 0.004]。在这种情况下,“猫”被赋予了最高的概率,因此它将是最终输出。
情感分析 Twitter情感分析是Softmax函数的一个著名应用。此外,最近出现了AI标题分析器,用于识别标题是积极的、消极的还是中性的。Softmax激活函数在幕后使这成为可能。
语音识别 AI聊天机器人必须准确地从预定义的选项中识别用户的单词,并据此制定响应。因此,模型分析输入音频并为每个可能的单词生成分数。然后,Softmax函数为每个选项分配概率。
挑战和最佳实践 事先考虑激活函数的挑战可以确保准确和高效的分类。采取预防措施将提高模型的准确性。虽然Softmax是多类分类的稳健激活函数,但它也有其局限性。然而,我们可以通过遵循最佳实践并确保高效性能来减轻这些局限性。
不平衡数据集 一个类的数量超过其他类的不平衡数据集会误导Softmax激活。这导致多数类获得更高的概率,即使情况并非如此。
最佳实践 从多数类中移除一些记录或通过过采样少数类来复制一些记录,从而实现平衡的数据集。重罚分类错误的成本函数可以促使模型学习少数类并实现准确的概率。
数值不稳定性 当对数几率很大时,它们的指数可能产生非常大的数字。相反,当对数几率非常小的时候,它们的指数可能接近零。这些可能导致溢出错误和不准确的概率分布,以及数值不稳定性。
最佳实践 将数据规范化到一致的规模可以防止数值不稳定性。Log-Softmax函数也可以用来缓解溢出错误的挑战。它通过计算Softmax输出的对数,将它们转换为较小的数字。
结论
由于其简单性和可解释性,Softmax激活函数被广泛使用。它通过为数据集中的每个类分配概率来指导准确的决策,使最高概率的类适合作为输出。
Softmax是AI分类中的基本构建块,使各种应用中可靠的决策成为可能。虽然存在最佳实践来应对任何工具的挑战,但总是存在权衡。理解其功能和最佳实践允许进行适当的权衡,并最大限度地利用它。
在现实世界的项目中使用它,并尝试其应用,以获得更深入的理解。
技术干货
LangChain 查询使用指「北」
LangChain 是一种 AI 代理工具,可以为以 ChatGPT 为代表的额大语言模型(LLM)增添更多功能。此外,LangChain 还具备 token 和上下文管理功能。本文主要通过查询 GPT 和查询文档两个示例介绍如何使用 LangChain。
2023-5-30技术干货
我决定给 ChatGPT 做个缓存层 >>> Hello GPTCache
我们从自己的开源项目 Milvus 和一顿没有任何目的午饭中分别获得了灵感,做出了 OSSChat、GPTCache。在这个过程中,我们也在不断接受「从 0 到 1」的考验。作为茫茫 AI 领域开发者和探索者中的一员,我很愿意与诸位分享这背后的故事、逻辑和设计思考,希望大家能避坑避雷、有所收获。
2023-4-14技术干货
Milvus Lite 已交卷!轻量版 Milvus,主打就是一个轻便、无负担
总体而言,无论用户是何种身份(研究人员、开发者或者数据科学家),Milvus Lite 都是一个不错的选择,尤其对于那些想要在受限的环境中使用 Milvus 功能的用户而言,更是如此。
2023-6-8