图片向量与标签得分向量:

上节讲到,图片可以被展开成一个向量,对于这个向量,假设它有D维,那么它就是D维空间的一个点,又假设我们的标签集合总共有K种,我们可以定义一个K维标签得分向量,每一个维度对应着其相应标签的得分。那么我们就可以想办法建立一个线性映射,将一个图片向量映射成一个标签向量,将其中得分最高的维度所对应的标签作为这张图片的标签,这就是线性分类器的本质

即:

设训练集X 有N个元素,其中x_i\in R^D, 每个x_i 有其对应的标签向量 y_i \in R^K

线性分类器:

对于上述的向量对应关系

则我们可以建立一个线性分类器:

f(x,W) = Wx+b

其中W是一个K \times D的矩阵,被称为权重(权重是提前设定好的,这里我们假设模型已经找到最优权重),b是一个K维向量,被称为偏差向量(这个向量也已经找到了最优)

这个函数会输出对于x映射出来的标签得分预测向量,然后我们可以根据该预测向量的最高得分维度来预测x所对应的图片的标签

偏差与权重的合并技巧:

我们可以将图片向量增加至D+1维,将W也增加至K\times (D+1),将其第D+1列作为原本的b,则可以将函数简化为

f(x,W) = Wx

线性分类器的直观理解:

第一种理解:

对于W的第i行,其每一列的元素分别就是D维图片向量对应像素对第i行对应标签的贡献权重,当权重为正时,就说明该位置(包含了长、宽、颜色三个信息)的像素值对该标签分类是正贡献,且越高越好,权重为负时相反

同时,我们可以将第i行这一行向量映射回图片三维数组,从而得到该标签所对应的图片模版,可以直观地观察到其分类喜好

第二种理解:

对于第i个标签,如果我们将所有令f(x,W) 的第i个分量为0的所有x向量组成一个平面,那么这个平面就是第i个标签的分界面,虽然高维空间不好想象,但我们可以将D维空间当做二维平面来理解,此时分界面必有一边会使得第i个分量的值>0(则这个区域就是第i个标签所属的区域),而另一面会使得第i个分量的值<0(第i个标签所不属于的区域)。那么对于K个标签来说,就会有K个分界面,将D维空间线性划分为K个标签所属的区域,因此我们只需要判断输入图像向量落入哪个区间,即可预测其标签

Loss Function(损失函数):

对于不同的权重矩阵W,我们需要对其给出的预测向量评分,从而评价其预测结果的好坏,这里,我们使用Loss Function作为评分标准,Loss越大时,预测结果越差,Loss越小时,预测结果越好

Multiclass Support Vector Machine Loss(多类支持向量机损失):

这是众多形式Loss中的一种,被称为折叶损失(hinge loss),具体定义式为:

L_i = \sum_{j \ne y_i}{max{(0,s_j-s_{y_i}+\Delta)}}

L=\frac{1}{N}\sum_{i=1}^{N}{L_i}

其中L_i 是对第i个图片向量预测的损失,L 是总损失,y_i 是x_i所对应的标签所对应的维度,j是遍历维度,s_j是预测向量在j维度所对应的预测值,s_{y_i}是预测向量在y_i维度所对应的预测值,\Delta是自定义超参数

max{(0,s_i-s_{y_i}+\Delta)} 的含义就是,我们遍历预测向量的每一维度(除了正确标签所对应的维度),即遍历的都是错误标签所对应的维度,若正确标签得分减去该错误标签得分的差少于\Delta ,则说明预测得分的差距不够大,对Loss作出了一定贡献,否则对Loss的贡献为0

由此可见,\Delta是我们所预期的正确维度与错误维度所需要拉开的差距

正则化(Regularization):

上面的损失函数会有一个问题,使得分类器能够正确分类数据集内每个数据的W并不唯一,我们希望能向W中某些特定的权重添加一些偏好,对其他权重则不添加,从而来更好地区分每个满足分类Loss为0的W,即向损失函数增加一个正则化惩罚R(W) 部分

通常采用L2范式,即:

R(W) = \sum_k\sum_lW_{k,l}^2

即对W中所有元素平方后求和作为正则化惩罚,它不是数据的函数,仅仅是权重的函数

至此,我们可以给出完整的多类SVM损失函数,由数据损失和正则化损失组成,即

L = \frac{1}{N}\sum_i{L_i}+\lambda R(W)

其中\lambda也是超参数,需要具体确定正则化惩罚的的权重

