动手深度学习5-softmax回归

softmax回归

前几节介绍的是线性回归模型适用于输出连续值的状况,在另一类状况下,模型输出的是一个图像的类别这样的离散值。对于离散值预测的问题,咱们能够采用诸如softmax回归在内的分类模型。
和线性回归不一样,softmax回归的输出单元从一个变成了多个,且引入了运算使输出值更适合离散值的预测和训练。以softmax回归模型为例,介绍神经网络中的分类模型。网络

让咱们先考虑一个简单的图像分类维内托,其输入图像的高和宽均为2像素,且色彩是灰度。这样的像素值均可以用一个标量表示。咱们将图像中的4像素分别记为\(x_{1},x_{2},x_{3},x_{4}\)。假设训练数据中图像的真实标签为狗,猫或者鸡(假设能够用4个像素表示出这三种动物),这些标签分别对应的离散值\(y_{1},y_{2},y_{3}\)。咱们一般使用离散值的数值来表示类别,例如\(y_{1}=1,y_{2}=2,y_{3}=3\)。这样一张图片的标签为1,2和3这三个数值中的一个。可是这种连续值到离散值的转化一般会影响到分类的质量。所以咱们使用更加适合离散值输出的模型来解决分类问题函数

softmax 回归模型

softmax回归和线性回归同样将输入特征与权重作线性叠加。与线性回归的一个主要不一样在于,softmax回归的输出值的个数等于标签里的类别数。所以一共有4个特征和3个类别的动物类别,因此权重包含12个标量带下标的\(w\),误差包含3个标量带下标的\(b\),且对于每一个输入计算\(o_{1},o_{2},o_{3}\)这三个输出spa

\(o_{1} = x_{1}w_{11} + x_{2}w_{21}+x_{3}w_{31}+x_{4}w_{41}+b_{1}\),
\(o_{2} = x_{1}w_{12} + x_{2}w_{22}+x_{3}w_{32}+x_{4}w_{42}+b_{2}\),
\(o_{3} = x_{1}w_{13} + x_{2}w_{23}+x_{3}w_{33}+x_{4}w_{43}+b_{2}\)..net

下图用神经网络描绘了上面的计算。softmax回归同线性回归同样,也是一个单层神经网络。因为每一个输出\(o_{1},o_{2},o_{3}\)的计算都有以来与全部的输入\(x_{1},x_{2},x_{3},x_{4}\),softmax回归的输出层也是一个全链接层。
code

既然分类问题须要输出离散的预测结果,一个简单的方法就是把计算出来的\(o_{1},o_{2},o_{3}\)做为预测类别的是i的置信度,并将值最大的输出所对应的类做为预测输出,即
\(\underset{i}{\arg\max}o_{i}\),若是\(o_{1},o_{2},o_{3}\)分别为0.1,10,0.1,因为\(o_{2}\)最大,那么预测的类别为2,其表明猫blog

  • 输出层的值的范围不肯定,很难直观的判断这些值的意义。
  • 真实标签是离散值,离散值与不肯定范围的输出值之间的偏差难以衡量,
    而经过softmax运算解决了以上两个问题,它经过下式将输出值转换成值为正,且和为1的几率分布:
    \(\hat{y}_{1},\hat{y}_{2},\hat{y}_{3}\) = \(softmax(o_{1},o_{2},o_{3})\)
    其中

\[ \hat { y } _ { 1 } = \frac { \exp ( o_{1} ) } { \sum _ { i = 1 } ^ { 3 } \exp ( o_{i }) } , \quad \hat { y } _ { 2 } = \frac { \exp \left( o _ { 2 } \right) } { \sum _ { i = 1 } ^ { 2 } \exp \left( o _ { i } \right) } , \quad \hat { y } _ { 3 } = \frac { \exp \left( o _ { 3 } \right) } { \sum _ { i = 1 } ^ { 3 } \exp \left( o _ { i } \right) } \]图片

容易看出\(\hat{y}_{1}+\hat{y}_{2}+\hat{y}_{3}=1\),且0<=\(\hat{y}_{1},\hat{y}_{2},\hat{y}_{3}\)<=1。\(\hat{y}_{1},\hat{y}_{2},\hat{y}_{3}\)是一个合理的几率分布。这时候,若是\(\hat{y}_{2}\)=0.8,无论其余两个值是多少,咱们都知道图像类别为猫的几率为80%,此外
\(\underset{i}{\arg\max}o_{i}\) = \(\underset{i}{\arg\max}\hat{y}_{i}\),softmax运算不会改变预测类别的输出结果。get

单样本分类的矢量计算表达式

为了提升计算效率,咱们能够将单样本分类经过矢量计算来表达。在上面的图像分类问题中,假设softmax回归的权重和误差参数分别为
\[ \boldsymbol { W } = \left[ \begin{array} { l l l } { w _ { 11 } } & { w _ { 12 } } & { w _ { 13 } } \\ { w _ { 21 } } & { w _ { 22 } } & { w _ { 23 } } \\ { w _ { 31 } } & { w _ { 32 } } & { w _ { 33 } } \\ { w _ { 41 } } & { w _ { 42 } } & { w _ { 43 } } \end{array} \right] , \quad \boldsymbol { b } = \left[ \begin{array} { l l l } { b _ { 1 } } & { b _ { 2 } } & { b _ { 3 } } \end{array} \right] \]博客

