CS231n——机器学习算法——线性分类(下:Softmax及其损失函数)

2023-11-04

在前两篇笔记中,基于线性分类上线性分类中继续记笔记。

1. Softmax分类器

SVM和Softmax分类器是最常用的两个分类器,Softmax的损失函数与SVM的损失函数不同。对于学习过二元逻辑回归分类器的读者来说,Softmax分类器就可以理解为逻辑回归分类器面对多个分类的一般化归纳。

SVM将输出 f ( x i , W ) f(x_i,W) f(xi,W)作为每个分类的评分(因为无定标,所以难以直接解释)。与SVM不同,Softmax的输出(归一化的分类概率)更加直观,并且从概率上可以解释,这一点后文会讨论。

在Softmax分类器中,函数映射 f ( x i ; W ) = W x i f(x_i;W)=Wx_i f(xi;W)=Wxi保持不变,但将这些评分值视为每个分类的未归一化的对数概率,并且将折叶损失(hinge loss)替换为交叉熵损失(cross-entropy loss)。 公式如下:
在这里插入图片描述
或等价为
在这里插入图片描述
在上式中,使用 f j f_j fj来表示分类评分向量 f f f中的第j个元素。和之前一样,整个数据集的损失值是数据集中所有样本数据的损失值 L i L_i Li的均值与正则化损失R(W)之和。

其中函数 f j ( z ) = e z j ∑ k e z k f_j(z)=\frac{e^{z_j}}{\sum_ke^{z_k}} fj(z)=kezkezj被称作softmax 函数:

  • 其输入值是一个向量,向量中元素为任意实数的评分值(z中的),函数对其进行压缩,输出一个向量,其中每个元素值在0到1之间,且所有元素之和为1。所以,包含softmax函数的完整交叉熵损失看起唬人,实际上还是比较容易理解的。

信息理论视角:

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

H ( p , q ) = − ∑ x p ( x ) l o g q ( x ) \displaystyle H(p,q)=-\sum_xp(x) logq(x) H(p,q)=xp(x)logq(x)

因此,Softmax分类器所做的就是最小化在估计分类概率(就是上面的 e f y i / ∑ j e f j e^{f_{y_i}}/\sum_je^{f_j} efyi/jefj)和“真实”分布之间的交叉熵,在这个解释中, “真实”分布就是所有概率密度都分布在正确的类别上(比如:p=[0,…1,…,0]中在 y i y_i yi的位置就有一个单独的1)。
还有,既然交叉熵可以写成熵和相对熵(Kullback-Leibler divergence) H ( p , q ) = H ( p ) + D K L ( p ∣ ∣ q ) H(p,q)=H(p)+D_{KL}(p||q) H(p,q)=H(p)+DKL(pq),并且delta函数p的熵是0,那么就能等价的看做是对两个分布之间的相对熵做最小化操作。换句话说,交叉熵损失函数“想要”预测分布的所有概率密度都在正确分类上。

注:Kullback-Leibler差异(Kullback-Leibler Divergence)也叫做相对熵(Relative Entropy),它衡量的是相同事件空间里的两个概率分布的差异情况。

概率论解释:

先看下面的公式:
在这里插入图片描述

可以解释为是给定图像数据 x i x_i xi,以 W W W为参数,分配给正确分类标签 y i y_i yi的归一化概率。为了理解这点,请回忆一下Softmax分类器将输出向量 f f f中的评分值解释为没有归一化的对数概率。 那么以这些数值做指数函数的幂就得到了没有归一化的概率,而除法操作则对数据进行了归一化处理,使得这些概率的和为1。从概率论的角度来理解,我们就是在最小化正确分类的负对数概率,这可以看做是在进行最大似然估计(MLE)。 该解释的另一个好处是,损失函数中的正则化部分R(W)可以被看做是权重矩阵W的高斯先验,这里进行的是最大后验估计(MAP)而不是最大似然估计。提及这些解释只是为了让读者形成直观的印象,具体细节就超过本课程范围了。

2. 实操注意事项

数值稳定

