【深度学习】— softmax回归、网络架构、softmax 运算、小批量样本的向量化、交叉熵

【深度学习】— softmax回归、网络架构、softmax 运算、小批量样本的向量化、交叉熵

  • 3.4 Softmax 回归
    • 3.4.1 分类问题
    • 3.4.2 网络架构
  • 3.4.3 全连接层的参数开销
  • 3.4.4 softmax 运算
  • 3.4.5 小批量样本的向量化
  • 3.4.6 损失函数
    • 对数似然
    • softmax 的导数
  • 3.4.7 信息论基础
    • 信息量
    • 重新审视交叉熵
  • 3.4.8 模型预测和评估
  • 3.4.9 ⼩结

3.4 Softmax 回归

回归可以用于预测“多少”的问题。例如预测房屋被售出的价格,或者棒球队可能获得的胜场数,又或者患者住院的天数。

事实上,我们也对分类问题感兴趣:不是问“多少”,而是问“哪一个”:

  • 某个电子邮件是否属于垃圾邮件文件夹?
  • 某个用户可能注册或不注册订阅服务?
  • 某个图像描绘的是驴、狗、猫,还是鸡?
  • 某人接下来最有可能看哪部电影?

通常,机器学习实践者用分类这个词来描述两个有微妙差别的问题:

  1. 我们只对样本的“硬性”类别感兴趣,即属于哪个类别。
  2. 我们希望得到“软性”类别,即得到属于每个类别的概率。

这两者的界限往往很模糊。其中的一个原因是:即使我们只关心硬类别,我们仍然使用软类别的模型。

3.4.1 分类问题

我们从一个图像分类问题开始。假设每次输入是一个 2 × 2 2 \times 2 2×2 的灰度图像。我们可以用一个标量表示每个像素值,每个图像对应四个特征 x 1 , x 2 , x 3 , x 4 x_1, x_2, x_3, x_4 x1,x2,x3,x4。此外,假设每个图像属于类别“猫”,“鸡”和“狗”中的一个。

接下来,我们要选择如何表示标签。我们有两个明显的选择:最直接的想法是选择 y ∈ { 1 , 2 , 3 } y \in \{1, 2, 3\} y{1,2,3},其中整数分别代表 {狗, 猫, 鸡}。这是在计算机上存储此类信息的有效方法。如果类别间有一些自然顺序,比如说我们试图预测 {婴儿, 儿童, 青少年, 青年人, 中年人, 老年人},那么将这个问题转变为回归问题,并且保留这种格式是有意义的。

但一般的分类问题并不与类别之间的自然顺序有关。幸运的是,统计学家很早以前就发明了一种表示分类数据的简单方法:独热编码(one-hot encoding)。独热编码是一个向量,它的分量和类别一样多。类别对应的分量设置为 1,其他所有分量设置为 0。在我们的例子中,标签 y y y 将是一个三维向量,其中 ( 1 , 0 , 0 ) (1, 0, 0) (1,0,0) 对应于“猫”、 ( 0 , 1 , 0 ) (0, 1, 0) (0,1,0) 对应于“鸡”、 ( 0 , 0 , 1 ) (0, 0, 1) (0,0,1) 对应于“狗”:

y ∈ { ( 1 , 0 , 0 ) , ( 0 , 1 , 0 ) , ( 0 , 0 , 1 ) } . y \in \{(1, 0, 0), (0, 1, 0), (0, 0, 1)\}. y{(1,0,0),(0,1,0),(0,0,1)}.

3.4.2 网络架构

为了估计所有可能类别的条件概率,我们需要一个有多个输出的模型,每个类别对应一个输出。为了解决线性模型的分类问题,我们需要和输出一样多的仿射函数(affine function)。每个输出对应于它自己的仿射函数。在我们的例子中,由于我们有 4 个特征和 3 个可能的输出类别,我们将需要 12 个标量来表示权重(带下标的 w w w),3 个标量来表示偏置(带下标的 b b b)。下面我们为每个输入计算三个未规范化的预测(logit): o 1 , o 2 , o 3 o_1, o_2, o_3 o1,o2,o3

o 1 = x 1 w 11 + x 2 w 12 + x 3 w 13 + x 4 w 14 + b 1 , o_1 = x_1 w_{11} + x_2 w_{12} + x_3 w_{13} + x_4 w_{14} + b_1, o1=x1w11+x2w12+x3w13+x4w14+b1,

o 2 = x 1 w 21 + x 2 w 22 + x 3 w 23 + x 4 w 24 + b 2 , o_2 = x_1 w_{21} + x_2 w_{22} + x_3 w_{23} + x_4 w_{24} + b_2, o2=x1w21+x2w22+x3w23+x4w24+b2,

