Linear classification: Support Vector Machine, Softmax

文章目录

1.Linear Classification-线性分类概述

线性分类主要由两部分组成,评分函数(score function)和损失函数(loss function)。其中 评分函数(score function) 是原始图像数据(raw data)到类别分值(class score)的映射;而 损失函数(loss function) 是用来量化预测分类标签的得分与真实标签之间的一致性。所有的NN和CNN问题实际上都是围绕这两个function进行的。

2.score function-评分函数

评分函数将图像的像素值映射为各个分类类别的得分,得分高低代表图像属于该类别的可能性高低。下面将举例说明(以CIFAR-10为例):

假设我们有N(5000)个图像样例,每个图像维度为D(32323=3072),有K(10)个分类,定义评分函数为 $f=R^D\rarr R^K $ 表示原始图像像素到分类分值的映射。

线性分类器

提到 评分函数 我们最先想到的就是linear function。
f(xi,W,b)=Wxi+bf(x_i,W,b)=Wx_i+bf(xi​,W,b)=Wxi​+b

在这个式子中每个图像数据被处理成长度为D的列向量,故XiX_iXi​大小为[D X 1].
其中大小为[K x D]的矩阵WWW和大小为[K x 1]的列向量bbb为该函数的参数(parameters) .参数WWW被称为权重(weights)。bbb被称为偏差向量(bias vector),它影响输出数值,但是并不和原始数据xix_ixi​产生关联。
Wxi+bWx_i+bWxi​+b=(1,3072)* (3072,10)+(1,10)=(1,10)+(1,10)=(1,10)表示 xix_ixi​分别属于10个类别下的得分。

偏差和权重的合并技巧

分类评分函数定义为$ f(x_i,W,b)=Wx_i+b$ ,分开处理WWW和 bbb比较麻烦,一般常用的方法是把两个参数放到同一个矩阵中,同时xix_ixi​向量就要增加一个维度,这个维度的数值是常量1,即默认的偏差维度。此时新公式简化为:f(xi,W)=Wxif(x_i,W)=Wx_if(xi​,W)=Wxi​.

以CIFAR-10为例,xix_ixi​ 变为[3073x1],WWW变为[10x3073]

图像数据预处理

对输入特征做归一化(normalization)处理,所有数据都减去均值使得数据中心化,再让数值分布区间变为[-1,1]。零均值的中心化的重要性在梯度下降中体现。


2.损失函数

我们将使用损失函数(Loss Function)来衡量我们对结果的不满意程度。直观地讲,当评分函数输出结果与真实结果之间差异越大,损失函数输出越大,反之越小。

多类SVM

损失函数的具体形式多种多样。首先,介绍常用的多类支持向量机(SVM)损失函数。SVM的损失函数想要SVM在正确分类上的得分始终比不正确分类上的得分高出一个边界值Δ\DeltaΔ。
设第iii个数据,包含图像xix_ixi​的像素和代表正确类别的标签yiy_iyi​.评分函数f(xi,W)f(x_i,W)f(xi​,W)得到不同分类类别的分值,分值记作sss。则 xix_ixi​对应第jjj个类别的得分为 $s_j=f(x_i,W) _ j .针对第.针对第.针对第i$个数据的多类SVM的损失函数定义如下:
Li=∑j̸=yimax⁡(0,sj−syi+Δ)L_i=\displaystyle\sum_{j\not=y_i}\max(0,s_j-s_{y_i}+\Delta) Li​=j̸​=yi​∑​max(0,sj​−syi​​+Δ)
补充说明 :max⁡(0,−)\max(0,-)max(0,−) 函数,常被称为折叶损失(hinge loss)

Regularization-正则化

为了使得W的系数尽量小,模型尽量趋向简单,从而避免overfitting问题。我们向损失函数增加一个正则化惩罚R(W)R(W)R(W),常用的正则化惩罚是L2范式 :R(W)=∑k∑lWk.l2,R(W)=\displaystyle\sum_k \sum_l W_{k.l}^2,R(W)=k∑​l∑​Wk.l2​,.

