softmax回归

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

分类问题

让我们考虑一个简单的图像分类问题,其输入图像的高和宽均为2像素,且色彩为灰度。这样每个像素值都可以用一个标量表示。我们将图像中的4像素分别记为x1,x2,x3,x4x_1, x_2, x_3, x_4x1​,x2​,x3​,x4​。假设训练数据集中图像的真实标签为狗、猫或鸡(假设可以用4像素表示出这3种动物),这些标签分别对应离散值y1,y2,y3y_1, y_2, y_3y1​,y2​,y3​。

我们通常使用离散的数值来表示类别,例如y1=1,y2=2,y3=3y_1=1, y_2=2, y_3=3y1​=1,y2​=2,y3​=3。如此,一张图像的标签为1、2和3这3个数值中的一个。虽然我们仍然可以使用回归模型来进行建模,并将预测值就近定点化到1、2和3这3个离散值之一,但这种连续值到离散值的转化通常会影响到分类质量。因此我们一般使用更加适合离散值输出的模型来解决分类问题。

softmax回归模型

softmax回归跟线性回归一样将输入特征与权重做线性叠加。与线性回归的一个主要不同在于,softmax回归的输出值个数等于标签里的类别数。因为一共有4种特征(4个像素)和3种输出动物类别,所以权重包含12个标量(带下标的www)、偏差包含3个标量(带下标的bbb),且对每个输入计算o1,o2,o3o_1, o_2, o_3o1​,o2​,o3​这3个输出:

o1=x1w11+x2w21+x3w31+x4w41+b1,o2=x1w12+x2w22+x3w32+x4w42+b2,o3=x1w13+x2w23+x3w33+x4w43+b3.\begin{aligned} 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_3. \end{aligned} o1​o2​o3​​=x1​w11​+x2​w21​+x3​w31​+x4​w41​+b1​,=x1​w12​+x2​w22​+x3​w32​+x4​w42​+b2​,=x1​w13​+x2​w23​+x3​w33​+x4​w43​+b3​.​

由此可见,权重(参数)的目的就是用来提取特征,哪个权重大,则说明哪个像素的特征提取得比较多。
下图用神经网络图描绘了上面的计算。softmax回归同线性回归一样,也是一个单层神经网络。由于每个输出o1,o2,o3o_1, o_2, o_3o1​,o2​,o3​的计算都要依赖于所有的输入x1,x2,x3,x4x_1, x_2, x_3, x_4x1​,x2​,x3​,x4​,softmax回归的输出层也是一个全连接层。

既然分类问题需要得到离散的预测输出,一个简单的办法是将输出值oio_ioi​当作预测类别是iii的置信度,并将值最大的输出所对应的类作为预测输出,即输出 arg⁡max⁡ioi\underset{i}{\arg\max} o_iiargmax​oi​。例如,如果o1,o2,o3o_1,o_2,o_3o1​,o2​,o3​分别为0.1,10,0.10.1,10,0.10.1,10,0.1,由于o2o_2o2​最大,那么预测类别为2,其代表猫。

然而,直接使用输出层的输出有两个问题。一方面,由于输出层的输出值的范围不确定,我们难以直观上判断这些值的意义。例如,刚才举的例子中的输出值10表示“很置信”图像类别为猫,因为该输出值是其他两类的输出值的100倍。但如果o1=o3=103o_1=o_3=10^3o1​=o3​=103,那么输出值10却又表示图像类别为猫的概率很低。另一方面,由于真实标签是离散值,这些离散值与不确定范围的输出值之间的误差难以衡量。

softmax运算符(softmax operator)解决了以上两个问题。它通过下式将输出值变换成值为正且和为1的概率分布:

y^1,y^2,y^3=softmax(o1,o2,o3)\hat{y}_1, \hat{y}_2, \hat{y}_3 = \text{softmax}(o_1, o_2, o_3) y^​1​,y^​2​,y^​3​=softmax(o1​,o2​,o3​)

其中