L2正则化最好的性质就是能对大数值权重进行惩罚,进而提升模型的泛化能力,因为平方项对大数值的惩罚更为严厉,导致没有哪个维度能独自于整体有过大的影响,鼓励分类器将所有维度的特征都用上,最后体现出来就是训练出来的模型的权重参数更小更分散

需要注意的是,偏差b没有这样的效果,因为它并不影响输入向量的维度所造成的得分影响,因此通常只对权重W进行正则化,而不正则化b

由于正则化惩罚的存在,导致Loss通常不为0,因为当且仅当W=0时Loss才为0

Softmax分类器

Softmax分类器的损失函数与SVM不同,本质上是逻辑回归分类器在面对多个分类时的拓展,其Loss称为交叉熵损失(cross-entropy loss),公示如下:

L_i = -log(\frac{e^{f_{y_i}}}{\sum_j{e^{f_j}}}) , 又等价于 L_i = -f_{y_i} + log(\sum_j{e^{f_j}})

其中f_j为标签得分向量的第j维分量

softmax函数:

f_j(z) = \frac{e^{z_j}}{\sum_k{e^{z_k}}}

简单理解为函数对第j个维度进行压缩,输出一个在[0,1] 的值,可以把它看作分类到该标签的概率

cross-entropy Loss的合理性解释:

信息论解释:

定义在“真实”分布p与估计分布q之间的交叉熵如下:

H(p,q) = -\sum_xp(x)logq(x)

显然,当估计分布q越接近真实分布p时,H越小

而我们的Loss函数公式恰好对应的就是真实概率分布p(假设是标签j,那么就是第j维为1,其余维度全为0的向量),与估计分类概率分布q,即预测出来的标签得分向量通过指数归一化处理的映射出来的概率分布,又由于p(x)只在x=j时为1,其余为0,因此H的求和只保留了x=j的项,即q(x)所对应的就是\frac{e^{f_{y_i}}}{\sum_je^{f_j}}

所以我们最小化Loss时,就是在使得q分布逐渐逼近p分布

有,交叉熵可以写成KL散度(KL divergence)的形式,即

H(p,q) = H(p) + D_{KL}(p||q)

H(p) = -\sum{p(x)log{p(x)}} = 0

所以本质上就是对分布p与分布q的KL散度做最小化,而KL散度正是用来判断两个分布在信息上的的相似程度的

概率论解释:

给出公式,在给定x_i,W的条件下,我们预测出y_i的概率为

P(y_i|x_i,W) = \frac{e^{f_{y_i}}}{\sum_j{e^{f_j}}}

而我们的Loss可以看作是归一化处理后,正确标签的负对数概率,我们在最小化这个值,就是在最大化正确标签的概率,从而去求出其对应的W参数,即可以看作是在对W参数进行最大似然估计(MLE)

实际计算时的注意事项:

对于sofmax函数来说,存在指数即有可能存在大数值,而对大数值进行除法会导致数值计算的不稳定,因此我们需要对公式进行等价变形:

\frac{e^{f_{y_i}}}{\sum_j{e^{f_j}}} = \frac{Ce^{f_{y_i{}}}}{C\sum_je^{f_j}} = \frac{e^{f_{y_i}+logC}}{\sum_j{e^{f_j+logC}}}

这里,我们选定logC = -max_jf_j,将所有分量的元素平移,使得最大值为0,从而避免了单个大数值的出现

SVM与Softmax的比较:

两种分类器都是接受输入图片向量,然后输出对应的评分向量f

但SVM输出的f中的元素值被看作是分类评分,它的损失函数鼓励正确标签的得分至少要比错误标签的得分高出\Delta

而Softmax输出的f中的元素值被看作是该标签对应的未进行归一化的对数概率,鼓励正确标签的概率变高,而错误标签的概率变低

因此,SVM的计算是没有标定的,无法对各个维度的评分值给出直观地解释,而softmax的输出可以简单地理解为该维度标签所对应的“概率”

在softmax中,输出的概率的分布的集中/离散程度是会由正则化参数\lambda 直接决定的

\lambda越大,权重W被惩罚的越多,数值越小,这样算出来的各个分量的分数也会更小,则导致各个标签的概率更为接近,也就是概率的分布更为分散了。随着\lambda的增大,最后输出的概率会接近于均匀分布

最优化问题

有了上述的前提,我们现在所需要做的就是,在给定超参数的前提下,如何去找到使得Loss最小的W参数

梯度下降法:

在给定数据集输入的前提下,我们可以将W矩阵中的所有参数看作Loss函数的变量,假设有n=K\times (D+1)个变量,那么Loss函数就是一个n维函数,最小化Loss问题其实就是一个函数优化问题,实际这个函数可能非常复杂,因此我们无法通过求驻点的方法求出极小值,则需要使用梯度下降法

