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}\)这三个输出

\(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}\).

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

既然分类问题需要输出离散的预测结果,一个简单的方法就是把计算出来的\(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,其代表猫

  • 输出层的值的范围不确定,很难直观的判断这些值的意义。
  • 真实标签是离散值,离散值与不确定范围的输出值之间的误差难以衡量,

    而通过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运算不会改变预测类别的输出结果。

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

为了提高计算效率,我们可以将单样本分类通过矢量计算来表达。在上面的图像分类问题中,假设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]$$,

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回归是一个单层神经网络,输出个数等于分类问题中的类别个数
  • 交叉熵适合衡量两个概率分布的差异

动手学深度学习5-softmax回归的更多相关文章

  1. 动手学深度学习4-线性回归的pytorch简洁实现

    导入同样导入之前的包或者模块 生成数据集 通过pytorch读取数据 定义模型 初始化模型 定义损失函数 定义优化算法 训练模型 小结 本节利用pytorch中的模块,生成一个更加简洁的代码来实现同样 ...

  2. 对比《动手学深度学习》 PDF代码+《神经网络与深度学习 》PDF

    随着AlphaGo与李世石大战的落幕,人工智能成为话题焦点.AlphaGo背后的工作原理"深度学习"也跳入大众的视野.什么是深度学习,什么是神经网络,为何一段程序在精密的围棋大赛中 ...

  3. 【动手学深度学习】Jupyter notebook中 import mxnet出错

    问题描述 打开d2l-zh目录,使用jupyter notebook打开文件运行,import mxnet 出现无法导入mxnet模块的问题, 但是命令行运行是可以导入mxnet模块的. 原因: 激活 ...

  4. 小白学习之pytorch框架(2)-动手学深度学习(begin-random.shuffle()、torch.index_select()、nn.Module、nn.Sequential())

    在这向大家推荐一本书-花书-动手学深度学习pytorch版,原书用的深度学习框架是MXNet,这个框架经过Gluon重新再封装,使用风格非常接近pytorch,但是由于pytorch越来越火,个人又比 ...

  5. 《动手学深度学习》系列笔记—— 1.2 Softmax回归与分类模型

    目录 softmax的基本概念 交叉熵损失函数 模型训练和预测 获取Fashion-MNIST训练集和读取数据 get dataset softmax从零开始的实现 获取训练集数据和测试集数据 模型参 ...

  6. 动手学深度学习7-从零开始完成softmax分类

    获取和读取数据 初始化模型参数 实现softmax运算 定义模型 定义损失函数 计算分类准确率 训练模型 小结 import torch import torchvision import numpy ...

  7. 动手学深度学习14- pytorch Dropout 实现与原理

    方法 从零开始实现 定义模型参数 网络 评估函数 优化方法 定义损失函数 数据提取与训练评估 pytorch简洁实现 小结 针对深度学习中的过拟合问题,通常使用丢弃法(dropout),丢弃法有很多的 ...

  8. 动手学深度学习9-多层感知机pytorch

    多层感知机 隐藏层 激活函数 小结 多层感知机 之前已经介绍过了线性回归和softmax回归在内的单层神经网络,然后深度学习主要学习多层模型,后续将以多层感知机(multilayer percetro ...

  9. 深度学习之softmax回归

    前言            以下内容是个人学习之后的感悟,转载请注明出处~ softmax回归 首先,我们看一下sigmod激活函数,如下图,它经常用于逻辑回归,将一个real value映射到(0, ...

随机推荐

  1. Zabbix设置自定义监控项之——监控tcp连接状态

    目录 一.用户自定义参数 二.配置 监控 TCP 连接状态 在实际监控中,除了官方自带的一些监控项,我们很多时候有一些定制化监控,比如特定的服务.TCP 连接状态等等,这时候就需要自定义监控项.自定义 ...

  2. Vs2017发布可在线更新的Winform程序

    如题,此处引用“南秦岭”的博文<使用ClickOnce发布Windows应用程序>,对作者表示感谢! 补充说明: “发布文件夹”是指你电脑上的本地文件夹:“安装文件夹”是指你提供给用户的u ...

  3. mysql数据库被攻击

    好久没有登录我自己的服务器了,今日登录发现mysql数据库沦陷了.我的数据库名字叫linkorganizer,是一个链接管理数据库.旧表已经丢失了,整个数据库只剩下一个warning表,它是黑客留下的 ...

  4. redis笔记3

    redis持久化机制 redis提供了两种持久化策略 RDB RDB的持久化策略: 按照规则定时将内存的数据同步到磁盘 snapshot redis在指定的情况下会触发快照 自己配置的快照规则 sav ...

  5. JDK1.8 —— 接口定义增强

    使用default和static定义接口方法 JDK1.8(jre8)以后,接口中不在仅仅只允许定义抽象方法,开始允许定义普通方法了:而普通方法需要用default声明. interface IMes ...

  6. python部分笔记

    创建类和对象 图片转在自:https://www.cnblogs.com/aylin/p/5547558.html 图片转在自:https://www.cnblogs.com/aylin/p/5547 ...

  7. 章节十四、5- web页面的截图

    一.以雅虎网站为例,当我们在登录时,输入错误的用户名然后点击“下一步”,用户名输入框会提示红色字体,这个时候我们就将页面进行截图. http://commons.apache.org/proper/c ...

  8. Linux 用epoll实现的简单http服务器

    Linux 用epoll实现的简单http服务器 main.c #include <stdio.h> #include <sys/types.h> #include <s ...

  9. Eyoo大学生交友平台

    团队简介 团队名称 golden express 队员学号列表 王伟 201731062214 刘冬 201731062227 张旭 201731062129 秦裕航 201731062432 (组长 ...

  10. 201871010118-唐敬博《面向对象程序设计(java)》第十二周学习总结

    博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...