最终完整的多类SVM损失函数有两个部分组成:数据损失(data loss)正则化损失(regularization loss),完整公式如下:
L=1N∑iLi⎵dataloss+λR(W)⎵regularizationlossL=\underbrace{\dfrac{1}{N}\displaystyle\sum_i L_i}_{data\ \ loss} +\underbrace{\lambda R(W)}_{regularization\ \ loss} L=data  lossN1​i∑​Li​​​+regularization  lossλR(W)​​
其中,NNN是训练集的数据量。现在正则化惩罚添加到了损失函数里面,并用超参数λ\lambdaλ来计算其权重。该超参数无法简单确定,需要通过交叉验证来获取。除了上述理由外,引入正则化惩罚还带来很多良好的性质,其中最好的性质就是对大数值权重进行惩罚,可以提升其泛化能力。
需要注意的是,和权重不同,偏差没有这样的效果,因为它们并不控制输入维度上的影响强度。因此通常只对权重WWW正则化,而不正则化偏差bbb。在实际操作中,可发现这一操作的影响可忽略不计。最后,因为正则化惩罚的存在,不可能在所有的例子中得到0的损失值,这是因为只有当W=0W=0W=0的特殊情况下,才能得到损失值为0。

Softmax分类器

SVM是最常用的两个分类器之一,而另一个就是Softmax分类器,它的损失函数与SVM的损失函数不同。对于SVM而言,由score function得到的score仅仅相对大小是有意义的,每一项的绝对值并不表达任何意义。通过softmax function,可以将score与概率联系起来。softmax函数如下:
P(Y=k∣X=xi)=esk∑jesj,P(Y=k\mid X=x_i)= \frac{e^{s_k}}{\sum_j{e^{s_j}}}, P(Y=k∣X=xi​)=∑j​esj​esk​​,
先把所有scores用e指数化,得到均为正数,然后分母为所有指数的和,使得他们归一化。这样,每一class的score都变成了一个大于0小于1的数,而所有class score之和等于1,得到一个标准的概率分布。
然后取softmax处理后的score的交叉熵损失(cross entropy loss)作为loss function
Li=−log⁡(esyi∑jesj)L_i = -\log \left(\frac{e^{s_{y_i}}}{\sum_j e^{s_j}} \right ) Li​=−log(∑j​esj​esyi​​​)
补充说明:我们希望我们的概率尽可能地集中在正确的标签上,即$ P(Y=k\mid X=x_i)\to 1。之所以对。之所以对。之所以对P取取取L_i=-\log P$ ,是因为损失函数是用来衡量坏的程度,我们要将其尽可能最小化,即当P→1P\to 1P→1时,Li→0L_i\to 0Li​→0(而当P→0P\to 0P→0时,Li→+∞L_i\to +\infinLi​→+∞).

视频中提到的问题(推荐思考):

  • 问:softmax损失函数的最大值和最小值是多少?
  • 答:min=0min = 0min=0,max→+∞max \to +\infinmax→+∞,
  • 解:当true class的score为 +∞+\infty+∞ 时,P=1P=1P=1,loss为0;当true class的score为 −∞-\infty−∞ 时,loss为+∞+\infty+∞。注意,这里的min/max都是理论上的极限值,并不能取到。不便于理解的话,画一下 y=−log⁡xy=-\log xy=−logx的图,看区间[0,1]即可。

补充:这里解释一下为什么cross entropy可以用作loss function。

cross entropy 交叉熵

