当前位置: 首页 > java >正文

CS231n-2017 Lecture3线性分类器笔记

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

上节讲到,图片可以被展开成一个向量,对于这个向量,假设它有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中的一种,具体定义式为:

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

正则化(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)

http://www.xdnf.cn/news/15718.html

相关文章:

  • 时序数据库选型实战:Apache IoTDB技术深度解析
  • 用逻辑回归(Logistic Regression)处理鸢尾花(iris)数据集
  • 移除debian升级后没用的垃圾
  • 电商商品综合排序:从需求分析到实时计算的全方位指南
  • 鸿蒙与web混合开发双向通信
  • The Missing Semester of Your CS Education 学习笔记以及一些拓展知识(三)
  • HTTP性能优化实战
  • Matplotlib和Plotly知识点(Dash+Plotly分页展示)
  • Android 开发实战:从零到一集成 espeak-ng 实现中文离线 TTS(无需账号开箱即用)
  • Qt笔记整理(1)
  • CCF编程能力等级认证GESP—C++5级—20250628
  • 使用nvm安装node、npm、pnpm以及编译项目教程
  • SpringBoot 3.0 挥别 spring.factories,拥抱云原生新纪元
  • 基于大模型打造故障预警服务器巡检机器人
  • Jetpack Compose中的Modifier:UI元素的装饰与行为扩展
  • 3-大语言模型—理论基础:生成式预训练语言模型GPT(代码“活起来”)
  • [论文阅读] 软件工程 | 用模糊逻辑“解锁”项目成功:告别非黑即白的评估时代
  • 网络基础DAY13-NAT技术
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 基于wordcloud库实现词云图
  • OSPF高级特性之Overflow
  • 浅谈Rust语言特性
  • 1 渗透基础
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - snowNLP库实现中文情感分析
  • 【unitrix】 6.7 基本结构体(types.rs)
  • Python 使用期物处理并发(使用concurrent.futures模块下载)
  • Leetcode刷题营第三十三题:对称二叉树
  • 五大开源OCR开源框架评估01-Tesseract:OCR 领域的远古巨神
  • Docker安装教程
  • GaussDB join 连接的用法
  • 7.18 Java基础 |