适合离散值分类的多分类模型——softmax回归

一、什么是softmax回归?

简单来说softmax回归是用来做多分类任务的模型,是一个单层神经网络。与线性回归模型针对连续值的预测(预测房屋价格、天气温度变化等)不同,它更适合离散值的训练和预测。由于该模型是为了识别多种类别,故最终的输出不再是单个值(像relu/sigmoid输入一个实数,输出一个实数)或者是二分类情景(只有两种标记0和1)的两个值,而是多个值(向量),但这些值并不是简单的 0~n-1 的标记,而是经过运算后的类别概率

在猫狗分类模型中,将猫和狗的类别分别标记为0和1,现假设为了要识别出更多的动物,同样可以把不同的动物类别分别标记为0~n-1,这里,n为训练时输入的样本最终被分类的总个数。

在吴恩达视频中,做了4种可能的类别,即n=4,于是分别为(猫、狗、鸡、其它)这四种类别标记成(0、1、2、3)。

为此,可以构建如下神经网络:

当输入为样本X时,最后一层即输出层L,它有4个神经元,也就是4种类别,从上到下分别对应其它、猫、狗、鸡。实际上,多分类任务是将输出当作某个预测类别的置信度,就是将值最大的输出所对应的类作为预测输出,例如当输出的值为0.1,0.1,10,0.1,因为10最大,那么预测类别为2,是狗。然而,通常并不直接使用输出层的输出,而是使用softmax将每种类别的的输出值转化为概率,且概率和为1

这是为什么呢?

1.当一个样本经过模型进行预测时,执行完最后一层全连接,便得到的了T*1维的向量,其值就是预测标签,但得到的这些值的大小很随机,也就是说,由于输出层的输出值的范围不确定,我们难以直观的判断这些值的意义。就比如说,当上面例子的输出由于w的更新变化成(100,100,10,100),这个时候输出值10表示图像类别为猫的概率又变得很低。

2.由于真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。

于是softmax层就闪亮登场了,它出现在输出层L之后,经过运算,会得到的与上层相同维度的向量输出,只不过向量值变成了各个类别的概率。

其实看下面这张图就很明显。

上图等号左边就是全连接计算(网络最后一层),即权值W和上层输出特征X相乘(WX),可以看到特征X是N*1的向量,而W是个T*N的矩阵,这个N和X的N对应,然后得到一个T*1的向量(图中的logits[T*1]),这里的T就表示类别数,且这个向量里面每个数的大小都没有限制,即每个数的取值范围是从负无穷到正无穷。所以,对于多分类问题,在全连接层后面接一个softmax层,就相当于是一个范围的约束。其中,这个softmax的输入是T*1的向量,即全连接的输出,运算后得到的结果也是T*1的向量(也就是图中的prob[T*1],这个向量的每个值表示这个样本属于每个类的概率),只不过输出的向量的每个值的大小范围为0到1,同时各类别概率和为1,这就使得某一类别概率确定了,其他类别的概率不会没有范围限制的变化。

二、softmax回归运算

先来看下softmax的公式:

首先要计算神经网络最后一层的输出,即线性计算:

然后应用softmax激活函数,它的计算过程是这样的,先要计算一个临时变量t,也就是t=,设z[l]是4*1的向量,然后对向量中的每个值求幂,就得到的t,它也就是4*1维的,然后将t中的值相加,最后输出:

这个a[l]也是4*1维的,而4维向量的第i个元素就是:

所以上面的公式也不难理解了,再说一遍,分子代表向量中的第j个元素,分母是向量中的4个值相加,这是个4分类问题,所以就是4,如果是T,就是向量中的T个值相加,然后就能得到某种类别小于1的概率值了。

假设在测试模型的时候,当一个样本经过softmax层并输出一个T*1的向量,就会取这个向量中值最大的那个数的index作为这个样本的预测标签。

因此我们训练全连接层的W的目标就是使得其输出的WX在经过softmax层计算后其对应于真实标签的预测概率要最高。

比如,z[l]=WX=[5,2,-1,3],那么经过softmax层后就会得到[148.4,7.4,0.4,20.1],这4个数字表示这个样本属于第0,1,2,3类的概率分别是148.4,7.4,0.4,20.1,故这个样本预测出的标签就是0,猫。

三、交叉熵损失函数