我们求出Loss函数在给定x_i这一点关于n个变量的偏导数,这n个导数组成的向量称为梯度,梯度向量所指向的方向就是在该点处函数图像上升最陡峭的地方,如果我们向着这个方向的反方向前进一小步(这里称作步长,又学习率,是一个重要超参数),那么就会以最快的速度下降,然后再重复迭代,直到落入局部极小值

即有公式:

W_t = W_{t-1} - \alpha\nabla_W L(x_i,y_i,W_{t-1})

其中W_t为第t次梯度下降迭代更新的权重矩阵,\alpha为学习率

梯度计算方法:

1.数值计算梯度,采取有限微分计算梯度,精度低,运算量大,不推荐

2.分析计算梯度,直接使用公式计算偏导数,即有公式:

\nabla_WL(W) = \frac{1}{N}\sum_{i=1}^{N}\nabla_WL_i(x_i,y_i,W) + \lambda \nabla_WR(W)

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

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

相关文章

windows wsl ubuntu 如何安装 open-jdk8

安装步骤 jdk dhd:~$ java -version Command java not found, but can be installed with: sudo apt install openjdk-11-jre-headless # version 11.0.20.11-0ubuntu1~22.04, or sudo apt install default-jre # version 2:1.11-72build2 sudo apt install op…

Javascript进程和线程通信

JavaScript 中的进程通信&#xff08;IPC&#xff09;和线程通信是实现高性能、高并发应用的核心技术&#xff0c;尤其在处理 CPU 密集型任务或跨环境数据交互时至关重要。以下从底层机制到应用场景的详解&#xff1a;&#x1f9e9; ​​一、进程通信&#xff08;Inter-Process…

堆堆堆,咕咕咕

1.找TopK问题要找到最前面的k个元素void swap(int *a,int *b) {int temp*a;*a*b;*btemp; } //向下调整最小堆 void minheapify(int arr[],int n,int index) {int left2*index1;int right2*index2;int smallestindex;if(left<n&&arr[left]<arr[smallest]) smalles…

n8n教程分享,从Github读取.md文档内容

从上一篇我们了解到了如何安装 n8n 那么这节课我们尝试从github的个人仓库获取某个文件的内容 目标如下 content/business/1.how-to-use-money.mdx 总流程图 流程详解 第1步&#xff1a;申请 GitHub Personal Access Token (Classic) 在gitrhub 个人 设置选项 申请 GitHub P…

分布式ID与幂等性面试题整理

分布式ID与幂等性面试题整理 文章目录分布式ID与幂等性面试题整理一、分布式ID1. 为什么需要分布式ID&#xff1f;2. 分布式ID的核心要求3. 常见分布式ID方案(1) UUID(2) 数据库自增(3) Redis自增(4) 雪花算法(Snowflake)(5) 美团Leaf/百度UidGenerator4. 雪花算法详解二、幂等…

node.js学习笔记1

目录 Node.js是什么 Node.js下载与安装 Buffer缓冲区 一些计算机硬件基础 程序运行的基本流程 Node.js是什么 node.js是一个JavaScript运行环境&#xff0c;或者说&#xff0c;node.js是一个可以运行JavaScript的软件。 可以用于开发服务端、桌面端、工具类应用。 服务器…

游戏开发日志

我来为您逐行详细讲解这个 ViewMgr.cs 文件。这是一个Unity游戏中的视野管理系统&#xff0c;用于优化游戏性能。## 文件结构概览这个文件主要包含以下几个部分&#xff1a; 1. 数据结构和接口定义 2. 视野管理器 ViewMgr 类 3. 工具类 ViewTools让我逐行为您讲解&#xff1a;#…

使用 PlanetScope 卫星图像绘制水质参数:以莫干湖为例

1.数据采集 我使用ArcGIS Pro 中的Planet Imagery插件下载了 2023 年 6 月 25 日的安卡拉莫干湖卫星图像。 图 1&#xff1a;使用 Planet 插件下载卫星图像 图 2&#xff1a;下载图像的日期和传感器选择 我查阅的研究中指出&#xff0c;使用无降水时期的卫星图像对于水质测定…

Docker部署前后端分离项目——多项目共享环境部署

目录 一、简介 二、文件目录结构 三、前端部署流程&#xff08;多nginx&#xff09; 3.1 前端打包 3.2 编写部署文件——项目1&#xff08;consult-system&#xff09; 3.3 编写部署文件——项目2&#xff08;person-system&#xff09; 3.4 前端部署至linux服务器 3.5…