y^1=exp⁡(o1)∑i=13exp⁡(oi),y^2=exp⁡(o2)∑i=13exp⁡(oi),y^3=exp⁡(o3)∑i=13exp⁡(oi).\hat{y}_1 = \frac{ \exp(o_1)}{\sum_{i=1}^3 \exp(o_i)},\quad \hat{y}_2 = \frac{ \exp(o_2)}{\sum_{i=1}^3 \exp(o_i)},\quad \hat{y}_3 = \frac{ \exp(o_3)}{\sum_{i=1}^3 \exp(o_i)}. y^​1​=∑i=13​exp(oi​)exp(o1​)​,y^​2​=∑i=13​exp(oi​)exp(o2​)​,y^​3​=∑i=13​exp(oi​)exp(o3​)​.

容易看出y^1+y^2+y^3=1\hat{y}_1 + \hat{y}_2 + \hat{y}_3 = 1y^​1​+y^​2​+y^​3​=1且0≤y^1,y^2,y^3≤10 \leq \hat{y}_1, \hat{y}_2, \hat{y}_3 \leq 10≤y^​1​,y^​2​,y^​3​≤1,因此y^1,y^2,y^3\hat{y}_1, \hat{y}_2, \hat{y}_3y^​1​,y^​2​,y^​3​是一个合法的概率分布。这时候,如果y^2=0.8\hat{y}_2=0.8y^​2​=0.8,不管y^1\hat{y}_1y^​1​和y^3\hat{y}_3y^​3​的值是多少,我们都知道图像类别为猫的概率是80%。此外,我们注意到

arg⁡max⁡ioi=arg⁡max⁡iy^i\underset{i}{\arg\max} o_i = \underset{i}{\arg\max} \hat{y}_i iargmax​oi​=iargmax​y^​i​

因此softmax运算不改变预测类别输出。

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

为了提高计算效率,我们可以将单样本分类通过矢量计算来表达。在上面的图像分类问题中,假设softmax回归的权重和偏差参数分别为

W=[w11w12w13w21w22w23w31w32w33w41w42w43],b=[b1b2b3],\boldsymbol{W} = \begin{bmatrix} 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{bmatrix},\quad \boldsymbol{b} = \begin{bmatrix} b_1 & b_2 & b_3 \end{bmatrix}, W=⎣⎢⎢⎡​w11​w21​w31​w41​​w12​w22​w32​w42​​w13​w23​w33​w43​​⎦⎥⎥⎤​,b=[b1​​b2​​b3​​],
W中每一列代表一个样本的所有权重,3列就代表有3个输出
设高和宽分别为2个像素的图像样本iii的特征为

x(i)=[x1(i)x2(i)x3(i)x4(i)],\boldsymbol{x}^{(i)} = \begin{bmatrix}x_1^{(i)} & x_2^{(i)} & x_3^{(i)} & x_4^{(i)}\end{bmatrix},x(i)=[x1(i)​​x2(i)​​x3(i)​​x4(i)​​],

输出层的输出为

o(i)=[o1(i)o2(i)o3(i)],\boldsymbol{o}^{(i)} = \begin{bmatrix}o_1^{(i)} & o_2^{(i)} & o_3^{(i)}\end{bmatrix},o(i)=[o1(i)​​o2(i)​​o3(i)​​],

预测为狗、猫或鸡的概率分布为

y^(i)=[y^1(i)y^2(i)y^3(i)].\boldsymbol{\hat{y}}^{(i)} = \begin{bmatrix}\hat{y}_1^{(i)} & \hat{y}_2^{(i)} & \hat{y}_3^{(i)}\end{bmatrix}.y^​(i)=[y^​1(i)​​y^​2(i)​​y^​3(i)​​].

softmax回归对样本iii分类的矢量计算表达式为

o(i)=x(i)W+b,y^(i)=softmax(o(i)).\begin{aligned} \boldsymbol{o}^{(i)} &= \boldsymbol{x}^{(i)} \boldsymbol{W} + \boldsymbol{b},\\ \boldsymbol{\hat{y}}^{(i)} &= \text{softmax}(\boldsymbol{o}^{(i)}). \end{aligned} o(i)y^​(i)​=x(i)W+b,=softmax(o(i)).​

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