设高和宽分别为2个像素的图像样本i的特征为
\[x^{(i)} = \left[ \begin{array} { l l 1 1} { x _ { 1 }^{(i)} } & { x _ { 2 }^{(i)} } & { x _ { 3 }^{(i)} }&{x_{4}^{(i)}} \end{array} \right]\],
输出层的输出为
\[\boldsymbol { o^{(i)} } = \left[ \begin{array} { l l l } { o _ { 1 }^{(i)} } & { o _ { 2 }^{(i)}} & { o _ { 3 }^{(i)} } \end{array} \right]\],
预测为狗、猫或者鸡的几率分布为
\[\boldsymbol {\hat{\boldsymbol{y}}^{(i)} } = \left[ \begin{array} { l l l } { \hat{y} _ { 1 }^{(i)} } & { \hat{y} _ { 2 }^{(i)}} & { \hat{y} _ { 3 }^{(i)} } \end{array} \right]\],class

softmax回归对样本i分类的矢量计算表达式为
\[o^{(i)}=x^{(i)} \boldsymbol{W} +b\]
\[\hat{y}^{(i)} = softmax(o^{(i)})\]

小批量样本分类的矢量计算表达式

为了进一步的提高效率,咱们一般对小批量的数据作矢量计算。广义上讲,给定一个小批量样本,其批量大小为n,输入个数(特征个数)为d,输出个数为(类别数)为q。
设批量特征为\(\boldsymbol{X}∈R^{nxd}\)。假设softmax回归的权重和误差参数为\(\boldsymbol{W}∈R^{d✖️q}和\boldsymbol{b}∈R^{1✖️q}\) softmax回归的矢量计算表达式为
\[\boldsymbol{O}=\boldsymbol{X}\boldsymbol{W}+\boldsymbol{b}\]
\[\boldsymbol{\hat{Y}} = softmax(\boldsymbol{O})\]

其中的假发运算使用了广播机制,\(\boldsymbol{O},\boldsymbol{\hat{Y}}∈R^{n✖️q}且这两个矩阵的第i行分别为样本i的输出o^{(i)}和几率分布\hat{y}^{(i)}\)

交叉熵损失函数

使用softmax运算后能够方便的与离散标签计算偏差。咱们已经知道,softmax运算变成一个合理的类别预测分布。实际上,真实标签也能够用类别分布表达:对于样本i,咱们能够构造向量\(y^{(i)} ∈R^q,使其第y^{(i)}个元素为1,其他为0.这样咱们的训练目标能够设置为使预测几率分布\hat{y}^{(i)}尽量的接近真实的标签几率分布y^{(i)}\)

咱们能够像线性回归那样使用平方损失函数\(||\hat{y}^{(i)}-y^{(i)}||^2/2\),然而想要预测出正确的分类结果,并不须要预测几率彻底等于标签几率。交叉熵(cross entropy)是一个经常使用的衡量方法:
\[ H \left( \boldsymbol { y } ^ { ( i ) } , \hat { \boldsymbol { y } } ^ { ( i ) } \right) = - \sum _ { j = 1 } ^ { q } y _ { j } ^ { ( i ) } \log \hat { y } _ { j } ^ { ( i ) } \]

假设训练样本的样本数为n,交叉熵损失函数定义为
\(\ell\left({Θ}\right)\) = \(\frac{1}{n}\sum_{i=1}^{n}H\left(\boldsymbol{y^{(i)}},\hat{\boldsymbol{y}}^{(i)}\right)\)

\(Θ\)表明模参数吗,具体细节能够参考
讨论区
博客

cross entropy通常是用来量化两个机率分布之间的差距的
举个例子,你如今要预测一张图片是狗或猫
你的模型获得的几率是
狗 = 0.4, 猫 = 0.6
而真实的几率则是
狗 = 0.0, 猫 = 1.0

那么预测出来的几率和真实的几率,二者之间的差距有多大呢?这就是cross entropy要量化的事情了
根据上述的例子,咱们可知道cross entropy为

-( 0.0 * log(0.4) + 1.0*log(0.6) ) = 0.22

0.22表明的是你的model预测出来的几率和真实的几率之间,差距有多大
模型预测以及评价

在训练好softmax回归模型后,给定任意样本特征,就能够预测出每一个输出类别的几率。一般咱们把预测几率最大类别做为输出类别。若是它与真实标签一致,说明预测是正确的。后续分类问题将采用准确率accuracy 来评估模型的表现。

小结
  • softmax回归适用于分类问题,它使用softmax运算输出类别的几率分布
  • softmax回归是一个单层神经网络,输出个数等于分类问题中的类别个数
  • 交叉熵适合衡量两个几率分布的差别
相关文章
相关标签/搜索