🐟Softmax回归
2021-11-10
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property

 

分类问题

一个图像分类问题,假设每个图像属于类别“猫”,“鸡”和“狗”中的一个,要选择如何表示标签?
有两个明显的选择:
  • 最直接的想法是选择, 其中整数分别代表。这是在计算机上存储此类信息的有效方法。 如果类别间有一些自然顺序, 比如,那么将这个问题转变为回归问题,并且保留这种格式是有意义的。
  • 但是一般的分类问题并不与类别之间的自然顺序有关。 幸运的是,统计学家很早以前就发明了一种表示分类数据的简单方法:one-hot编码(独热编码)。独热编码是一个向量,它的分量和类别一样多,别对应的分量设置为1,其他所有分量设置为0。在这个例子中,标签将是一个三维向量, 其中 对应于“猫”、 对应于“鸡”、 对应于“狗”:
 

网络架构

notion image
为了估计所有可能类别的条件概率,需要一个有多个输出的模型,每个类别对应一个输出。 为了解决线性模型的分类问题,我们需要和输出一样多的仿射函数。 每个输出对应于它自己的仿射函数。
假设有4个特征和3个可能的输出类别,需要12个标量来表示权重, 3个标量来表示偏置。 每个输入计算三个未规范化的预测
由于计算每个输出 取决于所有输入, 所以softmax回归的输出层也是全连接层
 

softmax运算

我们希望模型的输出 可以视为属于类的概率, 然后选择具有最大输出值的类别作为预测。例如,如果分别为0.1、0.8和0.1, 那么预测的类别是2,在这个例子中代表“鸡”。
能否将未规范化的预测直接视作我们感兴趣的输出呢? 答案是否定的。
因为将线性层的输出直接视为概率时存在一些问题: 一方面,没有限制这些输出数字的总和为1; 另一方面,根据输入的不同,它们可以为负值。 这些违反了概率基本公理。要将输出视为概率,必须保证在任何数据上的输出都是非负的且总和为1。 此外,我们需要一个训练目标,来鼓励模型精准地估计概率。 在分类器输出0.5的所有样本中,我们希望这些样本有一半实际上属于预测的类。 这个属性叫做校准
邓肯·卢斯于1959年在选择模型(choice model)的理论基础上发明的softmax函数正是这样做的: softmax函数首先对每个未规范化的预测求幂,这样可以确保输出非负。 为了确保最终输出的总和为1,再对每个求幂后的结果除以它们的总和,如下式:
对于所有的总有
尽管softmax是一个非线性函数,但softmax回归的输出仍然由输入特征的仿射变换决定。 因此,softmax回归是一个线性模型

交叉熵损失函数

可以像线性回归那样使用平方损失函数。然而,想要预测分类结果正确,其实并不需要预测概率完全等于标签概率。例如,在图像分类的例子里,如果,那么我们只需要 比其他两个预测值大就行了。即使值为0.6,不管其他两个预测值为多少,类别预测均正确。而平方损失则过于严格,例如 的损失要小很多,虽然两者都有同样正确的分类预测结果。
改善上述问题的一个方法是使用更适合衡量两个概率分布差异的测量函数——交叉熵
对于任何标签 和模型预测,损失函数为:
由于是一个长度为的独热编码向量, 所以除了一个项以外的所有项都消失了。

softmax及其导数

换句话说,导数是我们softmax模型分配的概率与实际发生的情况(由独热标签向量表示)之间的差异。 从这个意义上讲,这与我们在回归中看到的非常相似, 其中梯度是观测值和估计值之间的差异。 这不是巧合,在任何指数族分布模型中, 对数似然的梯度正是由此得出的。 这使梯度计算在实践中变得容易很多。
 

LR多分类实战

 
 
 

图像分类数据集

读取数据集

notion image
 
 
 

读取小批量

 
 
 
 
notion image
 

整合所有组件

 
 

Softmax回归的实现

从零开始实现

读取数据集

初始化模型参数

定义Softmax操作

notion image
 

定义模型

 

定义损失函数

notion image
 
 

分类准确率

notion image
 

训练

notion image
 

预测

notion image
 
 
 
 
 

简洁实现

 
 
 
 
notion image
 
  • PyTorch
  • 线性回归DNN和前向传播算法
    目录