为了进一步提升计算效率,我们通常对小批量数据做矢量计算。广义上讲,给定一个小批量样本,其批量大小为nnn,输入个数(特征数)为ddd,输出个数(类别数)为qqq。设批量特征为X∈Rn×d\boldsymbol{X} \in \mathbb{R}^{n \times d}X∈Rn×d。假设softmax回归的权重和偏差参数分别为W∈Rd×q\boldsymbol{W} \in \mathbb{R}^{d \times q}W∈Rd×q和b∈R1×q\boldsymbol{b} \in \mathbb{R}^{1 \times q}b∈R1×q。softmax回归的矢量计算表达式为

O=XW+b,Y^=softmax(O),\begin{aligned} \boldsymbol{O} &= \boldsymbol{X} \boldsymbol{W} + \boldsymbol{b},\\ \boldsymbol{\hat{Y}} &= \text{softmax}(\boldsymbol{O}), \end{aligned} OY^​=XW+b,=softmax(O),​

其中的加法运算使用了广播机制,O,Y^∈Rn×q\boldsymbol{O}, \boldsymbol{\hat{Y}} \in \mathbb{R}^{n \times q}O,Y^∈Rn×q且这两个矩阵的第iii行分别为样本iii的输出o(i)\boldsymbol{o}^{(i)}o(i)和概率分布y^(i)\boldsymbol{\hat{y}}^{(i)}y^​(i)。

交叉熵损失函数

前面提到,使用softmax运算后可以更方便地与离散标签计算误差。我们已经知道,softmax运算将输出变换成一个合法的类别预测分布。实际上,真实标签也可以用类别分布表达:对于样本iii,我们构造向量y(i)∈Rq\boldsymbol{y}^{(i)}\in \mathbb{R}^{q}y(i)∈Rq ,使其第y(i)y^{(i)}y(i)(样本iii类别的离散数值)个元素为1,其余为0。这样我们的训练目标可以设为使预测概率分布y^(i)\boldsymbol{\hat y}^{(i)}y^​(i)尽可能接近真实的标签概率分布y(i)\boldsymbol{y}^{(i)}y(i)。

我们可以像线性回归那样使用平方损失函数∥y^(i)−y(i)∥2/2\|\boldsymbol{\hat y}^{(i)}-\boldsymbol{y}^{(i)}\|^2/2∥y^​(i)−y(i)∥2/2。然而,想要预测分类结果正确,我们其实并不需要预测概率完全等于标签概率。例如,在图像分类的例子里,如果y(i)=3y^{(i)}=3y(i)=3,那么我们只需要y^3(i)\hat{y}^{(i)}_3y^​3(i)​比其他两个预测值y^1(i)\hat{y}^{(i)}_1y^​1(i)​和y^2(i)\hat{y}^{(i)}_2y^​2(i)​大就行了。即使y^3(i)\hat{y}^{(i)}_3y^​3(i)​值为0.6,不管其他两个预测值为多少,类别预测均正确。而平方损失则过于严格,例如y^1(i)=y^2(i)=0.2\hat y^{(i)}_1=\hat y^{(i)}_2=0.2y^​1(i)​=y^​2(i)​=0.2比y^1(i)=0,y^2(i)=0.4\hat y^{(i)}_1=0, \hat y^{(i)}_2=0.4y^​1(i)​=0,y^​2(i)​=0.4的损失要小很多,虽然两者都有同样正确的分类预测结果。

改善上述问题的一个方法是使用更适合衡量两个概率分布差异的测量函数。其中,交叉熵(cross entropy)是一个常用的衡量方法:

H(y(i),y^(i))=−∑j=1qyj(i)log⁡y^j(i),H\left(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}\right ) = -\sum_{j=1}^q y_j^{(i)} \log \hat y_j^{(i)},H(y(i),y^​(i))=−j=1∑q​yj(i)​logy^​j(i)​,