学习笔记(39):结合生活案例,介绍 10 种常见模型

学习笔记(39):结合生活案例&#xff0c;介绍 10 种常见模型线性回归只是机器学习的 “冰山一角”&#xff01;根据不同的任务场景&#xff08;分类、回归、聚类等&#xff09;&#xff0c;还有许多强大的模型可以选择。下面我用最通俗易懂的语言&#xff0c;结合生活案例&#…

BabyAGI 是一个用于自构建自主代理的实验框架

这个最新的 BabyAGI 是一个用于自构建自主代理的实验框架 核心是一个新的函数框架 &#xff08;functionz&#xff09;&#xff0c;用于存储、管理和执行数据库中的函数。它提供了一个基于图形的结构&#xff0c;用于跟踪导入、依赖函数和身份验证密钥&#xff0c;并具有自动加…

商业秘密视域下计算机软件的多重保护困境

作者&#xff1a;邱戈龙、柯坚豪重庆商业秘密律师广东长昊律师事务所引言&#xff1a;计算机软件保护的复杂性 在商业秘密保护的宏大版图中&#xff0c;计算机软件因其技术密集性和创新性占据着特殊地位。软件的真正价值不仅在于其代码本身&#xff0c;更在于其背后的流程、逻…

深入理解 Spring Boot 自动配置原理

Spring Boot 之所以能“开箱即用”&#xff0c;其核心就在于 自动配置机制&#xff08;Auto Configuration&#xff09;。本文将深入剖析 Spring Boot 自动配置的工作原理&#xff0c;从注解入手&#xff0c;再到底层的源码机制&#xff0c;揭开 Spring Boot 背后的“魔法”。 …

Ubuntu18.04开机启动执行脚本

#!/bin/bash # 运行 .NET Core 应用程序 dotnet /home/bruce/atg/SmartConsole.dll &# 打开浏览器 firefox 给文件权限sudo chmod 777 start.sh运行gnome-session-properties打开系统自带的一个启动程序

c语言进阶 字符函数和字符串函数

字符函数和字符串函数字符函数和字符串函数1. strlenstrlen 函数详解模拟实现1.计数器方式2.不能创建临时变量计数器&#xff08;递归&#xff09;3.指针-指针的方式2. strcpystrcpy 函数详解模拟实现3. strcatstrcat 函数详解模拟实现4. strcmpstrcmp 函数详解模拟实现5. strn…

(LeetCode 每日一题) 1233. 删除子文件夹 (排序)

题目&#xff1a;1233. 删除子文件夹 思路&#xff1a;排序&#xff0c;时间复杂度0(L*nlogn)。 文件夹a的子文件b&#xff0c;b字符串字典序列一定是大于a的&#xff0c;所以直接将字符串数组folder升序排序。每次只需判断当前字符串&#xff0c;是否是父文件夹数组v最后一个…

集成算法学习bagging,boosting,stacking

baggibg(rf随机森林) adaboostibg 用来展示 Project Jupyter | Home 展示源码 Eclipse IDE | The Eclipse Foundation Eclipse 下载 |Eclipse 基金会 教程8-Adaboost决策边界效果_哔哩哔哩_bilibili (23 封私信) 图解机器学习神器&#xff1a;Scikit-Learn - 知乎 Baggi…

HOOPS SDK赋能PLM:打造全生命周期3D数据管理与协作能力

在制造业和工业领域&#xff0c;产品全生命周期管理&#xff08;PLM&#xff09; 已成为驱动企业数字化转型、提升创新力与运营效率的核心引擎。一个高效的PLM平台不仅需要管理海量的设计数据&#xff0c;还必须在设计、制造、供应链、销售和服务等多个环节之间无缝流转信息&am…

解决 Selenium 页面跳转过快导致的内容获取问题:从原理到实践

在使用 Selenium 进行网页自动化操作时&#xff0c;很多开发者都会遇到一个头疼的问题&#xff1a;页面还没加载完&#xff0c;代码就已经执行到下一句了。结果要么是元素找不到&#xff0c;要么是获取的内容不完整&#xff0c;甚至直接抛出异常。今天我们就来聊聊如何优雅地解…

【Python练习】051. 编写一个函数,实现简单的定时器功能

051. 编写一个函数,实现简单的定时器功能 051. 编写一个函数,实现简单的定时器功能 代码说明: 示例运行: 扩展功能 代码说明: 实现Python定时器的几种方法 051. 编写一个函数,实现简单的定时器功能 以下是一个简单的Python函数,用于实现定时器功能。这个定时器可以设置…