文章目录

  • 从图像到标签分值的映射
  • 多类 SVM 分类器
  • Softmax 分类器
  • SVM 和 Softmax的比较

从图像到标签分值的映射

一个线性映射:

f(xi,W,b)=Wxi+b\displaystyle f(x_i,W,b)=Wx_i+bf(xi​,W,b)=Wxi​+b

其中,参数 WWW 为权重(weights),bbb 称为偏差向量(bias vector)

一个将图像映射到分类分值的例子:

  • 为了便于可视化,假设图像只有4个像素值,有3个分类。

  • 首先将图像像素拉伸为一个列向量,与 WWW 进行矩阵乘,再加上偏置项 bbb,得到各个分类的分值。

  • 需要注意的是,由于权值没有训练到位,猫分类的分值非常低。

多类 SVM 分类器

针对第 iii 个数据的 jjj 类 SVM 的损失函数定义如下:

Li=∑j̸=yimax(0,sj−syi+Δ)\displaystyle L_i=\sum_{j\not=y_i}max(0,s_j-s_{y_i}+\Delta)Li​=j̸​=yi​∑​max(0,sj​−syi​​+Δ)

使用多类 SVM 分类时,正确分类的分数需要比其他不正确的分类分数高出 边界值 delta(Δ\DeltaΔ)。其他分类分数进入了红色的区域时,就开始计算损失。在红色区域之前,损失值为0。

SVM 评分函数中,将输出 sj=f(xi,W)js_j=f(x_i,W)_jsj​=f(xi​,W)j​ 作为第 iii 个数据针对第 jjj 个类别的得分,所以分类损失的详细定义为:

Li=∑j̸=yimax(0,wjTxi−wyiTxi+Δ)\displaystyle L_i=\sum_{j\not=y_i}max(0,w^T_jx_i-w^T_{y_i}x_i+\Delta)Li​=j̸​=yi​∑​max(0,wjT​xi​−wyi​T​xi​+Δ)

加上正则化项:

L=1N∑i∑j̸=yi[max(0,f(xi;W)j−f(xi;W)yi+Δ)]+λ∑k∑lWk,l2L=\frac{1}{N}\sum_i\sum_{j\not=y_i}[max(0,f(x_i;W)_j-f(x_i;W)_{y_i}+\Delta)]+\lambda \sum_k \sum_l W^2_{k,l}L=N1​i∑​j̸​=yi​∑​[max(0,f(xi​;W)j​−f(xi​;W)yi​​+Δ)]+λk∑​l∑​Wk,l2​

其中:

  • max(0,−)max(0,-)max(0,−) 函数,它常被称为 折叶损失(hinge loss)。有时候会听到人们使用 平方折叶损失SVM(即 L2-SVM),它使用的是 max(0,−)2max(0,-)^2max(0,−)2,将更强烈(平方地而不是线性地)地惩罚过界的边界值。可以通过交叉验证来决定到底使用哪个。

  • 在绝大多数情况下设置 Δ=1.0\Delta=1.0Δ=1.0 都是安全的。超参数 Δ\DeltaΔ 和λ\lambdaλ 一起控制损失函数中的数据损失(data loss)和正则化损失(regularization loss)之间的权衡。

  • 不同分类分值之间的边界的具体值(比如 Δ=1\Delta=1Δ=1 或 Δ=100\Delta=100Δ=100)从某些角度来看是没意义的,因为权重自己就可以控制差异变大和缩小。也就是说,真正的权衡是我们允许权重能够变大到何种程度,通过正则化强度 λ\lambdaλ 来控制,详见:正则化方法 。

Softmax 分类器

Softmax 分类器可以理解为 逻辑回归分类器 面对多个分类的一般化归纳,输出归一化的分类概率。

在Softmax分类器中,函数映射 f(xi;W)=Wxif(x_i;W)=Wx_if(xi​;W)=Wxi​ 保持不变,但将这些评分值视为每个分类的未归一化的对数概率,并且将折叶损失(hinge loss)替换为交叉熵损失(cross-entropy loss)。公式如下:

Li=−log(efyi∑jefj)L_i=-log(\frac{e^{f_{y_i}}}{\sum_je^{f_j}}) Li​=−log(∑j​efj​efyi​​​)

或等价的:

Li=−fyi+log(∑jefj)L_i=-f_{y_i}+log(\sum_je^{f_j})Li​=−fyi​​+log(j∑​efj​)