o 3 = x 1 w 31 + x 2 w 32 + x 3 w 33 + x 4 w 34 + b 3 . o_3 = x_1 w_{31} + x_2 w_{32} + x_3 w_{33} + x_4 w_{34} + b_3. o3=x1w31+x2w32+x3w33+x4w34+b3.

我们可以用神经网络图(图 3.4.1)来描述这个计算过程。与线性回归一样,softmax 回归也是一个单层神经网络。由于计算每个输出 o 1 , o 2 , o 3 o_1, o_2, o_3 o1,o2,o3 取决于所有输入 x 1 , x 2 , x 3 , x 4 x_1, x_2, x_3, x_4 x1,x2,x3,x4,所以 softmax 回归的输出层也是全连接层。

在这里插入图片描述

图 3.4.1: softmax 回归是一种单层神经网络

为了更简洁地表达模型,我们仍然使用线性代数符号。通过向量形式表达为:

o = W x + b , \mathbf{o} =\mathbf{W}\mathbf{x} + \mathbf{b}, o=Wx+b,

这是一种更适合数学和编写代码的形式。由此,我们已经将所有权重放到一个 3 × 4 3 \times 4 3×4 矩阵中。对于给定数据样本的特征 x \mathbf{x} x,我们的输出是由权重与输入特征进行矩阵-向量乘法再加上偏置 b \mathbf{b} b 得到的。

3.4.3 全连接层的参数开销

正如我们将在后续章节中看到的,在深度学习中,全连接层无处不在。然⽽,顾名思义,全连接层是“完全”连接的,可能有很多可学习的参数。具体来说,对于任何具有 d d d 个输⼊和 q q q 个输出的全连接层,参数开销为 O ( d q ) O(dq) O(dq),这个数字在实践中可能⾼得令⼈望⽽却步。幸运的是,将 d d d 个输⼊转换为 q q q 个输出的成本可以减少到 O ( d q n ) O\left(\frac{dq}{n}\right) O(ndq),其中超参数 n n n 可以由我们灵活指定,以在实际应⽤中平衡参数节约和模型有效性 [Zhang et al., 2021]。

3.4.4 softmax 运算

现在我们将优化参数以最⼤化观测数据的概率。为了得到预测结果,我们将设置⼀个阈值,如选择具有最⼤概率的标签。我们希望模型的输出 y ^ j \hat{y}_j y^j 可以视为属于类 j j j 的概率,然后选择具有最⼤输出值的类别 argmax j y ^ j \text{argmax}_j \hat{y}_j argmaxjy^j 作为我们的预测。例如,如果 y ^ 1 \hat{y}_1 y^1 y ^ 2 \hat{y}_2 y^2 y ^ 3 \hat{y}_3 y^3 分别为 0.1、0.8 和 0.1,那么我们预测的类别是 2,在我们的例⼦中代表“鸡”。

然而我们能否将未规范化的预测 o o o 直接视作我们感兴趣的输出呢?答案是否定的。因为将线性层的输出直接视为概率时存在⼀些问题:⼀⽅⾯,我们没有限制这些输出数字的总和为 1;另⼀⽅⾯,根据输⼊的不同,它们可以为负值。这些违反了 2.6 节中所说的概率基本公理。

要将输出视为概率,我们必须保证在任何数据上的输出都是⾮负的且总和为 1。此外,我们需要⼀个训练的⽬标函数,来激励模型精准地估计概率。例如,在分类器输出 0.5 的所有样本中,我们希望这些样本是刚好有⼀半实际上属于预测的类别。这个属性叫做校准(calibration)。

社会科学家邓肯·卢斯于 1959 年在选择模型(choice model)的理论基础上发明的 softmax 函数正是这样做的:softmax 函数能够将未规范化的预测变换为⾮负数并且总和为 1,同时让模型保持可导的性质。为了完成这⼀⽬标,我们⾸先对每个未规范化的预测求幂,这样可以确保输出⾮负。为了确保最终输出的概率值总和为 1,我们再让每个求幂后的结果除以它们的总和。如下式:

y ^ = softmax ( o ) 其中 y ^ j = exp ⁡ ( o j ) ∑ k exp ⁡ ( o k ) \hat{y} = \text{softmax}(o) \quad \text{其中} \quad \hat{y}_j = \frac{\exp(o_j)}{\sum_k \exp(o_k)} y^=softmax(o)其中y^j=kexp(ok)exp(oj)
(3.4.3)