在经过softmax后,就可以将预测输出的标签与真实的离散标签进行误差估计了。因为,预测类别用概率来输出,同样的,对于真实标签也可以用类别概率来表示。即,对于样本i,我们可以构造一个输出类别为q的向量,然后使向量中某个(i)类别的元素值为1(样本i类别的离散数值) ,其余为0,那么,我们的训练目标可以设为使预测概率分布尽可能接近真实的标签概率分布。

一个比较适合衡量两个概率分布差异的测量函数就是交叉熵(cross entropy):

首先H就是损失。y^(i)j 是softmax的输出向量y^(i) 的第j个值,它表示的是这个样本属于第j个类别的概率。y(i)j 前面有个求和符号,j的范围也是1到类别数q,因此y是一个1*q的向量,里面有q个值,而且只有1个值是1(z向量中的最大元素置1),其他q-1个值都是0(这就是所谓的hardmax)。那么哪个位置的值是1呢?答案是真实标签对应的位置的那个值是1,其他都是0。所以这个公式其实有一个更简单的形式:

下标应该是j,j指向当前样本的真实标签。这就意味着,如果你的学习算法试图将该式变小,(因为梯度下降法是用来减少训练集的损失的),唯一方式就是使等式右边的式子变小,要想做到这一点,就需要使y^(i)j 尽可能大,因为这些是概率,所以不可能比1大,概括来讲,损失函数所做的就是找到训练集中的真实类别,然后试图使该类别相应的概率尽可能地高,也就是说,交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确。举个例子:

假设一个5分类问题,然后一个样本i的标签y=[0,0,0,1,0],也就是说样本I的真实标签是4,假设模型预测的结果概率(softmax的输出)p=[0.1,0.15,0.05,0.6,0.1],可以看出这个预测是对的,那么对应的损失H=-log(0.6)也就是当这个样本经过这样的网络参数产生这样的预测p时,它的损失是-log(0.6)。那么假设p=[0.15,0.2,0.4,0.1,0.15],这个预测结果就很离谱了,因为真实标签是4,而预测出这个样本是4的概率只有0.1(远不如其他概率高,如果是在测试阶段,那么模型就会预测该样本属于类别3),故对应损失H=-log(0.1)。那么假设p=[0.05,0.15,0.4,0.3,0.1],这个预测结果虽然也错了,但是没有前面那个那么离谱,对应的损失H=-log(0.3)。我们知道log函数在输入小于1的时候是个负数,而且log函数是递增函数,所以-log(0.6) < -log(0.3) < -log(0.1)。简单讲就是你预测错比预测对的损失要大,预测错得离谱比预测错得轻微的损失要大。

上面是单个训练样本的损失(0.6),当遇到一个样本有多个标签时,例如图像里含有不止一个物体时,我们并不能做这一步简化。但即便对于这种情况,交叉熵同样只关心对图像中出现的物体类别的预测概率。

假设训练数据集的样本数为n,交叉熵损失函数定义为:

同样地,如果每个样本只有一个标签,那么交叉熵损失可以简写成:

其中Θ代表模型参数。

为什么不用线性回归使用的平方损失函数?

实际上是可以用的,然而,想要预测分类结果正确,其实并不需要预测概率完全等于标签概率。如果真样本实标签y(i)=3,那么我们只需要预测输出值y^(i)3比其他两个预测值y^(i)1和y^(i)2大就行了。即使y^(i)3值为0.6,不管其他两个预测值为多少,类别预测均正确。而平方损失则过于严格,例如y^(i)1=y^(i)2=0.2要比y^(i)1=0,y^(i)2=0.4的损失小很多(代入平方损失函数),虽然两者都有同样正确的分类预测结果。

四、在有Softmax输出层时如何实现梯度下降法

其实初始化反向传播所需要的关键步骤或者说关键方程是这个表达式:

未完待续。。。

参考:

https://blog.csdn.net/u014380165/article/details/77284921                       https://mooc.study.163.com/learn/2001281003tid=2001391036&_trace_c_p_k2_=ee5f45e956914291b58dd73729212cea#/learn/content?type=detail&id=2001701057