其中:

  • 使用 fjf_jfj​ 来表示分类评分向量 fff 中的第 jjj 个元素。

  • 函数 fj(z)=ezj∑kezkf_j(z)=\frac{e^{z_j}}{\sum_ke^{z_k}}fj​(z)=∑k​ezk​ezj​​ 被称作 softmax 函数,其输入值是一个向量,向量中元素为任意实数的评分值(zzz 中的),函数对其进行压缩,输出一个向量,其中每个元素值在 0 到 1 之间,且所有元素之和为 1。

对数的基本性质:

  • 函数拆分:
    ln⁡(ab)=ln⁡(a)+ln⁡(b)\ln(ab)=\ln(a)+\ln(b)ln(ab)=ln(a)+ln(b)
  • log(xxx) vs log(1/x1/x1/x) :
    log(x)=−log(1/x)log(x) = -log(1/x)log(x)=−log(1/x)
    图中,蓝线为 ln(1/x1/x1/x) ,黑线为 ln(xxx)

数值归一化:

  • 编程实现 softmax 函数计算的时候,中间项 efyie^{f_{y_i}}efyi​​ 和 ∑jefj\sum_j e^{f_j}∑j​efj​ 因为存在指数函数,所以数值可能非常大。

  • 除以大数值可能导致数值计算的不稳定,所以使用归一化非常重要。如果在分式的分子和分母都乘以一个常数 CCC,并把它变换到求和之中,就能得到一个从数学上等价的公式:

efyi∑jefj=CefyiC∑jefj=efyi+logC∑jefj+logC\frac{e^{f_{y_i}}}{\sum_je^{f_j}}=\frac{Ce^{f_{y_i}}}{C\sum_je^{f_j}}=\frac{e^{f_{y_i}+logC}}{\sum_je^{f_j+logC}}∑j​efj​efyi​​​=C∑j​efj​Cefyi​​​=∑j​efj​+logCefyi​​+logC​

  • 代码实现如下:
f = np.array([123, 456, 789]) # 例子中有3个分类,每个评分的数值都很大
p = np.exp(f) / np.sum(np.exp(f)) # 不妙:数值问题,可能导致数值爆炸# 那么将f中的值平移到最大值为0:
f -= np.max(f) # f becomes [-666, -333, 0]
p = np.exp(f) / np.sum(np.exp(f)) # 现在OK了,将给出正确结果

SVM 和 Softmax的比较

损失函数的不同:

  • SVM 分类器使用的是 折叶损失(hinge loss),有时候又被称为 最大边界损失(max-margin loss)

  • Softmax 分类器使用的是 交叉熵损失(corss-entropy loss)

对分类分值的不同解释:

  • 针对一个数据点,两个分类器都计算了同样的分值向量 fff

  • SVM分类器将 fff 看做是分类评分,它的损失函数鼓励正确的分类(本例中是蓝色的类别2)的分值比其他分类的分值高出至少一个边界值。

  • Softmax分类器将 fff 看做是每个分类没有归一化的对数概率,鼓励正确分类的归一化的对数概率变高,其余的变低。

  • SVM的最终的损失值是 1.58,Softmax 的最终的损失值是 0.452,但要注意这两个数值没有可比性。只在给定同样数据,在同样的分类器的损失值计算中,它们才有意义。

在实际使用中,SVM 和 Softmax 经常是相似的:

  • 通常说来,两种分类器的表现差别很小。

  • 相对于 Softmax 分类器,SVM 更加局部目标化(local objective),这既可以看做是一个特性,也可以看做是一个劣势。

  • SVM 对于各个分类的得分细节并不关心:分数是 [10,−100,−100][10, -100, -100][10,−100,−100] 或者 [10,9,9][10, 9, 9][10,9,9],对于 SVM 来说没什么不同,只要分差超过边界值,那么损失值就等于 0,不会超过限制去细微地操作具体分数。

  • 对于 softmax 分类器,情况则不同。对于 [10,9,9][10, 9, 9][10,9,9] 来说,计算出的损失值就远远高于 [10,−100,−100][10, -100, -100][10,−100,−100] 的。换句话来说,softmax 分类器对于分数是永远不会满意的。