编程实现softmax函数计算的时候,中间项 e f y i 和 ∑ j e f j e^{f_{y_i}}和\sum_j e^{f_j} efyijefj因为存在指数函数,所以数值可能非常大。除以大数值可能导致数值计算的不稳定,所以学会使用归一化技巧非常重要。如果在分式的分子和分母都乘以一个常数C,并把它变换到求和之中,就能得到一个从数学上等价的公式:
在这里插入图片描述
C的值可自由选择,不会影响计算结果,通过使用这个技巧可以提高计算中的数值稳定性。通常将C设为 l o g C = − m a x j f j logC=-max_jf_j logC=maxjfj。该技巧简单地说,就是应该将向量 f f f中的数值进行平移,使得最大值为0。代码实现如下:

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分类器使用的是折叶损失(hinge loss),有时候又被称为最大边界损失(max-margin loss)。
  • Softmax分类器使用的是交叉熵损失(corss-entropy loss)。Softmax分类器的命名是从softmax函数那里得来的,softmax函数将原始分类评分变成正的归一化数值,所有数值和为1,这样处理后交叉熵损失才能应用。
    注意,从技术上说“softmax损失(softmax loss)”是没有意义的,因为softmax只是一个压缩数值i的函数y。但是在这个说法常常被用来做简称。

3. SVM和Softmax的比较

在这里插入图片描述

针对一个数据点,SVM和Softmax分类器的不同处理方式的例子。

两个分类器都计算了同样的分值向量 f f f(本节中是通过矩阵乘来实现)。不同之处在于对 f f f中分值的解释:

  • SVM分类器将它们看做是分类评分,它的损失函数鼓励正确的分类(本例中是蓝色的类别2)的分值比其他分类的分值高出至少一个边界值。
    Softmax分类器将这些数值看做是每个分类没有归一化的对数概率,鼓励正确分类的归一化的对数概率变高,其余的变低。

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

  • Softmax分类器为每个分类提供了“可能性”:SVM的计算是无标定的,而且难以针对所有分类的评分值给出直观解释。Softmax分类器则不同,它允许我们计算出对于所有分类标签的可能性。

举个例子

针对给出的图像,SVM分类器可能给你的是一个[12.5, 0.6, -23.0]对应分类“猫”,“狗”,“船”,而softmax分类器可以计算出这三个标签的”可能性“是[0.9, 0.09, 0.01],这就让你能看出对于不同分类准确性的把握。

为什么我们要在”可能性“上面打引号呢?这是因为可能性分布的集中或离散程度是由正则化参数λ直接决定的,λ是你能直接控制的一个输入参数。

举个例子

假设3个分类的原始分数是[1, -2, 0],那么softmax函数就会计算:
在这里插入图片描述
现在,如果正则化参数λ更大,那么权重W就会被惩罚的更多,然后他的权重数值就会更小。这样算出来的分数也会更小,假设小了一半吧[0.5, -1, 0],那么softmax函数的计算就是:
在这里插入图片描述
现在看起来,概率的分布就更加分散了。还有,随着正则化参数λ不断增强,权重数值会越来越小,最后输出的概率会接近于均匀分布。这就是说,softmax分类器算出来的概率最好是看成一种对于分类正确性的自信。和SVM一样,数字间相互比较得出的大小顺序是可以解释的,但其绝对值则难以直观解释。

在实际使用中

SVM和Softmax经常是相似的:通常说来,两种分类器的表现差别很小,不同的人对于哪个分类器更好有不同的看法。

  • 相对于Softmax分类器,SVM更加“局部目标化(local objective)”,这既可以看做是一个特性,也可以看做是一个劣势。
    考虑一个评分是[10, -2, 3]的数据,其中第一个分类是正确的。那么一个SVM( Δ = 1 \Delta =1 Δ=1)会看到正确分类相较于不正确分类,已经得到了比边界值还要高的分数,它就会认为损失值是0。SVM对于数字个体的细节是不关心的:如果分数是[10, -100, -100]或者[10, 9, 9],对于SVM来说没设么不同,只要满足超过边界值等于1,那么损失值就等于0。

  • 对于softmax分类器,情况则不同。对于[10, 9, 9]来说,计算出的损失值就远远高于[10, -100, -100]的。换句话来说,softmax分类器对于分数是永远不会满意的:正确分类总能得到更高的可能性,错误分类总能得到更低的可能性,损失值总是能够更小。但是,SVM只要边界值被满足了就满意了,不会超过限制去细微地操作具体分数。这可以被看做是SVM的一种特性。
    举例说来,一个汽车的分类器应该把他的大量精力放在如何分辨小轿车和大卡车上,而不应该纠结于如何与青蛙进行区分,因为区分青蛙得到的评分已经足够低了。

