摘要:在机器学习和深度学习领域,激活函数在神经网络做出复杂决策和预测的能力中起着关键作用。其中,softmax激活函数尤为突出,特别是在结果相互排斥的分类任务中。。
在机器学习和深度学习领域,激活函数在神经网络做出复杂决策和预测的能力中起着关键作用。其中,softmax激活函数尤为突出,特别是在结果相互排斥的分类任务中。。
softmax 函数通常用于神经网络模型的最后一层,用于分类任务,它通过获取每个输出的指数并通过除以所有指数的总和来归一化这些值,将原始输出分数(也称为对数)转换为概率。此过程确保输出值在 (0,1) 范围内,总和为 1,使其可解释为概率。
softmax 函数的数学表达式如下:
这里,zi 表示类 i 的 softmax 函数的输入,分母是输出层中所有原始类分数的指数之和。
想象一下,一个神经网络的任务是对手写数字的图像进行分类 (0-9)。最后一层可能会输出一个包含 10 个数字的向量,每个数字对应一个数字。但是,这些数字并不直接代表概率。softmax 函数介入,将此向量转换为每个数字(类)的概率分布。
以下是 softmax 如何实现这一魔力:
输入:softmax 函数采用实数的向量 z,表示神经网络最后一层的输出。幂:z 中的每个元素都使用数学常数 e(大约 2.718)进行幂。这可确保所有值都变为正数。归一化:然后将幂值除以所有幂值的总和。此归一化步骤保证输出值总和为 1,这是概率分布的关键属性。softmax 函数的属性:
Softmax 主要用于多类分类问题。从图像识别和自然语言处理 (NLP) 到推荐系统,它高效处理多个类的能力使其不可或缺。例如,在预测水果类型的神经网络模型中,softmax将帮助确定图像是苹果、橙子或香蕉的概率,确保这些概率的总和等于1。
在 Python 中,我们可以按如下方式实现 Softmax:
from math import expdef softmax(input_vector): # Calculate the exponent of each element in the input vector exponents = [exp(i) for i in input_vector] # Correct: divide the exponent of each value by the sum of the exponents # and round off to 3 decimal places sum_of_exponents = sum(exponents) probabilities = [round(exp(i) / sum_of_exponents, 3) for i in exponents] return probabilitiesprint(softmax([3.2, 1.3, 0.2, 0.8]))与 sigmoid 或 ReLU(整流线性单元)等函数不同,这些函数用于隐藏层进行二元分类或非线性变换,softmax 特别适用于多类场景中的输出层。虽然 sigmoid 将输出压缩在 0 到 1 之间,但它并不能确保输出的总和为 1,这使得 softmax 更适合概率。ReLU以解决消失梯度问题而闻名,它不提供概率,突出了softmax在分类上下文中的作用。
Softmax 在多类分类问题中大放异彩,其中输入可以属于多个离散类别之一。以下是一些真实世界的例子:
图像识别。对物体、动物或场景的图像进行分类,其中每个图像可以属于特定类别(例如,猫、狗、汽车)。垃圾邮件检测。将电子邮件分类为垃圾邮件或非垃圾邮件。情绪分析。将文本分为积极、消极或中性情绪等类别。在这些场景中,softmax 函数提供对网络预测的概率解释。例如,在图像识别中,softmax 输出可能指示图像是猫的概率为 70%,而图像是狗的概率为 30%。
概率分布。Softmax为每个类提供了一个明确定义的概率分布,使我们能够评估网络对其预测的信心。可解释性。与原始输出值相比,概率更易于理解和交流。这样可以更好地评估和调试神经网络。数值稳定性。softmax函数具有良好的数值稳定性,可以有效地训练神经网络。来源:自由坦荡的湖泊AI一点号