熵(entropy)是一个事件所包含的信息量,定义为:S(x)=−∑ip(xi)log⁡p(xi).S(x) = -\sum_i{p(x_i)\log{p(x_i)}}.S(x)=−∑i​p(xi​)logp(xi​).
相对熵(relative entropy)又称为KL散度,是两个随机分布间距离大小的度量,定义为:
DKL(p∣∣q)=Ep(log⁡p(x)q(x))=∑x∈Xp(x)log⁡(p(x)q(x))=∑x∈Xp(x)log⁡p(x)−∑x∈Xp(x)log⁡q(x),D_{KL}(p||q) = E_p \left ( \log \frac{p(x)}{q(x)} \right ) = \sum_{x\in X}p(x) \log \left ( \frac{p(x)}{q(x)} \right ) \\ = \sum_{x\in X}p(x)\log p(x) - \sum_{x\in X}p(x)\log q(x), DKL​(p∣∣q)=Ep​(logq(x)p(x)​)=x∈X∑​p(x)log(q(x)p(x)​)=x∈X∑​p(x)logp(x)−x∈X∑​p(x)logq(x),
前一部分是 p(x)p(x)p(x) 负熵,如果p(x)是已知的分布,这个值是定值;

第二部分就是 p(x)p(x)p(x) 和 q(x)q(x)q(x) 之间的交叉熵(cross entropy), 定义为:
H(x)=−∑x∈Xp(x)log⁡q(x)H(x) = - \sum_{x\in X}p(x)\log q(x) H(x)=−x∈X∑​p(x)logq(x)

DKLD_{KL}DKL​ 越大,表示用 q(x)q(x)q(x) 来近似 p(x)p(x)p(x) 的差距越大,因为第一部分为定值,也就等价于第二部分cross entropy越大, 用 q(x)q(x)q(x) 来近似 p(x)p(x)p(x) 的差距越大,即q(x)q(x)q(x) 和 p(x)p(x)p(x) 的不相似度。

机器学习的过程是希望用一个模型的分布 P(model)P(model)P(model) 来近似实际事件的分布 P(real)P(real)P(real),但是自然界中实际事件的分布 P(real)P(real)P(real) 是不可能得到的,退而求其次,我们收集该事件的大量样本,并用该样本的分布 P(sample)P(sample)P(sample) 来代替 P(real)P(real)P(real), 即 P(sample)≅P(real)P(sample) \cong P(real)P(sample)≅P(real)。从而机器学习的目的蜕化为使 P(model)P(model)P(model) 与 P(sample)P(sample)P(sample) 分布一致。 最小化 P(model)P(model)P(model) 与 P(sample)P(sample)P(sample) 的差异,等价于最小化两者的KL散度,也即最小化两者之间的cross entropy。

再回到softmax,这里 p(x)p(x)p(x) 就是ground truth lable。以CIFAR10为例,这里 p(xi)=[0,0,0,1,...,0]p(x_i) = [0, 0, 0, 1, ... , 0]p(xi​)=[0,0,0,1,...,0],即truth class为1,其余都为0。因此,这里机器学习的目标就是用一个分布 q(x)q(x)q(x) 来近似这个 p(x)p(x)p(x) 。这里要求 q(x)q(x)q(x) 是一个概率分布,这就是要将scores通过softmax function变成一个概率密度函数的原因。
接下来,要用 q(x)q(x)q(x) 近似 p(x)p(x)p(x),就要使两者之间的KL距离最小,等价于最小化两者之间的cross entropy。而$
\begin{aligned}
H(x) &= - \sum_{x\in X}p(x)\log q(x) \newline
&= - \left ( 0\times \log q(x_0) + 0\times \log q(x_0) + … + 1\times \log q(x_i) + … \right ) \newline
&= - \log q(x_i) \newline
&= -\log \left(\frac{e^{s_{y_i}}}{\sum_j e^{s_j}} \right )
\end{aligned}
$
此即使用softmax和cross entropy的loss function。