4. 小结

  • 定义了从图像像素映射到不同类别的分类评分的评分函数。在本节中,评分函数是一个基于权重W和偏差b的线性函数。
  • 与kNN分类器不同,参数方法的优势在于一旦通过训练学习到了参数,就可以将训练数据丢弃了。同时该方法对于新的测试数据的预测非常快,因为只需要与权重W进行一个矩阵乘法运算。
  • 介绍了偏差技巧,让我们能够将偏差向量和权重矩阵合二为一,然后就可以只跟踪一个矩阵。
  • 定义了损失函数(介绍了SVM和Softmax线性分类器最常用的2个损失函数)。损失函数能够衡量给出的参数集与训练集数据真实类别情况之间的一致性。在损失函数的定义中可以看到,对训练集数据做出良好预测与得到一个足够低的损失值这两件事是等价的。

现在我们知道了如何基于参数,将数据集中的图像映射成为分类的评分,也知道了两种不同的损失函数,它们都能用来衡量算法分类预测的质量。但是,如何高效地得到能够使损失值最小的参数呢?这个求得最优参数的过程被称为最优化,下篇笔记继续。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CS231n——机器学习算法——线性分类(下:Softmax及其损失函数) 的相关文章

  • 【电子DIY】基于NE555制作的简易电子琴

    基于NE555制作的简易电子琴 青岛科技大学 信息科学技术学院 集成162 Listen C 一 背景简介 自多次利用51单片机 无源蜂鸣器制作电子琴多次以后 突然领悟蜂鸣器产生声波的原理 无非是产生一定频率占空比50 的PWM而已 然后