这⾥,对于所有的 j j j 总有 0 ≤ y ^ j ≤ 1 0 \leq \hat{y}_j \leq 1 0y^j1。因此, y ^ \hat{y} y^ 可以视为⼀个正确的概率分布。softmax 运算不会改变未规范化的预测 o o o 之间的⼤⼩次序,只会确定分配给每个类别的概率。因此,在预测过程中,我们仍然可以⽤下式来选择最有可能的类别:

argmax j y ^ j = argmax j o j \text{argmax}_j \hat{y}_j = \text{argmax}_j o_j argmaxjy^j=argmaxjoj
(3.4.4)

尽管 softmax 是⼀个⾮线性函数,但 softmax 回归的输出仍然由输⼊特征的仿射变换决定。因此,softmax 回归是⼀个线性模型(linear model)。

3.4.5 小批量样本的向量化

为了提高计算效率并充分利用 GPU,我们通常会对小批量样本的数据执行向量计算。假设我们读取了一个批量的样本 X \mathbf{X} X,其中特征维度(输入数量)为 d d d,批量大小为 n n n。此外,假设我们在输出中有 q q q 个类别。那么小批量样本的特征矩阵为 X ∈ R n × d \mathbf{X} \in \mathbb{R}^{n \times d} XRn×d,权重矩阵为 W ∈ R d × q \mathbf{W} \in \mathbb{R}^{d \times q} WRd×q,偏置向量为 b ∈ R 1 × q \mathbf{b} \in \mathbb{R}^{1 \times q} bR1×q。softmax 回归的向量计算表达式为:

在这里插入图片描述

相对于一次处理一个样本,小批量样本的向量化计算加快了对 X W \mathbf{X}\mathbf{W} XW 的处理速度。在小批量处理中,每个样本是 X \mathbf{X} X 的一行。softmax 运算可以按行执行:对 O \mathbf{O} O 的每一行,先进行幂运算,再标准化。公式 (3.4.5) 中的 X W + b \mathbf{XW} + \mathbf{b} XW+b 使用了广播机制,最终得到的未规范化预测 O \mathbf{O} O 和输出概率 Y ^ \hat{\mathbf{Y}} Y^ 都是 n × q n \times q n×q 形状的矩阵。

3.4.6 损失函数

为了评估模型的预测效果,我们使用最大似然估计,这与线性回归中的方法类似。

对数似然

softmax 函数输出向量 y ^ \hat{\mathbf{y}} y^,可看作条件概率。假设数据集 { X , Y } \{\mathbf{X}, \mathbf{Y}\} {X,Y} n n n 个样本,每个样本由特征向量 x ( i ) \mathbf{x}^{(i)} x(i) 和独热标签 y ( i ) \mathbf{y}^{(i)} y(i) 组成,模型预测的概率为:


(3.4.6)

根据最大似然估计,最小化负对数似然为:


(3.4.7)

其中,损失函数为交叉熵损失:


(3.4.8)

softmax 的导数

将公式 (3.4.3) 代入损失函数 (3.4.8),得到:

在这里插入图片描述

对于未规范化的预测 o j o_j oj,其导数为:

这个导数表示模型分配的概率与真实标签之间的差异,类似于回归中的误差梯度。

3.4.7 信息论基础

信息论(information theory)涉及编码、解码、传输以及高效处理信息或数据的过程。

信息论的核心是量化数据中的信息量,这个数值称为分布 P P P 的熵(entropy),定义为:


(3.4.11)

信息论的基本定理之一指出,为了对从分布 P P P 中随机抽取的数据进行编码,我们至少需要 H [ P ] H[P] H[P] 个“纳特(nat)”来编码。纳特是以自然对数 e e e 为底的单位,与比特(bit)的区别在于比特使用的是以 2 为底的对数。1 个纳特大约等于 1.44 比特。

信息量

压缩与预测密切相关。假如我们可以轻易预测数据的下一个值,那么它就容易压缩。举例来说,如果数据流中的所有数据完全相同,它们是无聊且可预测的,因此无需传递额外信息,因为下一个数据是确定的。在这种情况下,事件的信息量为零。

然而,当事件不易预测时,信息量增加。克劳德·香农用公式 log ⁡ 1 P ( j ) = − log ⁡ P ( j ) \log \frac{1}{P(j)} = - \log P(j) logP(j)1=logP(j) 来量化这种“惊异”程度。当一个事件的概率较低时,它的信息量更大。在公式 (3.4.11) 中定义的熵是当概率分布与数据生成过程匹配时,事件信息量的期望值。