适合离散值分类的多分类模型——softmax回归相关推荐

  1. 分类模型——Softmax回归

    分类模型--Softmax回归 第一章 机器学习是什么 第二章 深度学习是什么 第三章 前馈神经网络 第四章 卷积神经网络 第五章 交叉熵函数 文章目录 分类模型--Softmax回归 前言 Soft ...

  2. 深度学习 第3章线性分类 实验四 pytorch实现 Softmax回归 鸢尾花分类任务 下篇

    目录: 第3章 线性分类 3.3 实践:基于Softmax回归完成鸢尾花分类任务 3.3.1 数据处理 3.3.1.1 数据集介绍 3.3.1.2 数据清洗 1. 缺失值分析 2. 异常值处理 3.3 ...

  3. Pytorch总结三之 softmax回归用于分类问题

    Pytorch总结三之 softmax回归用于分类问题 上篇博文Pytorch总结二之线性回归算法原理与实现介绍的线性回归模型适⽤于输出为连续值的情景. 在另⼀类情景中,模型输出可以是⼀个像图像类别这 ...

  4. 多分类任务ovo、ovr及softmax回归

    多分类任务OVO.OVR及softmax回归 – 潘登同学的Machine Learning笔记 文章目录 多分类任务OVO.OVR及softmax回归 -- 潘登同学的Machine Learnin ...

  5. 深度学习 第3章线性分类 实验四 pytorch实现 Logistic回归 上篇

    目录: 第3章 线性分类 3.1 基于Logistic回归的二分类任务 3.1.1 数据集构建 3.1.2 模型构建 1. Logistic函数 2. Logistic回归算子 3.1.3 损失函数 ...

  6. 生成模型 VS. 判别模型 Logistic 回归 VS. Softmax 回归

    生成模型 VS. 判别模型 从概率分布的角度考虑,对于一堆样本数据,每个均有特征Xi对应分类标记yi. 生成模型:学习得到联合概率分布P(x,y),即特征x和标记y共同出现的概率,然后求条件概率分布. ...

  7. pytorch学习笔记(六):softmax回归

    文章目录 前言 1. 分类问题 2. softmax回归模型 3. 单样本分类的矢量计算表达式 4. 小批量样本分类的矢量计算表达式 5. 交叉熵损失函数 6. 模型预测及评价 小结 前言 模型输出可 ...

  8. 经典机器学习方法(2)—— Softmax 回归

    参考:动手学深度学习 注:本文是 jupyter notebook 文档转换而来,部分代码可能无法直接复制运行! 前文介绍的 经典机器学习方法(1)-- 线性回归 适用于连续值预测问题(回归问题),本 ...

  9. softmax回归详解

    在一些其他场景中,我们的模型输出可能是一个图像类别这样的离散值,对于这样的离散值预测问题,可以使用 softmax 回归的分类模型. 1.1 分类问题 在一个简单图像分类问题中,输入图像的高和宽均是 ...

最新文章

  1. 年纪最小90后,他们在北大教AI
  2. [ 墨者学院 ] 命令执行——Bash漏洞分析溯源
  3. 零基础学Python(第十一章 字符串处理)
  4. 为什么将0.1f改为0会使性能降低10倍?
  5. 2万字带你攻略掉Selenium
  6. CentOS7 安装Mysql5.6 后启动失败处理 The server quit without updating PID file
  7. 交互式多模型_26亿参数,智源、清华开源中文大规模预训练模型
  8. MySQL(四)InnoDB中一棵B+树能存多少行数据
  9. jsp引进的js 显示404_【梅园大讲堂微课堂】Get超级大招!上海人才引进云申报权威解读来了...
  10. html打开ppt自动播放,PPT怎么自动播放
  11. python统计分析-卡方分析和方差分析
  12. myScript调研,电子手写板使用,纯干货
  13. 关于Mysql8.0时区表问题解决
  14. CSR Audio Sink Application User Guide
  15. 赵栋201771010137《面向对象程序设计(java)》第七周学习总结
  16. STM32 GPIO的配置寄存器(CRL、CRH)输入输出模式配置
  17. 放纵,正在毁掉这一代年轻人
  18. vue 网页生成二维码,微信扫一扫在手机打开页面
  19. 蓬莱小课:数据分析必备——麦肯锡逻辑树分析法
  20. MDK Keil使用GCC编译图文详解

热门文章

  1. oracle面试一般问几个问题,oracle面试问题及答案有哪些
  2. A Lot of Joy
  3. 千万别说“这个想法我早就有了”
  4. Qt下libusb-win32的使用(转)
  5. ICASSP 2023论文模型开源|语音分离Mossformer
  6. 对某音乐网站歌曲链接抓取的分析
  7. CCF A类 B类 C类 中国计算机学会推荐中文科技期刊目录【迷惑了好久】
  8. BUAA全排列数的生成
  9. RFSoC全面解析(七)—— ZCU111 RFSoC射频数据转换器评估工具快速启用指南
  10. TAQS.IM MicroToner v1.0.1 WiN 东方音阶转换器插件