其中带下标的yj(i)y_j^{(i)}yj(i)​是向量y(i)\boldsymbol y^{(i)}y(i)中非0即1的元素,需要注意将它与样本iii类别的离散数值,即不带下标的y(i)y^{(i)}y(i)区分。在上式中,我们知道向量y(i)\boldsymbol y^{(i)}y(i)中只有第y(i)y^{(i)}y(i)个元素yy(i)(i)y^{(i)}_{y^{(i)}}yy(i)(i)​为1,其余全为0,于是H(y(i),y^(i))=−log⁡y^y(i)(i)H(\boldsymbol y^{(i)}, \boldsymbol {\hat y}^{(i)}) = -\log \hat y_{y^{(i)}}^{(i)}H(y(i),y^​(i))=−logy^​y(i)(i)​。也就是说,交叉熵只关心对正确类别的预测概率,因为只要其值足够大,就可以确保分类结果正确。当然,遇到一个样本有多个标签时,例如图像里含有不止一个物体时,我们并不能做这一步简化。但即便对于这种情况,交叉熵同样只关心对图像中出现的物体类别的预测概率。

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

其中Θ\boldsymbol{\Theta}Θ代表模型参数。同样地,如果每个样本只有一个标签,那么交叉熵损失可以简写成ℓ(Θ)=−(1/n)∑i=1nlog⁡y^y(i)(i)\ell(\boldsymbol{\Theta}) = -(1/n) \sum_{i=1}^n \log \hat y_{y^{(i)}}^{(i)}ℓ(Θ)=−(1/n)∑i=1n​logy^​y(i)(i)​。从另一个角度来看,我们知道最小化ℓ(Θ)\ell(\boldsymbol{\Theta})ℓ(Θ)等价于最大化exp⁡(−nℓ(Θ))=∏i=1ny^y(i)(i)\exp(-n\ell(\boldsymbol{\Theta}))=\prod_{i=1}^n \hat y_{y^{(i)}}^{(i)}exp(−nℓ(Θ))=∏i=1n​y^​y(i)(i)​,即最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率。

模型预测及评价

在训练好softmax回归模型后,给定任一样本特征,就可以预测每个输出类别的概率。通常,我们把预测概率最大的类别作为输出类别。如果它与真实类别(标签)一致,说明这次预测是正确的。在之后的实验中,我们将使用准确率(accuracy)来评价模型的表现。它等于正确预测数量与总预测数量之比。

小结

  • softmax回归适用于分类问题。它使用softmax运算输出类别的概率分布。
  • softmax回归是一个单层神经网络,输出个数等于分类问题中的类别个数。
  • 交叉熵适合衡量两个概率分布的差异。

注:本节与原书基本相同,原书此节传送门
转载文章:动手学习深度学习pytorch
本文中的黄字为自己思考后加的。

