携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第5天,点击查看活动详情
Softmax回归适用于分类问题,它使用了Softmax运算中输出类别的概率分布。社会科学家邓肯·卢斯于1959年在选择模型(choice model)的理论基础上发明softmax函数: softmax函数将未规范化的预测变换为非负并且总和为1,同时要求模型保持可导。softmax运算将一个向量映射为概率。
为了解决线性模型的分类问题,需要和输出一样多的仿射函数( affine function ) 。每个输出对应于它自己的仿射函数。
假设每次输入是一个2×2的灰度图像。可以用一个标量表示每个像素值,每个图像对应四个特征 。 此外,假设每个图像属于类别“猫”,“鸡”和“狗”中的一个。
由于我们有4个特征和3个可能的输出类别, 我们将需要12个标量来表示权重(带下标的w), 3个标量来表示偏置(带下标的b)。 下面我们为每个输入计算三个未规范化的预测( logit ) :o1、o2和o3。
通过向量形式表达为
,是一种更适合数学和编写代码的形式。由此,我们已经将所有权重放到一个3×4矩阵中。对于给定数据样本的特征x, 我们的输出是由权重与输入特征进行矩阵-向量乘法再加上偏置b得到的。
可以用神经网络图来描述这个计算过程。
与线性回归一样,softmax回归也是一个单层全连接神经网络(每个输出取决于所有输入)。
在深度学习中,全连接层无处不在。然而,全连接层是“完全”连接的,可能会导致过多可学习参数。具体来说,对于任何具有d个输入和q个输出的全连接层,参数开销为O(dq) ,这个数字在实践中可能高得令人望而却步。
要将输出视为概率,我们必须保证在任何数据上的输出都是非负的且总和为1。此外,还需要一个训练目标,来鼓励模型精准地估计概率。在分类器输出0.5的所有样本中,我们希望这些样本有一半实际上属于预测的类。这个属性叫做校准( calibration ) 。
我们首先对每个未规范化的预测求幂,这样可以确保输出非负。为了确保最终输出的总和为1,我们再对每个求幂后的结果除以它们的总和。如下式:
这里,对于所有的j总有
。 因此,y^可以视为一个正确的概率分布。softmax运算不会改变未规范化的预测o之间的顺序,只会确定分配给每个类别的概率。因此,在预测过程中,我们仍然可以用下式来选择最有可能的类别。
尽管softmax是一个非线性函数,但softmax回归的输出仍然由输入特征的仿射变换决定。 因此,softmax回归是一个线性模型( linear model ) 。
损失l可定义为交叉熵损失(cross-entropy loss)
将SoftMax带入交叉熵损失中,得:
考虑相对于任何未规范化的预测的导数,我们得到:
换句话说,导数是我们softmax模型分配的概率与实际发生的情况(由独热标签向量表示)之间的差异。从这个意义上讲,这与我们在回归中看到的非常相似,其中梯度是观测值y和估计值y^之间的差异。 这不是巧合,在任何指数族分布模型中,对数似然的梯度正是由此得出的。这使梯度计算在实践中变得容易很多。
现在让我们考虑整个结果分布的情况,即观察到的不仅仅是一个结果。对于标签y,我们可以使用与以前相同的表示形式。 唯一的区别是,现在用一个概率向量表示,如(0.1,0.2,0.7),而不是仅包含二元项的向量(0,0,1)。
在训练softmax回归模型后,给出任何样本特征,我们可以预测每个输出类别的概率。 通常我们使用预测概率最高的类别作为输出类别。如果预测与实际类别(标签)一致,则预测是正确的。
精度(accuracy ) 来评估模型的性能。精度等于正确预测数与预测总数之间的比率。
训练softmax回归循环模型与训练线性回归模型非常相似:先读取数据,再定义模型和损失函数,然后使用优化算法训练模型。这也是大多数常见的深度学习模型的训练过程。