这一章分为softmax回归模型的概念、图像分类数据集的概念、softmax回归模型的实现和softmax回归模型基于pytorch框架的实现四部分。
对于离散值预测问题,我们可以使用诸如softmax回归这样的分类模型。softmax回归模型有多个输出单元。本章以softmax回归模型为例,介绍神经网络中的分类模型。
例如一个简单的图像分类问题,输入图形高和宽都为2像素,且色彩为灰度(灰度图像的像素值可以用一个标量来表示)。我们将图像的四个像素值记为x1,x2,x3,x4。假设训练数据集中图像的真实标签为狗 猫和鸡,这些标签分别对应着离散值y1,y2,y3。
我们通常使用离散值来表示类别,例如y1=1,y2=2,y3=3。一张图像的标签为1、2和3的数值中的一个,对于这种问题,我们一般使用更加适合离散输出的模型来解决分类问题。
softmax回归模型一样将输入特征与权重做线性叠加。与线性回归的主要区别为softmax回归的输出值个数等于标签里的类别数。
在上面的例子中,每个图像有四个像素,对应着每个图像有四个特征值(x),有三种可能的动物类别,对应着三个离散值标签(o)。所以包含12个权重(w)和3个偏差(b)
softmax回归也是一个单层神经网络,每个输出o的计算都要依赖所有的输入x,所以softmax回归的输出层也是一个全连接层。
「通常将输出值 oi 作为预测类别 i 的置信度,并将值最大的输出所对应的类作为预测输出」即
例如o1,o2,o3分别为0.1,10,0.1由于o2最大,那么预测类别为2。
但这种方法有两个问题
softmax运算符解决了以上两个问题。它通过下式将输出值转化为值为正且和为1的概率分布。
其中
非常容易看出
基于上两式可知,y1,y2,y3是合法的概率分布。例如:y2=0.8那么不管y1,y3是多少,我们都知道为第二个类别的概率为80%
由于
可以知道,softmax运算不改变预测类别输出。
为了提高运算效率,采用矢量计算。以上面的图像分类问题为例权重和偏差参数的矢量表达式为
设高和宽分别为2个像素的图像样本 i 的特征为
输出层输出为
预测的概率分布为
最终得到softmax回归对样本 i 分类的矢量计算表达式为
对于给定的小批量样本,存在
使用softmax运算后可以更方便地于离散标签计算误差。真实标签同样可以变换为一个合法的概率分布,即:对于一个样本(一个图像),它的真实类别为y_i,我们就令y_i为1,其余为0。如图像为猫(第二个),则它的y = [0 1 0 ]。这样就可以使\hat{y}更接近y。
在图像分类问题中,想要预测结果正确并不需要让预测概率与标签概率相等(不同动作 颜色的猫),我们只需要让真实类别对应的概率大于其他类别的概率即可,因此不必使用线性回归模型中的平方损失函数。
我们使用交叉熵函数来计算损失。
这个式子中,y^(i) _j 是真实标签概率中的为1的那个元素,而 \hat{y}^{(i)}_j 是预测得到的类别概率中与之对应的那个元素。
由于在y^(i)中只有一个标签,因此在y^{i}中,除了y^(i) _j 外,其余元素都为0,于是得到上式的简化方程
也就是说交叉熵函数只与预测到的概率数有关,只要预测得到的值够大,就可以确保分类结果的正确性。
对于整体样本而言,交叉熵损失函数定义为
其中\theta代表模型参数,如果每个样本都只有一个标签,则上式可以简化为
最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率 。
在训练好softmax回归模型后,给定任意样本特征(图像),就可以预测每个输出类别的概率。把预测概率最大的类别作为输出类别。如果它与真实类别(标签)一致,说明这次预测是正确的。
我们使用准确率来评价模型的表现,准确率等于正确预测数量与总预测数量之比。