softma用来处理分类问题,此文章以图像分类为基础问题。
1,分类问题
分类问题是一个多输入多输出问题,以图象分类为例子,高和宽均为2像素的图像有4个像素点分别记为x1,x2,x3,x4,训练数据集中图像的真实标签为狗、猫或鸡,用y1,y2,y3代替。
2,softmax回归模型
softmax与线性回归相似建立模型时都是在做特征值与权值的线性叠加,如上述提出的问题根据四个特征把问题分为三类(四个像素区分狗猫鸡),建立模型如下。
(x:四个像素 , w:代表权值, b:代表预测偏差, o:模型的输出)
使用神经网络表示模型如下所示。类似三个线性回归模型叠加在一起,由于一个计算层2也叫单层神经网络,所以输出层也叫全连接层。
一个样本(一张图片),经过该模型后会有三个输出,oi代表样本是i类的置信度。如o1=0.1,o2=10,o3=0.1由于o2最大,那么预测类别为2,其代表猫。
softmax计算
因为模型输出结果范围差距较大(如0.1与10差距100倍),另一方面,由于真实标签是离散值,与不确定范围的输出值之间的误差难以衡量。故对模型输出做softmax运算将输出值变换成值为正且和为1的概率分布。
3,单样本分类的矢量计算表达式
单样本计算采用矢量计算可提高效率
权值与偏差
像素
模型输出
概率分布与i的矢量表示
4,交叉熵损失函数(重点)
我们已经知道,softmax运算将输出变换成一个合法的类别预测分布。实际上,真实标签也可以用类别分布表达,对于一个样本i,其标签值(真实值)应该是一个元素yi=1,其余为零,表示该样本的类型是i(如标签值是1,0,0代表图像是狗 ;0,1,0代表图象是猫)
处理分类问题时我们只追求模型可以正确的识别类型,而不关注预测值与真实值之间的误差值,故不采用平方损失函数,用交叉熵来衡量真实的概率分布与预测的概率分布之间的差距,交叉熵如下。
如下图上式子在累加时只有一个yj=1其余都是零,yj^i值在0,1之间,log在0,1之间为负,故H绝对是一个正值,且预测概率分布趋近于真实概率分布时,交叉熵趋近于0
假设训练数据集的样本数为n,交叉熵损失函数是样本内交叉熵的平均值,故交叉熵损失函数定义如下。
即
损失函数值减小也代表模型预测值接近真实值。
5,模型评定
在训练好softmax回归模型后,给定任一样本特征,就可以预测每个输出类别的概率。通常,我们把预测概率最大的类别作为输出类别。如果它与真实类别(标签)一致,说明这次预测是正确的。
结束
疑惑
若真实的概率分布为“0,1,0”
模型预测“0,1,0”
模型预测的概率分布1/(2+e),e/(2+e),1/(2+e)(既是对预测结果softmax运算)。
在使用交叉熵后仍会出现一个非负值误差,可是预测结果与真实概率分布完全一致。虽然这是一个分类问题,对模型的要求是其可以正确的分类。但是否会存在另一个预测值使得交叉熵值更小,既是预测较一般的结果经过交叉熵后却更符合真实的概率分布。