分类评分函数 score function相关推荐

  1. 深入理解深度学习——注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)

    分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...

  2. 【数据挖掘】数据挖掘算法 组件化思想 ( 模型或模式结构 | 数据挖掘任务 | 评分函数 | 搜索和优化算法 | 数据管理策略 )

    文章目录 一. 数据挖掘算法组件化 二. 组件一 : 模型或模式结构 三. 组件二 : 数据挖掘任务 四. 组件三 : 评分函数 五. 组件四 : 搜索和优化算法 六. 组件五 : 数据管理策略 七. ...

  3. Score Function Trick及其在机器学习中的应用

    引 机器学习中有很多有意思的 Trick,Deepmind 的 Shakir Mohamed (http://blog.shakirm.com) 维护了一个高质量的博客,其中写了一系列的机器学习 Tr ...

  4. php遍历子分类的函数,emlog程序获取主分类下的所有子分类ID函数

    emlog程序获取主分类下的所有子分类ID函数 蓝叶    网站设计    2021-01-04    208    0评论 emlog程序在制作模版时,需要增加一些自定义的列表调用,只设置主分类ID ...

  5. MHT: Basic Methods for Data Association(二)Track Score Function

    文章目录 6.2 Track Score Function 6.2.1 Likelihood Ratio Development 6.2.2 Track Score Initation(跟踪分数启动) ...

  6. python打分函数_自定义评分函数RandomForestRegress

    RandomizedSearchCV中的评分函数将只计算网格中指定的每个超参数组合的模型预测数据的得分,测试折叠中平均得分最高的超参数获胜.在 它不会以任何方式改变RandomForest内部算法的行 ...

  7. 注意力评分函数(掩蔽softmax操作,加性注意力,缩放点积注意力)

    将注意力汇聚的输出计算可以作为值的加权平均,选择不同的注意力评分函数会带来不同的注意力汇聚操作. 当查询和键是不同长度的矢量时,可以使用可加性注意力评分函数.当它们的长度相同时,使用缩放的" ...

  8. 超级分类汇总函数——SUBTOTAL

    前言 前面已经介绍了Excel在工作中常用的统计函数,但是在众多的统计函数中,有一种函数集合了上述常用的统计函数,它就是SUBTOTAL函数,该函数是功能强大的分类汇总统计函数. SUBTOTAL函数 ...

  9. 【 Verilog HDL 】函数(function)与任务(task)简单介绍

    背景 关于函数和任务,是我这几天一直想写的内容,原因在于我上篇博文:Verilog HDL 使用规范(一),最后提到的问题,关于代码书写的规范中,要求:用一个函数(function)来代替表达式的多次 ...

最新文章

  1. 2022年十大AI预测
  2. Nilearn教程系列(2)-3D和4D niimgs:处理和可视化
  3. 0-1背包 java_0-1背包问题,java的动态规划如题,代码如下public
  4. Dubbo管理控制台的安装
  5. linux Ubuntu apache2 伪静态设置
  6. java 修改商品如何实现的_Javaweb-案例练习-5-商品数量修改和合计金额实现
  7. ASP.NET 应用程序遭遇Server Application Unavailable问题的解决的方法
  8. MATLAB画图命令zz
  9. git 命令git 地址_这是我上周使用的所有Git命令及其作用。
  10. 【转】Java 项目UML反向工程转化工具
  11. 2017 Multi-University Training Contest - Team 4:1003. Counting Divisors(积性函数)
  12. npp夜光数据介绍 viirs_NPP-VIIRS年度夜间灯光数据的合成方法与验证
  13. .net RestSharp使用
  14. 几点个人信息安全感受
  15. 这是啥SQL,室友看了人傻了
  16. 使用HTML语言和CSS开发商业站点_利用CSS3制作网页动画
  17. sdcc 51 迁移记录
  18. 《红楼梦》中四大家族到底犯了什么罪,导致了「白茫茫大地真干净」的结局?
  19. PicGo+GitHub图床+微博图床
  20. oracle 怎么看监听文件,【学习笔记】Oracle11G关于监听文件位置与监听文件大小限制...

热门文章

  1. 电脑怎么连蓝牙耳机_魅族蓝牙耳机POP2说明书 魅族蓝牙耳机POP2怎么样
  2. 如何更规范化编写 Java 代码
  3. 【带你入门】java网络编程
  4. 【Spring注解系列06】FactoryBean注入对象用法
  5. php 二叉树判断节点的位置,PHP实现判断二叉树是否对称的方法
  6. java 多线程下载器_Java多线程的下载器(1)
  7. 毕业后两三月的本科毕业生,他们都怎么样了
  8. 二分大法| 求X的开方,结果一个公式解决! (力扣69.X 的平方根)
  9. webpack从入门到精通(一)初体验
  10. 通过AOP控制事务的案例