重新审视交叉熵

如果我们将熵 H ( P ) H(P) H(P) 理解为“知道真实概率的人所感受到的惊异程度”,那么交叉熵是从分布 P P P Q Q Q 的信息量,记为 H ( P , Q ) H(P, Q) H(P,Q)。它可以看作是“主观认为分布为 Q Q Q 的观察者,看到根据分布 P P P 生成的数据时的预期惊异”。当 P = Q P = Q P=Q 时,交叉熵达到最小值,等于熵 H ( P ) H(P) H(P)

简而言之,交叉熵目标有两个方面:(i)最大化观测数据的似然;(ii)最小化传达标签所需的信息量。

3.4.8 模型预测和评估

在训练softmax回归模型后,给出任何样本特征,我们可以预测每个输出类别的概率。通常我们使⽤预测概率最⾼的类别作为输出类别。如果预测与实际类别(标签)⼀致,则预测是正确的。在接下来的实验中,我们将使⽤精度(accuracy)来评估模型的性能。精度等于正确预测数与预测总数之间的⽐率。

3.4.9 ⼩结

• softmax运算获取⼀个向量并将其映射为概率。
• softmax回归适⽤于分类问题,它使⽤了softmax运算中输出类别的概率分布。
• 交叉熵是⼀个衡量两个概率分布之间差异的很好的度量,它测量给定模型编码数据所需的⽐特数。

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

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

相关文章

网站开发基础:HTML、CSS

