概述:上节讲到了图像分类以及kNN算法,kNN用作图像分类效果并不好。效果更好的分类算法是神经网络和卷积神经网络,它主要包括2部分
1、评分函数score function,把原数据映射为一个得分。
2、损失函数loss function,衡量预测得分和真实标签之间的差距。
最终的优化问题是最小化损失函数。
图像到标签得分的参数映射
首先定义图像像素数据到各个类别得分的映射。定义几个符号,训练集为
xi∈RD
,训练集的每个元素有个对应的标签
yi
,
i=1…N
,
yi∈1…K
。即训练集有
N
个数据,维度为
线性分类器
一个常用的映射函数为
xi 是图像数据,展开为一个列向量[D x 1]。矩阵 W (维度[K x D])和向量
需要注意:
1、 Wxi 得到的乘积是个列向量[K x 1],K个值对应K类。
2、优化的目的就是让上面函数的得分尽量和真实标签的值接近。
3、训练结束后,可以丢弃训练数据,只使用学到的参数值即可预测。
4、预测时只是矩阵的相乘和相加,速度很快。
解释线性分类器:
线性分类器是计算图像所有像素值的加权和,图像包括3个颜色通道。根据我们队权重(正/负)的设置,映射函数可以喜好或讨厌某一类颜色。例如,对于“船”这个类别,蓝色(海水)可能会在图像占比较大比例。这样在分类“船”时,蓝色对应的通道的可能会有比较多的正权重,而红色和绿色通道可能会有比较多的负权重。
下面是一个图像分的例子:
可以看出,更加倾向认为是一只狗。
类比高维空间
图像被展开为高维空间的列向量,可以把图像当做高维空间的一个点(例如CIFAR-10的中图像是3072维度空间的一个点)。线性分类函数就是来划分这个高维空间,假设这个高维空间是2维的,可视化后如下:
上图表示图像空间,每个点都是一个图像。矩阵
W
的每一行都是一条直线,控制其方向,
线性分类器看做模板匹配
权重矩阵
W
的每一行可以看做匹配某一类的模板,每一类的打分就是图像和对应类别模板的乘积。下图是CIFAR-10训练后的模板的可视化图像:
可以看出“船”的模板包含很多蓝色的像素,这样会给蓝色通道像素分值比较高。
偏置技巧
可以把上面公式中,后面加的权重放到前面的矩阵乘法中,技巧就拓展矩阵多出一列,输入数据多出一维,最终公式变为:
通过下图一看便知
数据预处理
图像的像素范围是[0…255],但是在机器学习中经常要将特征归一化。经常用到的是把数据中心化center your data,通过减去每个特征的均值来做到的。例如减去像素的均值,可以是范围变为[-127…127]。有时还做进一步处理,使范围变为[-1,1]。0均值中心化非常重要,学了梯度下降就可以理解这一点了。
损失函数
前面通过评分函数来计算属于每一类的得分。这里通过损失函数来计算对得分的满意程度。损失函数又称作代价函数或目标。结果越好,损失函数值将越低,结果越差,损失函数的值将越高。
多类SVM loss
这里定义SVM的loss函数。SVM loss会使正确类别的得分比错误类别的得分至少高
Δ
。用
s
代表分数,第i个图像对应第j类的得分
一个例子
假设有3个类别,对应的得分 s=[13,−7,11] ,真实类别是 yi=0 , Δ=10 。损失函数有2项
上式中第一项为0,因为-7分值和真实得分相差20,大于 Δ ;,第二项就不为0了,因为11分值和13只相差2,所以Loss函数就不为0了。
这一节是将线性分类器,所以Loss函数有以下形式
下图就是多类别SVM loss可视化图。
上面损失函数有叫做hinge loss,形式为 max(0,−) ,有时会使square hinge loss(或L2-SVM)来代替,形式为 max(0,−)2 。
正则化
上面提到的loss函数有bug。设想以下,假设假设评价函数能正确预测所有分类,且损失函数
Li=0
;这样权重并不是唯一的。因为如果一组权重
W
符合这样的要求,那么
可以通过对
W
加上些限制来移除上面的不确定性,得到一个唯一确定的权重系数矩阵。一般是通过正则化惩罚来实现
这个公式中不包含数据,是和数据无关的的loss。这样 Li 就由2项组成了:data loss,regularization loss。
展开后形式如下:
上式中 λ 是一个超参数,通过使用交叉验证来设置它。
引入正则化惩罚还可以带来其他许多性质,后面章节会提到。例如,在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
,而不针对偏差
实践注意事项
设置
Δ
:
Δ
这个超参数一个常用的值是
Δ=1.0
。超参数
Δ
和
λ
看上去是不同的超参数,实际上它们有同样的功能:平衡目标函数中的data loss和regularization loss。权重
W
的幅度直接影响评价函数的得分,例如放大权重幅度,得分也会变大,不同类别之间的得分差异也就变大了。
和二项SVM关系:二项SVM是多项SVM的一个特例。
在原始形式中优化:如果以前学过SVMs,可能会听过核方法、对偶、SMO算法等。在神经网络中,往往使用目标函数的原始形式。许多模板函数在技术上不可分,但是实际中可以使用次梯度。
其他形式的SVM:本节的多类SVM只是一种,还有其他形式。
Softmax分类器
除了SVM分类器外,还有一种常用的叫做Softmax分类器,它是二元逻辑回归泛化到多元的情况。Softmax分类器的输出不是得分,而是对应类别的概率。Softmax分类器中,映射函数
f(xi;W)=Wxi
并没改变,把得分当做未归一化的对数概率,把hinge loss替换为交叉熵 loss:
其中, fj 表示第j类的得分。整个数据集的loss是 Li 加上正则化项 R(W) 。函数 fj(z)=ezj∑kezk 叫做softmax函数,它把得分向量转换为概率向量。
信息论角度:一个真实分布
p
和其估计分布
Softmax分类器是最小化估计的分布( q=efyi/∑jefj )和真实分布( p=[0,...,1,...,0] ,只有第 yi 个为1)之间交叉熵。交叉熵可以看做熵和相对熵的和相对熵的和 H(p,q)=H(p)+DKL(p||q) ,真实分布 p 的熵是零,所以最小化交叉熵等价于最小化相对熵。
概率解释:公式
已知输入数据 xi 和权重参数 W ,上式可以看做对应类别
实践问题:数值稳定:当写代码实现Softmax函数时,会涉及到
C 通常设为
SVM vs. Softmax
下面图像可以帮助对比两者区别
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
和偏置
2、和kNN使用不一样,参数化方法训练时间比较久,预测只是矩阵相乘。
3、通过一个trick,可以把偏置加入到矩阵相乘中。
4、定义了loss 函数,介绍了常用的SVM和Softmax loss。对比了两者的区别。
如果求解最优的参数,这设计到优化,是下一届讲解的问题。