课程2和3简介
CS231n 视频课程2和3从图像分类要解决的原始问题及面对的困难为起点,引出第一个也是最直观的最近邻分类器(KNN),讲解KNN模型时,引入了模型的超参(hypeparameter)概念,进一步讨论如何选取超参时水到渠成的引出了数据集的切分和K折交叉验证法;接着在说明了KNN用于image classification中的缺陷后开始学习较为强大线性分类器(linear classifier),模型的调参过程中需要用损失函数(Loss function)来评价当前模型的输出和实际值之间的误差,课程中介绍了多类别的SVM Loss function和Softmax Loss function,然后通过两中Loss function的’bug’引出了正则化(Regularization)并且简单比较了L1正则化和L2正则化的特点,最后介绍了梯度下降法在模型优化中的使用,为下一节的BP算法做准备。
认真学习这两节课程之后,会发现以上提到的ML中的基础概念或方法都不是孤立的,它们都是在同一个问题的背景下,解决不同问题的理念和方法而已,这是两节课给我最大的收获。
线性分类器
不要小看这个听起来很low的分类器,机器学习所有算法中它是你怎么也躲不过的,也不要以为它很简单,即使现在很流行的神经网络的深度学习本质也是由一层层的线性分类器组合而来。
线性,指量与量之间按比例、成直线的关系,在数学上可以理解为一阶导数为常数的函数,线性分类器的数据表达式如下:
看似很简单,线性分类器的输出结果为每种特征在不同权重下的叠加组合而已,考虑一张32*32*3的图片,分类器中的参数都是什么形状的矩阵或者向量呢
上图中的参数大小来源于类别(10),图像大小(32*32*3=3071)以及矩阵行列满足矩阵运算的基本要求就能推导出 W和b W 和 b 的大小,在有了分类器的模型之后,我们接着要做的有:
- 定义损失函数(Loss function)来衡量模型进行图像分类的结果有多好(差)
- 让模型能准确的对图像分类,即需要找到有效的手段来最小化损失函数
假设 Li L i 是第i张图片的损失函数,根据我们的需求, Li L i 是图像的计算分类类别 f(xi,W) f ( x i , W ) 和真正所属类别 yi y i 的函数,那么整个模型的损失函数可定义为:
L(W)=1n∑Li(f(xi,W),yi) L ( W ) = 1 n ∑ L i ( f ( x i , W ) , y i )
因此,整个损失函数中最重要的是单张图像的损失函数到底该怎么表示,接下来主要介绍多类别支持向量机损失函数(Multiclass SVM Loss),把我们的分类器函数用 s s 表示,即,Multiclass SVM Loss定义如下图:
理解上式需要首先明白这里的 sj s j 是一个标量值,表示了当前图像属于 j j 类的得分,是当前图像属于它的标签类别(真正所属类别)的得分,图像分类问题中,我们期望图像的 syi s y i 越大越好,且当 j≠yi j ≠ y i 的 s s 都为0,只有这样我们定义的才会为0,并且我们的分类时完全正确的。举个实际例子,如下图中,汽车的图片经过线性分类器后,在不同类别的得分分别为猫1.3,车4.9,青蛙2.0,根据Multiclass SVM Loss的定义可计算出当前图像的的损失函数值为0,即分类已经正确。
综上,我们使用损失函数来衡量模型分类的准确情况,通过调整权重矩阵 W W 来使得损失函数值最小,
L=1n∑i=1N∑j≠yimax(0,f(xi;W)j−f(xi;W)yi+1) L = 1 n ∑ i = 1 N ∑ j ≠ y i m a x ( 0 , f ( x i ; W ) j − f ( x i ; W ) y i + 1 )
但是存在一个问题,即使我们求得一个 W W 使得,当我们按比例增大或减小W时, L L 仍然会为0,因此我们得到的模型参数是不唯一的,该如何选择最优的 W W 就要用到机器学习中对抗过拟合的法宝–正则化(Regularization),为什么当不唯一时我们需要正则化呢,这是由于正则化会对 W W 产生约束,进而使得损失函数最小时, W W 的取值也最优,其次正则化可以使得模型更加简单(也是通过约束)并且在测试集数据上表现更好,当然正则化带来的好处还有更加高深复杂的解释和理论推导,这里我们暂且知道它能帮助解决当前问题即可。引入正则化之后,我们的损失函数需要修改为:
L(W)=1n∑Li(f(xi,W),yi)+λR(W) L ( W ) = 1 n ∑ L i ( f ( x i , W ) , y i ) + λ R ( W )
其中, λ λ 是正则化系统,属于模型的超参数,常用的正则化方法有 L1 L 1 正则化和 L2 L 2 正则化以及弹性网络(ElasticNet)
除了上述3中简单常用的正则化方法,还有其他一些正则化方法,深度学习中一个重要的问题就是模型过拟合,而正则化是解决模型过拟合的主要手段,不同正则化方法的原理及优缺点放在后面单独介绍。
多类别/多项式逻辑回归(Softmax classifier/Multinomial Logistic Regression)
课程中在介绍完线性分类器(还没有介绍Loss function的优化部分)后,又介绍了Softmax classifier,这个分类器别名比较多,实际上就是逻辑回归在多类别分类时的扩展,其本质上就是在一个线性分类的结果上添加了softmax函数,将线性分类器的输出值范围转换为0~1之间,这样就可以理解为图像属于不同类别的概率,比单纯的得分更有意义。
我们定义给定图像
xi
x
i
,它属于类别
k
k
的概率为:
对线性分类器应用了softmax函数后,损失函数里面包含了 e e 为底的指数函数,因此为了计算方便且不影响原函数的单调性,将原损失函数做变换,即:
这里取负号是因为 log(x) l o g ( x ) 在 (0,1) ( 0 , 1 ) 区间是单调递增且取值为 (−∞,0) ( − ∞ , 0 ) 的,但是我们给softmax的定义可知x代表概率,首先要大于0,其次,损失函数值在分类正确情况下(softmax = x = 1)时应该为0,如下图,-log(x)刚好可以满足我们的所有需求。
课程中简要的提到了对损失函数的最优化求解,从随机搜索到梯度下降法求解,因为深度学习中通常用BP算法来求解损失函数的极值,因此后续课程中单独讲解了BP算法。
使用课程中的一张图结束本文,图片举例比较了使用SVM损失函数的线性分类器和softmax分类器的流程,根据图也可以看出softmax分类器实际上就是在线性分类器的结果上增加了一个softmax函数变换,将分类结果转化为容易理解概率。