深度学习笔记(零)线性分类器(基础知识)

声明,这个系列基本是我本身的一些学习过程,方便我本身后期复习的!html

1.线性分类器

线性分类器主要由两个部分组成:算法

  • 一个是评分函数(score function),它是一个从原始图像到类别分值的映射函数。
  • 另外一个是失函数(loss function)也叫代价函数(cost function),它是用来量化预测获得的分类标签的得分与真实标签之间的一致性。

该线性分类器能够转化成为一个最优化问题,在最优化过程当中,经过更新score function的参数来最小化loss function。机器学习

2.评分函数

评分函数将图像夫人像素值集合最终映射为各个分类类别的得分,得分高低表明图像属于该类别的可能性高低。例如,有训练集$x_i\epsilon{R^D}$,对应的标签为$y_i$,这里$i=1,2,...,N$, $y_i \epsilon{1,2,...,k}$。也就是说,咱们有$N$个图像样本,每一个样本的维度是$D$,共有$K$个不一样的类别。函数

举例来讲,在CIFAR-10数据集中,咱们有一个$N=50000$的训练集,每一个图像有$D=32*32*3=3072$个像素,而$k=10$(狗,猫,汽车等)。咱们定义评分函数$f:R^D\to{R^K}$,该函数是原始图像像素到分类类别分值的映射。学习

这里,咱们从以个最简单的几率函数开始,一个线性映射:$f(x_i,W,b) = Wx_i+b$测试

where, 每一个样本$x_i$大小为$D*1$,矩阵$W$(大小为$K*D$),向量$b$(大小为$D*1$),为该函数的参数。一样以CIFAR-10数据为例,$x_i$包含了第$i$个图像的全部像素信息,这些信息被拉成为一个$3072*1$的向量,$W$的大小为$10*3072$,$b$的大小为$10*1$。所以,3072个像素值做为输入输入函数,函数输出10个分值结果。参数 $W$ 被称为权重(weight),参数 $b$ 称为误差(bias),误差影响输出值,但并不和原始数据产生关联。优化

须要注意的是:spa

  •  一个简单的矩阵乘法$Wx_i$就能够有效评估$K$个不一样的分类器(每一个分类器对应一个类别),其中每一个类别是 $W$ 的一个行向量。
  • 咱们认为输入数据$(x_i,y_i)$是给定且不可改变的,但参数$W$ 和  $b$ 可控制改变的。咱们的目标就是经过设置这些参数,使得计算出来的分类分值状况和训练集众图像的真实类别标签相符。
  • 该方法相对于 KNN 算法的优点在于,训练数据是用来学习参数$W$ 和  $b$ 的,一旦训练完成,训练数据就能够丢弃了。对于一个测试图像,咱们简单地将其输入函数,并基于计算的分类分值进行分类便可。
  • 最后,注意咱们只要作一个矩阵乘法和一个矩阵加法就能对测试数据分类,这也比 KNN方法快多了。

理解线性分类器

线性分类器计算图像中3个颜色通道中全部像素值与 权重的矩阵乘法,从而获得分类分值。根据咱们对权重设置的值,对于图像中某些位置的某些颜色,函数表现出喜爱或者厌恶(根据每一个权重的符号而定)。举个例子,能够想象“船”分类就是被大量的蓝色包围(对应的就是水)。那么“船”分类器在蓝色通道上的权重就有不少的正权重(它们的出现提升了“船”分类的分值),而在绿色和红色通道上的权重为负的就比较多(它们的出现下降了“船”分类的分值)。orm

上面是一个简单的将图像 映射到分类分值得例子。为了便于可视化,假设图像只有4个像素(都是黑白像素,这里不考虑RGB通道),有三个分类(红色表明猫,绿色表明狗,蓝色表明船,注意,这里的红、绿和蓝3种颜色仅表明分类,和RGB通道没有关系)。首先将图像像素拉伸为一个列向量,与进行矩阵乘,而后获得各个分类的分值。须要注意的是,这个一点也很差:猫分类的分值很是低。从上图来看,算法却是以为这个图像是一只狗。htm

