斯坦福CS231n - CNN for Visual Recognition(2)-lecture3(上)线性分类器、损失函数

本节主要讲了线性分类器(svm和softmax),损失函数以及最优化(梯度下降)的问题

线性分类

  由于之前KNN分类器的缺点,让我们很自然地去寻找有更加强大地方法去完成图像分类任务,这种方法主要有两部分组成:
评分函数(score function),它是原始图像数据到类别分值的映射( f(x)=Wx )。
损失函数(loss function),它是用来量化预测分类标签的得分与真实标签之间一致性的。
  这种方法其实最后可以转化成一个最优化问题,在最优化过程中,将通过更新评分函数的参数来最小化损失函数值。

1 评分函数

   评分函数,就是从图像到标签分值的参数化映射。举例来说,在CIFAR-10中,我们有一个N=50000的训练集,每个图像有D=32x32x3=3072个像素,而K=10,这是因为图片被分为10个不同的类别(狗,猫,汽车等)。我们现在定义评分函数为: f:RDRK ,该函数是原始图像像素到分类分值的映射。
线性分类器
  一个线性映射:

f(xi,W,b)=Wxi+b

  在上式中,假设每个图像数据都被拉长为一个长度为D的列向量,大小为[D x 1]。其中大小为[K x D]的矩阵W和大小为[K x 1]列向量b为该函数的参数(parameters)。以CIFAR-10为例,将图像拉成[3072 x 1]的列向量,W为[10x3072],b为[10x1]。 f(xi,W,b) 输出为[10 x 1]的列向量(10个数字对应不同分类的分值)。
其中,参数W被称为权重(weights)。b被称为偏差向量(bias vector)。

补充说明:

  • 通过矩阵乘法 Wxi 能并行地评估10个不同的分类器(每个分类器对应一个分类),其中每个类的分类器就是W的一个行向量。
  • 参数W和b是可控制改变的。我们的目标就是通过设置这些参数,使得计算出来的分类分值情况和训练集中图像数据的真实类别标签相符。
  • 该方法通过训练数据学习参数W和b,当训练完成,时训练数据可丢弃,留下学习到的参数即可。
  • 分类时只需要做一个矩阵乘法和一个矩阵加法就能对一个测试数据分类。

这里写图片描述

  上面例子中,原始像素点向量xi经过W和b映射为对应结果类别的得分 f(xi,W,b)=Wxi+b 。不过上面这组参数是不太恰当的,图片是猫,但是狗狗分最高,这样就很自然地引出参数优化问题了。

线性分类器另一种理解:将线性分类器看做模板匹配:关于权重W的另一个解释是它的每一行对应着一个分类的模板(有时候也叫作原型)。一张图像对应不同分类的得分,是通过使用内积(也叫点积)来比较图像和模板,然后找到和哪个模板最相似。

偏差和权重的合并技巧:它能够将我们常用的参数和合二为一。回忆一下,分类评分函数定义为:

f(xi,W,b)=Wxi+b

  分开处理这两个参数(权重参数和偏差参数)有点笨拙,一般常用的方法是把两个参数放到同一个矩阵中,同时向量就要增加一个维度,这个维度的数值是常量1,这就是默认的偏差维度。这样新的公式就简化成下面这样:

f(xi,W,b)=Wxi

  还是以CIFAR-10为例,那么的大小就变成[3073x1],而不是[3072x1]了,多出了包含常量1的1个维度。W大小就是[10x3073]了。中多出来的这一列对应的就是偏差值,具体见下图:
这里写图片描述

图像数据预处理:在机器学习中,对于输入的特征做归一化(normalization)处理是常见的套路。而在图像分类的例子中,图像上的每个像素可以看做一个特征。在实践中,对每个特征减去平均值来中心化数据是非常重要的。在这些图片的例子中,该步骤意味着根据训练集中所有的图像计算出一个平均图像值,然后每个图像都减去这个平均值,这样图像的像素值就大约分布在[-127, 127]之间了。下一个常见步骤是,让所有数值分布的区间变为[-1, 1]。零均值的中心化是很重要的。


2 损失函数

  回到之前那张猫的图像分类例子,它有针对“猫”,“狗”,“船”三个类别的分数。我们看到例子中权重值非常差,因为猫分类的得分非常低(-96.8),而狗(437.9)和船(61.95)比较高。我们将使用损失函数(Loss Function)(有时也叫代价函数Cost Function目标函数Objective)来衡量我们对结果的不满意程度。直观地讲,当评分函数输出结果与真实结果之间差异越大,损失函数输出越大,反之越小。

2.1 多类支持向量机(SVM)损失函数

  SVM的损失函数想要SVM在正确分类上的得分始终比不正确分类上的得分高出一个边界值 Δ
回忆一下,第i个数据中包含图像 xi 的像素和代表正确类别的标签 yi 。评分函数输入像素数据,然后通过公式 f(xi,W) 来计算不同分类类别的分值。这里我们将分值简写为 s 。比如,针对第j个类别的得分就是第j个元素: sj=f(xi,W)j 。针对第i个数据的多类SVM的损失函数定义如下:

Li=jyimax(0,sjsyi+Δ)

  下面图片是一个具体地例子


这里写图片描述 这里写图片描述

  通过例子可以看出:SVM的损失函数想要正确分类类别 yi 的分数比不正确类别分数高,而且至少要高 Δ 。如果不满足这点,就开始计算损失值。
  考虑到我们现在面对的是线性评分函数( f(xi,W)=Wxi ),所以我们可以将损失函数的公式稍微改写一下(其中 wj

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值