前端开发主要使用的技术如 HTML、CSS 和 JavaScript 等。 简单制作一个网页 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>柒毓同学网站的首页</title><style>.c1{border: solid 1px g…

C语言—单链表

目录 一、链表的概念及结构 二、单链表实现 &#xff08;2.1&#xff09;基本结构定义 &#xff08;2.2&#xff09;申请节点 &#xff08;2.3&#xff09;打印函数 &#xff08;2.4&#xff09;头部插入删除\尾部插入删除 &#xff08;2.4.1&#xff09;尾部插入 &…

计算机毕业设计 智慧物业服务系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

【算法笔记】双指针算法深度剖析

【算法笔记】双指针算法深度剖析 &#x1f525;个人主页&#xff1a;大白的编程日记 &#x1f525;专栏&#xff1a;算法笔记 文章目录 【算法笔记】双指针算法深度剖析前言一.移动零1.1题目1.2思路分析1.3代码实现 二.复写零2.1题目2.2思路分析2.3代码实现 三.快乐数3.1题目…

【自然语言处理】(1) --语言转换方法

文章目录 语言转换方法一、统计语言模型1. 词向量转换2. 统计模型问题 二、神经语言模型1. 词向量化2. 维度灾难3. 解决维度灾难4. embedding词嵌入5. Word2Vec技术5.1 连续词袋模型&#xff08;CBOW&#xff09;5.2 跳字模型&#xff08;Skip-gram&#xff09; 总结 语言转换方…

【ssh-xorg】SSH远程配置X11窗口回传

前言 我们通常在进行远程配置板端的时候往往会出现一个问题&#xff0c;在不连接显示屏或者启用VNC服务的前提下(或者使用其他软件提供的功能)&#xff0c;我们无法在远程终端看到板端的新窗口&#xff0c;本文提供一种方式&#xff0c;在进行ssh远程连接时候制定参数-CX&…

【大数据】Doris 数据库与表操作语法实战详解

目录 一、前言 二、数据库基本操作 2.1 修改账户密码 2.2 创建新用户 2.3 创建数据库与账户授权 2.3.1 数据库创建补充说明 2.3.2 数据库账户赋权 三、数据表基本操作 3.1 Doris 数据表介绍与使用 3.1.1 建表结构说明 3.1.2 建表语法与操作 3.1.3 建表示例 - 单分区…

探索大型语言模型在文化常识方面的理解能力与局限性

介绍 论文地址&#xff1a;https://arxiv.org/pdf/2405.04655v1 近年来&#xff0c;大型语言模型&#xff08;LLM&#xff09;不仅被广泛应用于各个领域&#xff0c;而且通过大量的基准评估&#xff0c;证明它们能够理解人类所拥有的常识&#xff08;Commonsense&#xff09;…

pdf怎么编辑修改内容?详细介绍6款pdf编辑器功能

■ pdf怎么编辑修改内容&#xff1f; PDF&#xff08;Portable Document Format&#xff09;作为一种广泛使用的文件格式&#xff0c;具有特点包括兼容性强、易于传输、文件安全性高、跨平台性、可读性强、完整性、可搜索性、安全性、可压缩性。 PDF文件本身是不可以直接进行编…

深度学习--------------------------------门控循环单元GRU

目录 门候选隐状态隐状态门控循环单元GRU从零开始实现代码初始化模型参数定义隐藏状态的初始化函数定义门控循环单元模型训练该部分总代码简洁代码实现 做RNN的时候处理不了太长的序列&#xff0c;这是因为把整个序列信息全部放在隐藏状态里面&#xff0c;当时间很长的话&#…

jmeter操作数据库

jmeter操作数据库 一、打开数据库 二、jmeter下载驱动&#xff0c;安装jdbc驱动 1、下载好的驱动包 2、将驱动包复制粘贴 存放在包的路径下 &#xff08;1&#xff09;jdk下面 a、路径&#xff1a;jdk1\jre\lib b、jdk1\jre\lib\ext &#xff08;2&#xff09;jmeter下 a、…

SpringIoC容器的初识

一、SpringIoC容器的介绍 Spring IoC 容器&#xff0c;负责实例化、配置和组装 bean&#xff08;组件&#xff09;。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这…

基于依赖注入技术的.net core WebApi框架创建实例

依赖注入&#xff08;Dependency Injection, DI&#xff09;是一种软件设计模式&#xff0c;用于实现控制反转&#xff08;Inversion of Control, IoC&#xff09;。在ASP.NET Core中&#xff0c;依赖注入是内置的核心功能之一。它允许你将应用程序的组件解耦和配置&#xff0c…

Linux:进程入门(进程与程序的区别,进程的标识符,fork函数创建多进程)

往期文章&#xff1a;《Linux&#xff1a;深入了解冯诺依曼结构与操作系统》 Linux&#xff1a;深入理解冯诺依曼结构与操作系统-CSDN博客 目录 1. 概念 2. 描述进程 3. 深入理解进程的本质 4. 进程PID 4.1 指令获取PID 4.2 geipid函数获取PID 4.3 kill指令终止进程 …

Linux驱动开发(速记版)--GPIO子系统

第105章 GPIO 入门 105.1 GPIO 引脚分布 RK3568 有 5 组 GPIO&#xff1a;GPIO0 到 GPIO4。 每组 GPIO 又以 A0 到 A7&#xff0c;B0 到 B7&#xff0c;C0 到C7&#xff0c;D0 到 D7&#xff0c;作为区分的编号。 所以 RK3568 上的 GPIO 是不是应该有 5*4*8160 个呢&#xff1…

MySQL高阶2004-职员招聘人数

目录 题目 准备数据 分析数据 实现 题目 一家公司想雇佣新员工。公司的工资预算是 70000 美元。公司的招聘标准是&#xff1a; 雇佣最多的高级员工。在雇佣最多的高级员工后&#xff0c;使用剩余预算雇佣最多的初级员工。 编写一个SQL查询&#xff0c;查找根据上述标准雇…

男单新老对决:林诗栋VS马龙,巅峰之战

听闻了那场激动人心的新老对决&#xff0c;不禁让人热血沸腾。在这场乒乓球的巅峰之战中&#xff0c;林诗栋与马龙的对决无疑是一场视觉与技术的盛宴。 3:3的决胜局&#xff0c;两位选手的每一次挥拍都充满了策略与智慧&#xff0c;他们的每一次得分都让人心跳加速。 林诗栋&am…

Linux自动化构建工具Make/Makefile

make是一个命令 makefile是一个文件 touch 创建并用vim打开makefile 写入依赖对象和依赖方法 mycode是目标文件 第二行数依赖方法 以tab键开头 make makefile原理 makefile中写的是依赖关系和依赖方法 clean英语清理文件 后不用加源文件。.PHONY定义clean是伪目标。 make只…

动态SLAM总结二

文章目录 Mapping the Static Parts of Dynamic Scenes from 3D LiDAR Point Clouds Exploiting Ground Segmentation&#xff1a;&#xff08;2021&#xff09;RF-LIO&#xff1a;&#xff08;2022&#xff09;RH-Map&#xff1a;&#xff08;2023&#xff09;Mapless Online …

[C++]使用纯opencv部署yolov11-pose姿态估计onnx模型

【算法介绍】 使用纯OpenCV部署YOLOv11-Pose姿态估计ONNX模型是一项具有挑战性的任务&#xff0c;因为YOLOv11通常是用PyTorch等深度学习框架实现的&#xff0c;而OpenCV本身并不直接支持加载和运行PyTorch模型。然而&#xff0c;可以通过一些间接的方法来实现这一目标&#x…