前言
在上一篇中我们使用逻辑回归OvR策略来解决多分类问题,本篇介绍一下使用Softmax回归模型来解决多分类问题,但由于Softmax回归模型涉及内容过多,本篇先从Softmax函数原理讲起。
原理理解
我们在线性回归中,很清晰地理解了实现过程:实现一个损失函数(用于计算当前计算结果和目标值的差距),再通过梯度下降来优化全局损失(所有训练对象的损失降到最低)。在Softmax回归模型中同样分成这两个步骤,先实现一个损失函数(Softmax回归中常用交叉熵损失函数),再优化全局损失。
在多分类问题中,Softmax函数通常被用作交叉熵损失函数的前置步骤。其主要作用是将数据转换为概率分布,这样就可以使用交叉熵损失函数来评估这个概率分布的效果了。本篇中主要讨论的就是这个前置步骤Softmax函数。
概念
Softmax函数是一种将任意实数向量转换为概率分布的函数。它的作用是将一个包含任意实数的 K 维向量压缩成另一个 K 维实向量,其中每个元素的范围都在 (0, 1) 之间,并且所有元素的总和为 1。这样,每个元素都可以被解释为某个类别的概率。
示例
举个例子原有向量 Z Z Z是 [ 2 , 1 , 0.1 ] [2,1,0.1] [2,1,0.1],Softmax函数将其转换成:
- 对于类别 1: p 1 = e 2 e 2 + e 1 + e 0.1 p_1 = \frac{e^2}{e^2 + e^1 + e^{0.1}} p1=e2+e1+e0.1e2
- 对于类别 2: p 2 = e 1 e 2 + e 1 + e 0.1 p_2 = \frac{e^1}{e^2 + e^1 + e^{0.1}} p2=e2+e1+e0.1e1
- 对于类别 3: p 3 = e 0.1 e 2 + e 1 + e 0.1 p_3 = \frac{e^{0.1}}{e^2 + e^1 + e^{0.1}} p3=e2+e1+e0.1e0.1
用自己/总和获得概率,这个很好理解,但是这里为啥要用
e
z
e^z
ez而不是直接用
z
z
z呢?
主要有以下几个原因:
- 非线性:指数函数提供了一种非线性的转换方式。在机器学习和深度学习中,非线性变换非常重要,因为它允许模型捕捉更复杂的关系和模式。如果仅使用线性操作(如直接使用 z z z而不是 e z e^z ez),模型的表达能力将受到限制。
- 梯度的特性:指数函数 e z e^z ez的导数仍然是 e z e^z ez,这意味着梯度不会为零。这在使用基于梯度的优化算法(如梯度下降)时非常重要,因为它保证了梯度不会过早消失,有助于更有效的训练过程。
- 放大差异:指数函数能够放大输入值之间的差异。对于Softmax函数来说,这意味着即使是输入值中较小的差异,也会在输出的概率分布中变得更加明显。这有助于模型在做出决策时更加“自信”,即更倾向于某些类别而不是其他类别。
总结就是
e
z
e^z
ez比直接用
z
z
z效果好的多。所以对于向量
Z
=
[
z
1
,
z
2
,
.
.
.
,
z
K
]
Z = [z_1, z_2, ..., z_K]
Z=[z1,z2,...,zK],其中
z
i
z_i
zi表示未归一化的预测,代表对应类别的“得分”。Softmax 函数将这些得分转换为概率
P
=
[
p
1
,
p
2
,
.
.
.
,
p
K
]
P = [p_1, p_2, ..., p_K]
P=[p1,p2,...,pK],其中每个
p
i
p_i
pi计算如下:
p
i
=
e
z
i
∑
j
=
1
K
e
z
j
p_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}}
pi=∑j=1Kezjezi
每个 p i p_i pi都是对应类别的预测概率,所有的 p i p_i pi加起来总和为 1。这样,Softmax 为多分类问题提供了一种有效的将模型输出转换为概率分布的方式。
Softmax将数据转换为概率分布,为交叉熵损失函数计算打下了良好基础,下一篇我们讲解一下交叉熵损失函数。