误差和权重的合并技巧

实际操做中,咱们经常将 $W$ 和 $b$ 合二为一。回忆一下,分类评分函数定义为:$f(x_i,W,b) = Wx_i+b$。

通常经常使用的方法是把两个参数放到同一个矩阵中,同时 $x_i$ 向量就要增长一个维度,这个维度的数值是常量 1,这就是默认的误差维度。这样新的公式就简化成下面这样:

$f(x_i,W) = Wx_i$

仍是以CIFAR-10为例,$x_i$的大小变成了 $3073*1$,而不是$3072*1$了,多出了包含常向量1的一个维度。$W$ 的大小变成了 $10*3073$。$W$ 这多出来的这一列对应的就是误差值$b$,具体见下图:

图像数据预处理

在上面的例子中,全部的图像都是使用原始像素值(从0到255)。在机器学习中,对应特征作归一化(normalization)处理是常见套路。在图像分类的例子中,图像上的每个像素能够看做一个特征(feature)。

在这些图片的例子中,该步骤意味着根据训练集全部的图像计算出一个平均像素值,而后每一个图像都减去这个平均值,这样图像的像素就大约分布在[127,127]之间了。下一个常见步骤是,让全部数值分布的区间变成[-1,1]。零均值的中心化是很重要的。

这并无改变你的图像信息,并且更利于数值优化。

 

 3. 损失函数