深度学习pytorch--softmax回归(一)相关推荐

  1. 深度学习基础--SOFTMAX回归(单层神经网络)

    深度学习基础–SOFTMAX回归(单层神经网络) 最近在阅读一本书籍–Dive-into-DL-Pytorch(动手学深度学习),链接:https://github.com/newmonkey/Div ...

  2. 深度学习:Softmax回归

    在前面,我们介绍了线性回归模型的原理及实现.线性回归适合于预测连续值,而对于分类问题的离散值则束手无策.因此引出了本文所要介绍的softmax回归模型,该模型是针对多分类问题所提出的.下面我们将从so ...

  3. 【动手学深度学习】Softmax 回归 + 损失函数 + 图片分类数据集

    学习资料: 09 Softmax 回归 + 损失函数 + 图片分类数据集[动手学深度学习v2]_哔哩哔哩_bilibili torchvision.transforms.ToTensor详解 | 使用 ...

  4. 【动手学深度学习】softmax回归

    softmax回归 1.softmax回归基本概念 2.图像分类数据集流程图 3.softmax从零开始实现流程图 4.softmax回归的简洁实现 1.softmax回归基本概念 分类问题 独热编码 ...

  5. [动手学深度学习]02 softmax回归

    softmax回归 1. softmax回归 2. softmax操作 3. 最大似然估计 4. 损失函数 5. 梯度 6. 实现 6.1 从零实现softmax回归 6.2 简洁实现 7. 课后习题 ...

  6. 深度学习PyTorch笔记(12):线性神经网络——softmax回归

    深度学习PyTorch笔记(12):线性神经网络--softmax回归 6 线性神经网络--softmax回归 6.1 softmax回归 6.1.1 概念 6.1.2 softmax运算 6.2 图 ...

  7. 【分类器 Softmax-Classifier softmax数学原理与源码详解 深度学习 Pytorch笔记 B站刘二大人(8/10)】

    分类器 Softmax-Classifier softmax数学原理与源码详解 深度学习 Pytorch笔记 B站刘二大人 (8/10) 在进行本章的数学推导前,有必要先粗浅的介绍一下,笔者在广泛查找 ...

  8. pytorch 训练过程acc_深度学习Pytorch实现分类模型

    今天将介绍深度学习中的分类模型,以下主要介绍Softmax的基本概念.神经网络模型.交叉熵损失函数.准确率以及Pytorch实现图像分类.01Softmax基本概念 在分类问题中,通常标签都为类别,可 ...

  9. 动手学深度学习Pytorch Task01

    深度学习目前以及未来都有良好的发展前景.正值疫情期间,报名参加了动手学深度学习pytorch版的公开课,希望在以后的学习生活中能够灵活运用学到的这些知识. 第一次课主要包含三个部分:线性回归.soft ...

  10. 小白也能看懂的pytorch——softmax回归

    前言:本篇文章的服务对象是没有武力值也想和pytorch沾沾边的小白朋友们,主要的内容是对于经典代码的逐行解读,解读内容以注释的形式展示. 本篇文章的代码来源为(李沐 动手学深度学习pytorch版) ...

最新文章

  1. A*B Problem
  2. java项目逻辑重要吗_JAVA小项目,逻辑+感觉+总结?java小白你做到了吗(源码+教程)...
  3. Django前后端增删改查
  4. 消除文法左递归-编译原理
  5. 中国象棋将帅问题java_编程之美读书笔记1.2——中国象棋将帅问题
  6. 开课吧课堂:Kubernetes集群环境常见问题解决
  7. 软件测试面试题整理(一)之自动化测试题大合集
  8. 医宗金鉴自学指南_自学中医看什么书
  9. 经济学人精读丨中国的电子商务
  10. 从零开始开发一款Android App
  11. mysql时区作用_一文解决MySQL时区相关问题
  12. 针对复杂问题的知识图谱问答最新进展
  13. 什么是java代理?
  14. 防范于未“燃”|涂鸦智慧社区推出“黑科技”,电瓶车禁入电梯智慧方案
  15. 用Python解中考数学规律题
  16. 股票量化分析系统浅析之(三)归一化与标准化
  17. 微记账软件——站立会议08
  18. 第五期:企业生产管理中的数据分析应用
  19. kafka发送数据报错: Error connecting to node xxxxx:9092 (id: 1 rack: null)java.net.UnknownHostExceptio
  20. 【固定资产】要在卡片和卡片管理上显示计量单位

热门文章

  1. lambda设计模式_使用lambda的装饰器设计模式
  2. java方法重载和重载方法_Java 8的方法参考进一步限制了重载
  3. 请使用复选框选择_使用可选是可选的
  4. junit runner_了解JUnit的Runner架构
  5. 在Kafka上异步发送数据
  6. Java序列化魔术方法及其示例使用
  7. c++返回指针时候注意提防_编写干净的测试–提防魔术
  8. 如何以及为什么使用Spoon分析,生成和转换Java代码
  9. rest spring_Spring REST:异常处理卷。 2
  10. 通过这5个简单的技巧减少GC开销