###实操事项:数值稳定
编程实现softmax函数计算的时候,中间项efyie^{f_{y_{i}}}efyi​​和∑jefj\displaystyle\sum_{j} e^{f_j}j∑​efj​因为存在指数函数,所以数值可能非常大。除以大数值可能导致数值计算的不稳定,所以学会使用归一化技巧非常重要。如果在分式的分子和分母都乘以一个常数CCC,并把它变换到求和之中,就能得到一个数学上等价的公式:
efyi∑jefj=CefyiC∑jefj=efyi+log⁡C∑jefj+log⁡C\dfrac{e^{f_{y_i}}}{\sum_je^{f_j}}=\dfrac{Ce^{f_{y_i}}}{C\sum_je^{f_j}}=\dfrac{e^{f_{y_i}+\log C}}{\sum_je^{f_j+\log C}} ∑j​efj​efyi​​​=C∑j​efj​Cefyi​​​=∑j​efj​+logCefyi​​+logC​
CCC的值可自由选择,不会影响计算结果,通过使用这个技巧可以提高计算中的数值稳定性。通常将CCC设为log⁡C=−max⁡jfj\log C=- \max_jf_jlogC=−maxj​fj​。简单讲,就是将向量fff中的数值全部进行平移,使得fff取值为(−∞,0](-\infty,0](−∞,0],efyie^{f_{y_{i}}}efyi​​的取值为(0,1](0,1](0,1]

视频中提到的问题(和上式中的C无关):

  • 问:通常初始化的时候WWW很小,所以所有的s≈0s\thickapprox0s≈0,那么损失值是多少?
  • 解:log⁡C\log ClogC
    ###SVM与Softmax比较

主要区别:我们如何解释这些class score 进而量化度量到底有多坏。
在实际使用中,SVM和Softmax经常是相似的

