概述:上节讲到了图像分类以及kNN算法,kNN用作图像分类效果并不好。效果更好的分类算法是神经网络和卷积神经网络,它主要包括2部分
1、评分函数score function,把原数据映射为一个得分。
2、损失函数loss function,衡量预测得分和真实标签之间的差距。
最终的优化问题是最小化损失函数。
首先定义图像像素数据到各个类别得分的映射。定义几个符号,训练集为 xi∈RD ,训练集的每个元素有个对应的标签 yi , i=1…N , yi∈1…K 。即训练集有 N 个数据,维度为 D ,每个训练数据对应一个标签 yi ,标签总共有 K 类。以CIFAR-10为例, N=50,000,D=32×32×3=3072,K=10 。定义评分函数 f:RD↦RK
一个常用的映射函数为
解释线性分类器:
线性分类器是计算图像所有像素值的加权和,图像包括3个颜色通道。根据我们队权重(正/负)的设置,映射函数可以喜好或讨厌某一类颜色。例如,对于“船”这个类别,蓝色(海水)可能会在图像占比较大比例。这样在分类“船”时,蓝色对应的通道的可能会有比较多的正权重,而红色和绿色通道可能会有比较多的负权重。
下面是一个图像分的例子:
可以看出,更加倾向认为是一只狗。
图像被展开为高维空间的列向量,可以把图像当做高维空间的一个点(例如CIFAR-10的中图像是3072维度空间的一个点)。线性分类函数就是来划分这个高维空间,假设这个高维空间是2维的,可视化后如下:
上图表示图像空间,每个点都是一个图像。矩阵 W 的每一行都是一条直线,控制其方向, b 控制平移,直线上的点对应的得分为0,
权重矩阵 W 的每一行可以看做匹配某一类的模板,每一类的打分就是图像和对应类别模板的乘积。下图是CIFAR-10训练后的模板的可视化图像:
可以看出“船”的模板包含很多蓝色的像素,这样会给蓝色通道像素分值比较高。
可以把上面公式中,后面加的权重放到前面的矩阵乘法中,技巧就拓展矩阵多出一列,输入数据多出一维,最终公式变为:
图像的像素范围是[0…255],但是在机器学习中经常要将特征归一化。经常用到的是把数据中心化center your data,通过减去每个特征的均值来做到的。例如减去像素的均值,可以是范围变为[-127…127]。有时还做进一步处理,使范围变为[-1,1]。0均值中心化非常重要,学了梯度下降就可以理解这一点了。
前面通过评分函数来计算属于每一类的得分。这里通过损失函数来计算对得分的满意程度。损失函数又称作代价函数或目标。结果越好,损失函数值将越低,结果越差,损失函数的值将越高。
这里定义SVM的loss函数。SVM loss会使正确类别的得分比错误类别的得分至少高 Δ 。用 s 代表分数,第i个图像对应第j类的得分 sj=f(xi,W)j ,那么多类别SVM对于第i个图像的loss为
上面提到的loss函数有bug。设想以下,假设假设评价函数能正确预测所有分类,且损失函数 Li=0 ;这样权重并不是唯一的。因为如果一组权重 W 符合这样的要求,那么 λW 也符合这样的要求( λ>1 。如果得到评价函数的值不为0,那么评价函数的值也会放大 λ 倍。
可以通过对 W 加上些限制来移除上面的不确定性,得到一个唯一确定的权重系数矩阵。一般是通过正则化惩罚来实现 R(W) 来实现。最常用的惩罚是 L2 范数:
引入正则化惩罚还可以带来其他许多性质,后面章节会提到。例如,在SVM中引入正则化后就有了最大间隔max margin这一性质,详细参考cs229。
正则化一个很好的性质是惩罚了大的权重值,这一可以提高模型泛化能力。限制权重大小后,没有那一维数据可能单独对评价函数带来很大影响。例如输入数据 x=[1,1,1,1,1] ,有两组权重 w1=[1,0,0,0],w2=[0.25,0.25,0.25,0.25] ,内积相等 wT1x=wT2x=1 。但是L2惩罚不同,对于 w1 是1.0,而对于 w2 是0.25,因此 w2 优于 w1 。直观上看, w2 更小,却值更加分散,这样输入数据的所有维度都会对评价函数有影响,而不是仅仅几个维度数据主要决定评价函数。因此,会有更好的泛化性能,减小过拟合。
需要注意,正则化只是针对权重 W ,而不针对偏差 b ,因为偏差对输入数据各个维度大小没有影响影响,它只是控制分类器的平移。
设置 Δ : Δ 这个超参数一个常用的值是 Δ=1.0 。超参数 Δ 和 λ 看上去是不同的超参数,实际上它们有同样的功能:平衡目标函数中的data loss和regularization loss。权重 W 的幅度直接影响评价函数的得分,例如放大权重幅度,得分也会变大,不同类别之间的得分差异也就变大了。 Δ 是控制不同类别之间的得分差异,其他小可以通过放大或缩小权重幅度来控制。实际上权重的平衡是允许幅度有多大变化(通过 λ 来控制)。
和二项SVM关系:二项SVM是多项SVM的一个特例。
在原始形式中优化:如果以前学过SVMs,可能会听过核方法、对偶、SMO算法等。在神经网络中,往往使用目标函数的原始形式。许多模板函数在技术上不可分,但是实际中可以使用次梯度。
其他形式的SVM:本节的多类SVM只是一种,还有其他形式。
除了SVM分类器外,还有一种常用的叫做Softmax分类器,它是二元逻辑回归泛化到多元的情况。Softmax分类器的输出不是得分,而是对应类别的概率。Softmax分类器中,映射函数 f(xi;W)=Wxi 并没改变,把得分当做未归一化的对数概率,把hinge loss替换为交叉熵 loss:
信息论角度:一个真实分布 p 和其估计分布 q 的交叉熵定义如下:
概率解释:公式
实践问题:数值稳定:当写代码实现Softmax函数时,会涉及到 efyi 和 ∑jefj ,因为指数的原因,这些数值可能会非常大。除以很大的数值可能会引起数值不稳定,可以使用归一化的技巧。在分子和分母同时乘以一个常数,分数的数值不变:
下面图像可以帮助对比两者区别
Softmax分类器计算每类的概率:SVM计算每类的得分,这样不易直接解释。Softmax计算每类的概率。超参数 λ 控制概率的集中或离散程度。
实践中,SVM和Softmax常常是相似的:SVM和Softmax性能差别不大,不同的人对哪种效果更好持不同的观点。和Softmax相比,SVM更加局部化(local objective),它只关心小于间隔 Δ 的部分,例如 Δ=1 ,那么分值[10, -100, -100]和[10, 9, 9]对于SVM来说,其loss函数值相同;但是对于softmax就不同了。Softmax的loss函数只有在完全正确情况下才会为0。
1、定义了评价函数,线性函数的评价函数依赖权重 W 和偏置 b 。
2、和kNN使用不一样,参数化方法训练时间比较久,预测只是矩阵相乘。
3、通过一个trick,可以把偏置加入到矩阵相乘中。
4、定义了loss 函数,介绍了常用的SVM和Softmax loss。对比了两者的区别。
如果求解最优的参数,这设计到优化,是下一届讲解的问题。
Deep Learning using Linear Support Vector Machines