上面咱们定义来从图像像素值到所属类别的评分函数(score function),该函数的参数是权重矩阵$W$。在函数中,数据 $(x_i,y_i$ 是给的的,不能修改。但咱们能够调整权重矩阵这个参数,使得评分函数的结果与训练数据集中图像的真实类别一致,既评分函数在正确的分类位置应当获得最高的评分(score)。

回到以前那张猫的图像分类例子,它有针对“猫”,“狗”,“船”三个类别的分数。咱们看到例子中权重值很是差,由于猫分类的得分很是低(-96.8),而狗(437.9)和船(61.95)比较高。咱们将使用损失函数(loss function/代价函数(cost function来衡量咱们对结果的不满意程度。直观地讲,当评分函数输出结果与真实结果之间差别越大,损失函数输出越大,反之越小。

 多类支持向量机损失 Multiclass Support Vector Machine Loss

损失函数的具体形式多种多样。这里,咱们介绍了经常使用的多类别支持向量机(SVM)损失函数。该损失函数想要SVM在正确分类上的得分始终比不正确分类上的得分高出一个边界值 $\Delta$。咱们能够把损失函数想象成一我的,这位SVM先生(或者女士)对于结果有本身的品位,若是某个结果能使得损失值更低,那么SVM就更加喜欢它。

具体的:样本 $i$ 中包含图像像素 $x_i$ 和类别标签 $y_i$。输入图像经过score function $f(x_i,W)$ 来计算不一样分类类别的分值。那么针对这个样本的多类别SVM损失函数定义以下:

$L_i=\sum_{j\neq{y_i}}max(0, f_j-f_{y_i}+\Delta)$

 例如:假设有三个分类类别,图片 $x_i$ 经过评分函数获得的分值为 [13, -7, 11]。假设第一个类别正确,即$y_i=0$,同时假设 $\Delta$ 是10。那么 $L_i=max(0, -7-13+10) + max(0, 11-13+10) = 8$。简而言之,SVM的损失函数想正确分类类别 $y_i$ 的分数比不正确的类别分数要高,并且至少要高 $\Delta$ ,若是不知足这点,则开始计算损失值。

在结束这一小结前,还必须提一下这个有关0的阈值函数:$max(0,-)$,它常被称为折叶损失(hinge loss)。有时候会听到人们使用平方折叶函数SVM(即 L2-SVM)。它使用的是 $max(0,-)^2$,将更强烈(平方地而不是线性地)地惩罚过界的边界值。不使用平方是更标准的版本,可是在某些数据集中,平方折叶损失会工做得更好。能够经过交叉验证来决定到底使用哪一个。

咱们对于预测训练集数据分类标签的状况总有一些不满意的,而损失函数就能将这些不满意的程度量化。

多类SVM”想要”正确类别的分数比其余不正确分类类别的分数要高,并且至少高出 $\Delta$ 边界值。若是其余分类分数进入了红色的区域,甚至更高,那么就开始计算损失。若是没有这种状况,损失值为0.咱们的目标是找到一些权重,它们可以让训练集中的数据样例知足这些限制,也可以让总的损失值尽量的低。

正则化(Regularization

上面的损失函数有一个问题。假设有一个数据集和一个权重 $w$ 可以正确地分类每一个数据(即全部的边界都知足,对于全部的 $i$ 都有 $L_i$ = 0),问题在于这个 $W$ 并不惟一。咱们想象一下,当 $\lambda{ > 1}$ 时,任何 $\lambda{M}$ 都能使 损失值为0,由于这个变化将全部的分值的大小都均等地扩大了,全部它们的差值也扩大了。举个例子,若是一个正确分类的分值和距离它最近的错误分类的分值的差距是15,对 $W$ 乘以2将使得差距变成30。

咱们但愿能向某些特定的权重 $W$ 添加一些偏好,对于其余权重则不添加,以此来消除模糊性。这一点的实现方法是向损失函数增长一个正则化惩罚(regularization penalty) $R(W)$ 部分。最经常使用的正则化惩罚是 L2 范数,L2 范数经过对全部参数进行逐元素的平方惩罚来抑制大数值的权重:

$R(W) = \sum_k{\sum_l{W_{k,l}^2}}$

上面的表达中,将 $w$ 中全部元素平方后求和。注意:正则化函数不是数据的函数,仅基于权重。包含正则化惩罚后就可以给出完整的多类别 SVM 损失函数了,它由两个部分组成:数据损失(data loss),即全部样本的平均损失,以及正则化损失(regularization loss)

$L=\frac{1}{N}\sum{L_i}+\lambda{R(W)}$

Softmax分类器

Softmax中将折叶损失(hinge loss)替换为交叉熵损失(cross-entropy loss)。公式以下:

$L_i=-log{\frac{e^{f_y}}{\sum_j{e^{f_j}}}}$

 这里咱们能够对比下SVM的损失函数。

针对一个数据点,SVM和Softmax分类器的不一样处理方式的例子。两个分类器都计算了一样的分值向量 f(本节中是经过矩阵乘来实现)。不一样之处在于对 中分值的解释:SVM分类器将它们看作是分类评分,它的损失函数鼓励正确的分类(本例中是蓝色的类别2)的分值比其余分类的分值高出至少一个边界值。Softmax分类器将这些数值看作是每一个分类没有归一化的对数几率,鼓励正确分类的归一化的对数几率变高,其他的变低。SVM的最终的损失值是1.58,Softmax的最终的损失值是0.452,但要注意这两个数值没有可比性。只在给定一样数据,在一样的分类器的损失值计算中,它们才有意义。

 

总结以下:

  • 定义了从图像像素映射到不一样类别的分类评分的评分函数。在本节中,评分函数是一个基于权重  和误差  的线性函数。
  • 与kNN分类器不一样,参数方法的优点在于一旦经过训练学习到了参数,就能够将训练数据丢弃了。同时该方法对于新的测试数据的预测很是快,由于只须要与权重  进行一个矩阵乘法运算。
  • 介绍了误差技巧,让咱们可以将误差向量和权重矩阵合二为一,而后就能够只跟踪一个矩阵。
  • 介绍了图像预处理操做,0均值与同方差操做。
  • 定义了损失函数(介绍了SVM和Softmax线性分类器最经常使用的2个损失函数)。损失函数可以衡量给出的参数集与训练集数据真实类别状况之间的一致性。在损失函数的定义中能够看到,对训练集数据作出良好预测与获得一个足够低的损失值这两件事是等价的。
相关文章
相关标签/搜索