随机推荐

  • 二叉查找树(BST)

    二叉查找树 BST 二叉查找树 Binary Search Tree 又叫二叉排序树 Binary Sort Tree 它是一种数据结构 支持多种动态集合操作 如 Search Insert Delete Minimum 和 Maximum
  • 华为麦芒B199全焦拍照 比单反还有料

    近期 在2000元内价位上涌现了很多表现出色的智能手机 其中不得不提到华为麦芒B199 该机创造了网络平台一分钟售罄10万部的销售神话 到底这部手机有什么神奇之处呢 这里重点介绍下麦芒B199先进的全焦拍照功能 华为麦芒B199 通常 我们
  • vue filters和directives的this指向

    vue filters和directives的this指向 记录一次奇葩的需求 要求自定义一个指令 点击后能跳转指定路由 directives和filters压根就没法访问this 脑袋都想破了 不废话了 上代码
  • 芯片行业常用英文术语最详细总结(图文快速掌握)

    目录 一 简介 二 厂家分类 三 工艺和阶段 3 1 芯片工艺 3 2 芯片阶段 四 晶圆等级 五 其他英文解析 六 相关岗位及职能 一 简介 本文主要总结了半导体行业在工作中常用的英文含义 通过将内容分类 对生产厂家 工艺和阶段 晶圆等级
  • Java Optional类说明及使用(JDK8)

    Optional类是JDK8提供的类 用于防止出现空指针异常 本篇旨在对该类进行说明及具体使用方式列举 一 序言 Option在使用中主要是为了简化传统Java的if else形式对null情况进行判断 既然为了简化代码编写 就必须要提到J
  • c语言 prototype_keil c语言出现错误C206 missing function-prototype

    include include define uchar unsigned char static unsigned char table 6 0 0 0 0 0 0 Declare functions uchar Busy Check v
  • 什么是解耦表示学习?使用beta-VAE模型探究医疗和金融问题

    作者 Alexandr Honchar 译者 大鱼 编辑 Rachel 琥珀 出品 AI科技大本营 id rgznai100 导语 本文对传统的人工数学建模和机器学习的优缺点进行了介绍和比较 并介绍了一种将二者优点相结合的方法 解耦表示学习
  • 浅析多线程中的各种锁

    高并发的场景下 如果选对了合适的锁 则会大大提高系统的性能 否则性能会降低 所以 知道各种锁的开销 以及应用场景是很有必要的 文章目录 常用的各种锁 互斥锁与自旋锁 互斥锁 自旋锁 读写锁 乐观锁与悲观锁 本文小结 常用的各种锁 多线程访问
  • c++之观察者模式

    一 观察者模式 随着交通信号灯的变化 汽车的行为也随之而变化 一盏信号灯可以指挥多辆汽车 观察者模式是用于建立一种对象与对象之间的依赖关系 一个对象发生改变时将自动通知其他对象 其他对象将相应作出反应 在观察者模式中 发生改变的对象称为观察
  • [2023年综述]将CNN和Transformer优势相结合的混合模型在计算机视觉领域的研究综述

    目录 摘 要 关键词 1 引言 2 CNN简述 3 Transformer简述 3 1 引言 3 2 NLP领域的Transformer 3 3 CV领域的Vision Transformer 4 结合CNN与Transformer的常见方
  • 每日一题cf!

    Problem C Codeforces 题目大意 给你一个 序列 和一个操作 选择一个x 并且让所有等于x的数为0 问让这个序列变成非递减序列的最小操作次数是多少 思路 预处理 定义一个map q用来存每个数出现的最长到达的长度 p用来存
  • 英文字母的排序

    题目内容 编写一个程序 当输入英文字符串时 计算机将这个句子中的英文字母按字典字母顺序重新排列 排列后的单词的 长度要与原始句子中的长度相同 并且要求只对 到 的字母重新排列 其它字符保持原来的状态 输入描述 一个字符串 包括大写英文字母
  • 项目-CSDN博客导出工具.md

    CSDN博客批量导出工具 解决CSDN反爬虫问题 10 14 由于CSDN缘故 暂时不能使用 有空修复 9 27 更新介绍 2019 9 26 新的UI交互界面 解决由于文件名导致的无法写文件的问题 操作更加简便 可以选择下载 添加鼠标右击
  • arx 正向遍历 逆向遍历 database

    void AllDb AcDbBlockTable pBlkTbl acdbHostApplicationServices gt workingDatabase gt getBlockTable pBlkTbl AcDb kForRead
  • 在pandas模块中,读取CSV文件主要使用pd.read_csv()函数。

    在pandas模块中 读取CSV文件主要使用pd read csv 函数 必选参数 要读取的CSV文件的文件路径 常用的可选参数 1 指定行索引 index col 2 获取指定列 usecols 3 添加columns header No
  • C语言:链栈的基本操作

    关注作者 Aqu 蓝空 描述 利用链表对栈的将实现基本操作 入栈 出栈 打印 代码 include
  • Human Resource Machine 全成就通关 第41关

    HUMAN RESOURCE MACHINE PROGRAM COMMENT 0 a INBOX JUMPZ d COPYTO 24 b BUMPUP 24 JUMP a c COPYFROM 22 OUTBOX COPYFROM 24 C
  • 面试问到一个,让你写一下朋友圈点赞功能的测试用例!记录一下

    给你一个朋友圈点赞的功能 写出测试用例 UI 点击操作栏 是否正常弹出气泡 是否正常收回 是否流畅 样式是否与需求保持一致 未赞时 点击 点赞 样式变为已赞 已赞时 点击 取消 样式变为未赞 功能 给某一朋友的朋友圈进行点赞 检查接口 gt
  • QT串口 QSerialPort的使用与粘包处理

    1 在工程的pro文件中加入串口模块 QT serialport 2 添加头文件 include
  • CS231n——机器学习算法——线性分类(下:Softmax及其损失函数)

    在前两篇笔记中 基于线性分类上 线性分类中继续记笔记 1 Softmax分类器 SVM和Softmax分类器是最常用的两个分类器 Softmax的损失函数与SVM的损失函数不同 对于学习过二元逻辑回归分类器的读者来说 Softmax分类器就