视频中提到的问题:

  • 问:假设我收到了一个数据点,并稍微改变了下它的分数,在这两钟不同情况下,会发生什么?
    [10,−2,3][10,9,9][10,−100,−100]andyi=0\begin{array}{cc} [\textcolor{#228B22}{10},-2,3]\\ [\textcolor{#228B22}{10},9,9]\\ [\textcolor{#228B22}{10},-100,-100] \end{array} and\ \ \ \ y_i=0 [10,−2,3][10,9,9][10,−100,−100]​and    yi​=0
  • 答:对于SVM而言,即使正确分数稍微改变,也并不会对结果产生根本改变。对于softmax而言,给正确分类更高的分值,同时给不正确分类更低的分值,softmax仍会在正确的类上积累更多的概率质量,正确分类更加趋近于无穷大,不正确分类趋向于负无穷,永不满足。
  • 解:对于SVM而言,唯一关心的是正确分类的分值要比不正确分类分值要高出一个安全边际;
    对于softmax而言,softmax的目标是将概率质量函数分布等于1,SVM够大就行,softmax永不满足

#总结

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

Reference

  1. 我的主页
  2. CS231n 官方笔记主页
  3. CS231n 官方笔记授权翻译
  4. CS231n课程及作业详细解读

CS231n 第一讲 线性分类:SVM,Softmax相关推荐

  1. 4、线性分类: SVM, Softmax

    4.线性分类 上一课最我们介绍了图像分类的问题,任务是从一个固定的类别集合中选一个分配给待识别的图像.最后,我们描述了k-近邻(KNN)分类器,它通过将待标记的图像与训练集中已经标记好的图像进行比较来 ...

  2. 大话西游之王道考研数据结构第一讲---线性表的顺序表示

    大话西游之王道考研数据结构第一讲---线性表的顺序表示 写在前面的话 王道考研数据结构是一本非常好的书,本系列所有的内容是按照其书进行讲述的,所以您可以以那本书作为主要内容,这个做参考. 大学时候,在 ...

  3. 图像分类_03分类器及损失:线性分类+ SVM损失+Softmax 分类+交叉熵损失

    2.3.1 线性分类 2.3.1.1 线性分类解释 上图图中的权重计算结果结果并不好,权重会给我们的猫图像分配⼀个⾮常低的猫分数.得出的结果偏向于狗. 如果可视化分类,我们为了⽅便,将⼀个图⽚理解成⼀ ...

  4. 基于python的分类模型_python SVM 线性分类模型的实现

    运行环境:win10 64位 py 3.6 pycharm 2018.1.1 导入对应的包和数据 import matplotlib.pyplot as plt import numpy as np ...

  5. 线性分类模型python_python SVM 线性分类模型的实现

    运行环境:win10 64位 py 3.6 pycharm 2018.1.1 导入对应的包和数据 import matplotlib.pyplot as plt import numpy as np ...

  6. CS231n课程笔记翻译3:线性分类笔记

    译者注 :本文 智能单元 首发,译自斯坦福CS231n课程笔记 Linear Classification Note ,课程教师 Andrej Karpathy 授权翻译.本篇教程由 杜客 翻译完成, ...

  7. CS231n课程笔记翻译:线性分类笔记

    译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Linear Classification Note,课程教师Andrej Karpathy授权翻译.本篇教程由杜客翻译完成,巩子嘉和堃堃进行校 ...

  8. 【CS231n】斯坦福大学李飞飞视觉识别课程笔记(八):线性分类笔记(下)

    [CS231n]斯坦福大学李飞飞视觉识别课程笔记 由官方授权的CS231n课程笔记翻译知乎专栏--智能单元,比较详细地翻译了课程笔记,我这里就是参考和总结. [CS231n]斯坦福大学李飞飞视觉识别课 ...

  9. 斯坦福CS231n李飞飞计算机视觉之线性分类上

    线性分类器简介 线性评分函数 阐明线性分类器 译者注:上篇翻译截止处 损失函数 多类SVM Softmax分类器 SVM和Softmax的比较 基于Web的可交互线性分类器原型 小结 线性分类 上一篇 ...

最新文章

  1. 老板要我开发一个简单的工作流引擎
  2. asp.net 页面之间跳转的几种方法及区别(转)
  3. 人事软件测试自学,自学软件测试什么课程
  4. 文本超出多行显示省略号 移动端禁止双击缩放
  5. 编程是一门实践性的科学
  6. python 函数 过程_Python开发之【集合、函数和过程】
  7. BZOJ 4031: [HEOI2015]小Z的房间 Matrix-Tree定理
  8. SharePoint Framework 简介
  9. 计算机信息规划工资,2020年工科类专业薪资最新排名,计算机很吃香,工资水平最高...
  10. 32bit 天堂服务端假设教程
  11. 如何自动翻译字幕文件(机翻)
  12. HEVC视频转码解决办法
  13. yii2 找到根目录的绝对路径
  14. Nofollow标签的写法以及nofollow使用介绍
  15. 母牛生小牛问题-字节跳动笔试题
  16. 个推里群推php教程,GitHub - lyx2297999137/yii2-igetui: yii2个推
  17. excel合并两列内容_合并多个Excel文件内容到一个Excel中
  18. An error occurred while filtering resources
  19. Win10 wusa命令卸载系统更新
  20. 分享一个很好的卸载绿色软件:Geek Uninstaller(个人用户免费)

热门文章

  1. 中国智能机市场增速放缓 苹果三星小米均受影响
  2. 【C/C++】C语言复制字符串及复制函数汇总(strcpy()/memcpy()/strncpy()/memmove())
  3. ArcGIS用户大会第一天
  4. python根据点计算直线方程
  5. 7-53 验证“哥德巴赫猜想” (20分)
  6. DWR高级主题之反向Ajax(DWR3介绍)
  7. 数据库系统需求分析、概念模型设计及逻辑结构设计——以“到梦空间”APP为例
  8. 强化学习环境mujoco排坑之关于anaconda3/compiler_compat/ld: cannot find -lGL问题
  9. SourceTree推送拉取的时候一直等待
  10. mpvue 使用vant van-field 无法双向绑定解决