深度学习pytorch--softmax回归(一)

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} o1o2o3=x1w11+x2w21+x3w31+x4w41+b1,=x1w12+x2w22+x3w32+x4w42+b2,=x1w13+x2w23+x3w33+x4w43+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_iiargmaxoi。例如,如果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=13exp(oi)exp(o1),y^2=i=13exp(oi)exp(o2),y^3=i=13exp(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=10≤y^1,y^2,y^3≤10 \leq \hat{y}_1, \hat{y}_2, \hat{y}_3 \leq 10y^1,y^2,y^31,因此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^1y^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 iargmaxoi=iargmaxy^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=w11w21w31w41w12w22w32w42w13w23w33w43,b=[b1b2b3],
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}XRn×d。假设softmax回归的权重和偏差参数分别为W∈Rd×q\boldsymbol{W} \in \mathbb{R}^{d \times q}WRd×qb∈R1×q\boldsymbol{b} \in \mathbb{R}^{1 \times q}bR1×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/2y^(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.2y^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=1qyj(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 ),(Θ)=n1i=1nH(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=1nlogy^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=1ny^y(i)(i),即最小化交叉熵损失函数等价于最大化训练数据集所有标签类别的联合预测概率。

模型预测及评价

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

小结

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python比较excel表格内容并提取_利用python提取多张excel表数据并汇总到同一张新表中...

接上篇文章《如何用python实现excel中的vlookup功能?》,上篇说到,最近我在做一个小项目,也是用python操作excel解决财务审计工作上的一些问题,以便提高工作效率及其准确性。最终目的,刀哥是想做应收账款账龄…

阿帕奇跨域_阿帕奇齿轮泵

阿帕奇跨域Apache Gearpump是一个实时大数据流引擎。 它于2014年中期在GitHub上作为一个开源项目在英特尔构想,并于2016年3月8日进入Apache孵化。Gearpump的名称是对工程术语“齿轮泵”的指称,它是一个超级简单的泵,由以下组成只有两个齿轮&a…

正则表达式之 NFA 引擎匹配原理详解

文章目录一、为什么要了解引擎匹配原理二、正则表达式引擎三、预备知识(一)字符串组成(二)占有字符和零宽度(三)控制权和传动四、正则表达式简单匹本过程(一)基础匹配过程&#xff0…

阿帕奇跨域_阿帕奇光束

阿帕奇跨域Apache Beam是一个开放源代码统一模型,用于定义批处理和流数据并行处理管道。 使用一种开源的Beam SDK,您可以构建一个定义管道的程序。 然后,该管道由Beam支持的分布式处理后端之一执行,这些后端包括Apache Apex &…

unity 启动相机_Unity3D研究院之打开照相机与本地相册进行裁剪显示(三十三)...

最近做项目需要用到这个功能,就是在Unity中调用Android本地相册或直接打开摄像机拍照并且裁剪一部分用于用户头像,今天研究了一下,那么研究出成果了MOMO一定要分享给大家。Unity与Android的交互还有谁不会?? 如果有不会…

深度学习pytorch--MNIST数据集

图像分类数据集(Fashion-MNIST) 在介绍softmax回归的实现前我们先引入一个多类图像分类数据集。它将在后面的章节中被多次使用,以方便我们观察比较算法之间在模型精度和计算效率上的区别。图像分类数据集中最常用的是手写数字识别数据集MNIS…

html 元素的属性

全局属性 全局属性是可与所有 HTML 元素一起使用的属性。 事件属性 用来定义某个事件的操作的属性叫事件属性,例如,οnclick“script”,元素上发生鼠标点击时触发 click 事件,click 事件被触发就会执行对应的脚本代码。事件属性…

nosql和rdnms_用于SaaS和NoSQL的Jdbi

nosql和rdnms一个自然的接口,用于与CRM,ERP,会计,营销自动化,NoSQL,平面文件等基于Java的数据集成 Jdbi是用于JavaSQL便利库,它为JDBC提供更自然的Java数据库接口,该接口易于绑定到…

matlab 功率谱密度 汉宁窗_如何理解随机振动的功率谱密度?

一、随机信号和正太分布有什么关系? 二、时域、频域之间功率守恒? 三、自相关又是个什么玩意?作为一个工程师,很多人对随机振动看着熟悉,却又实际陌生。熟悉是因为几乎每个产品在出厂时都要求要做随机振动试验&#xf…

深度学习pytorch--softmax回归(二)

softmax回归的从零开始实现实验前思考获取和读取数据获取数据集查看数据集查看下载后的.pt文件查看mnist_train和mnist_test读取数据集查看数据迭代器内容初始化模型参数定义softmax函数定义模型定义损失函数计算分类准确率模型评价--准确率开始训练可视化总结完整代码实验前思…

HTML块级元素/块标签/块元素

文章目录块元素的特点块元素清单block level element. 块级元素想在同一行显示需浮动或者 display:inline。 块元素的特点 每个块级元素都是独自占一行,其后的元素也只能另起一行,并不能两个元素共用一行; 元素的高度、宽度、行高、顶边距、…

物联卡查询流量_电信物联卡官网是多少?如何快速查询流量信息?

高速率设备的使用场景需要用到5G,中速率LET-Cat1应用范围更广,而低速率则要靠窄带物联网NB-IOT去维护了。这三种网络制式全都与物联网息息相关,这就能知道为什么国家层面对物联网基础设施建设这么重视了。电信物联卡在智能化硬件中有优秀表现…

java8日期转时间戳_Java 8日期和时间

java8日期转时间戳如今,一些应用程序仍在使用java.util.Date和java.util.Calendar API,包括使我们的生活更轻松地使用这些类型的库,例如JodaTime。 但是,Java 8引入了新的API来处理日期和时间,这使我们可以对日期和时间…

HTML行内元素/行级元素/内联元素/行标签/内联标签/行内标签/行元素

文章目录行内元素的特点行内元素清单可变元素列表inline element. 也叫行级元素、内联元素。行内元素默认设置宽度是不起作用,需设置 display:inline-block 或者 block 才行。 行内元素的特点 可以和其他元素处于一行,不用必须另起一行; 元…

深度学习pytorch--softmax回归(三)

softmax回归的简洁实现获取和读取数据定义和初始化模型softmax和交叉熵损失函数定义优化算法模型评价训练模型小结完整代码前两篇链接: 深度学习pytorch–softmax回归(一) 深度学习pytorch–softmax回归(二) 本文使用框架来实现模型。 获取和读取数据 我们仍然使用Fashion-M…

正则表达式的分类

文章目录一、正则表达式引擎二、正则表达式分类三、正则表达式比较四、Linux/OS X 下常用命令与正则表达式的关系一、正则表达式引擎 正则引擎大体上可分为不同的两类:DFA 和 NFA,而 NFA 又基本上可以分为传统型 NFA 和 POSIX NFA。 DFA(Deterministic …

spock测试_使用Spock测试您的代码

spock测试Spock是针对Java和Groovy应用程序的测试和规范框架。 Spock是: 极富表现力 简化测试的“给定/何时/然后” 语法 与大多数IDE和CI服务器兼容。 听起来不错? 通过快速访问Spock Web控制台,您可以非常快速地开始使用Spock。 当您有…

深度学习pytorch--多层感知机(一)

多层感知机隐藏层激活函数ReLU函数sigmoid函数tanh函数多层感知机小结我们已经介绍了包括线性回归和softmax回归在内的单层神经网络。然而深度学习主要关注多层模型。在本节中,我们将以多层感知机(multilayer perceptron,MLP)为例…

太阳能板如何串联_光伏板清洁专用的清洁毛刷

光伏发电是利用半导体界面的光生伏特效应将光能直接转变为电能的一种技术。主要由太阳电池板(组件)、控制器和逆变器三大部分组成。主要部件由电子元器件构成。太阳能电池经过串联后进行封装保护可形成大面积的太阳电池组件,再配合上功率控制…

java 异步等待_Java中的异步等待

java 异步等待编写异步代码很困难。 试图了解异步代码应该做什么的难度更大。 承诺是尝试描述延迟执行流程的一种常见方式:首先做一件事,然后再做另一件事,以防万一出错时再做其他事情。 在许多语言中,承诺已成为协调异步行为的实…