cs231n 学习笔记(2)- 线性分类器、Multiclass SVM与Softmax

目录

1. 引言

2. Parameterized mapping from images to label scores

3. 线性分类器

4. 损失函数cost function

4.1 多类别SVM损失函数 Multiclass SVM Loss

4.1.1 正则化

4.1.2  Practical Considerations

4.2 Softmax Classifier

4.3 SVM vs. Softmax

5. Summary


博客:https://blog.csdn.net/KangRoger/article/details/52425480 

1. 引言

上节课讲了什么是图像分类,介绍了一种简单的监督算法KNN。KNN的在图像分类上的效果并不好,后续我们会介绍神经网络和卷积神经网络。神经网络的方法涉及到两个重要的组成:score function(评分函数)和loss function(损失函数)。

评分函数Score function:将原始数据映射成类别得分。

损失函数Loss function:评估预测的类别得分与真实标签之间的差异。

通过这两个函数,可以将分类问题转换为优化问题,即:求使损失函数取得最小值的score function的参数。

2. Parameterized mapping from images to label scores

定义:图像训练集X包含N张图片,x_i表示代表第i张图片,且x_i \in R^DD代表图像的维度。y_i\in 1,2,...,K,代表图片x_i的类别。

以CITAR-10数据集为例,共包含N=50,000张图片,每张图片包含D=32\times 32\times3像素,共有K=10个类别。

定义评分函数为:R^D \mapsto R^K

3. 线性分类器

线性分类器的映射函数/表达式为:

f(x_i,W,b)=Wx_i+b 公式(1)

其中x_i代表图像数据:由原始图像展开得到的一个[D\times1]的向量。矩阵W_{K\times D}代表权重,b_{K\times 1}表示偏置bias。

以CITAR-10为例:x_i的是维度为3072\times1的向量;W是维度为10\times3072的矩阵;b10\times1维度的向量。

注意:

(1) Wx_i得到10\times1的列向量,每一行代表在对应类别上的score。

(2)机器学习的目的是为了找到一组参数W, b,使得上面的函数对数据的评分尽可能与真实的标签值接近。

(3)训练结束后,可以丢弃训练数据,只需要保存参数值就可以进行预测。

(4)预测的速度很快,就是进行矩阵的相乘和相加。

线性分类器的解释:

线性分类器就是计算图像所有像素的加权和。

权重W的每一行可以看做对应类的模板,每一类的打分就是图像和对应模板的乘积。

此外,还可以将线性分类器看成Nearest Neighbor(最近邻学习),即:为输入图像在给定的不同类别的模板中找到最相似的一个模板,作为最后的得分。

偏置技巧:

我们可以将公式(1)中的偏置项移到前面的矩阵乘法中,即:

f(x_i,W)=Wx_i 公式(2)

看图便可了解变换方法:

4. 损失函数cost function

前面我们通过评分函数score function对来计算输入图像属于每一类的得分。而损失函数则是用来评估score function打分结果的好坏。打分越贴近真实标签值,则损失函数越小,反之越大。

4.1 多类别SVM损失函数 Multiclass SVM Loss

首先给出多类别SVM损失函数的定义,SVM Loss希望正确类别的得分比其他类别的得分至少高出\Delta。用s代表score function给出的打分,第i个图像在第j类上的得分是s_j=f(x_i,W)_j,那么第i个图像的SVM损失可以用如下公式定义:

L_i=\sum_{j\neq y_i}max(0,s_j-s_{y_i}+\Delta) 公式(3)

举一个例子:

假设共存在3个类别,score function对某样本的打分为s=[13,-7,11],该样本的真实类别为y_i=0\Delta=10,则该样本的损失函数为:L_i=max(0,-7-13+10)+max(0,11-13+10) = 8。虽然类别2的得分低于真实类别的得分,但是由于SVM Loss希望实现的是真实类别的得分比其他类别至少高出\Delta,由于不满足该条件所以仍会带来损失。

本节的分类器是线性分类器时,将score function带入公式(3)可以得到线性分类器的损失函数:

L_i=\sum_{j\neq y_i}max(0,w_j^Tx_i-w_{y_i}^Tx_i+\Delta) 公式(4)

其中,w_jW的第j行。

Hinge Loss:上面的损失函数叫Hinge Loss,形式为max(0,-)。有时也会使用square hinge loss来替代,形如:max(0,-)^2

4.1.1 正则化

上面的损失函数存在一个“bug”。设想一下,假设评分函数都能够正确预测所有分类,即:\forall x_i\in X,都有L_i=0,那么这些性能问题是,这样的权重并不是唯一的。因为如果一组权重W满足这样的要求,那么对于\forall \lambda>1, \lambda W也都满足这个要求。只不过当评价函数的值不为0的时候,那么其得分会被放大\lambda倍。

为了解决这个问题,我们可以对W添加一些限制来移除上述不确定性,即:对原始损失函数进行扩展,为其添加一个正则项R(W)常用惩罚是L_2范数:

R(W)=\sum_{k} \sum_{l} W_{k,l}^2 公式(5)

注意1:惩罚项与数据无关。

这样,损失函数就可以被改写成由data loss和regularization loss两部分组成的:

L=\frac{1}{N}\sum_{i}\sum_{j\neq y_i}L_i+\lambda R(W)

展开后可得:

L=\frac{1}{N}\sum_{i}\sum_{j\neq y_i}[max(0,f(x_i;W)_j-f(x_i;W)_{y_i}+\Delta)]+\lambda \sum_{k} \sum_{l}W_{k,l}^2

公式(6)

其中,\lambda为一个超参数,可以通过交叉验证进行设置。

正则项可以惩罚大的权重值,这样可以提高模型的泛化能力。例如:输入数据x=[1,1,1,1,1],有两组权重w1=[1,0,0,0],w2=[0.25,0.25,0.25,0.25],内积相等w_1^Tx=w_2^Tx=1。但是L2惩罚不同,对于w_1是1.0,而对于w_2是0.25,故而w_2优于w_1。从直观上看,w_2的取值更小且更加分散,输入数据的所有维度都会对评价函数产生影响,而不是仅仅其中几个维度就决定了评价函数。因此,具有更好的泛化性能,能够减小过拟合。

注意2:惩罚项只针对W,而不针对偏差b,因为偏差对输入数据各个维度大小没有影响。

margin和正则化系数的关系

4.1.2  Practical Considerations

  • \Delta的设定

\Delta也是​一个超参数,常用取值为1.0。超参数\Delta\lambda具有相同的作用:平衡目标函数中的data loss和regularization loss。因为二者均可以直接或间接影响评价函数的得分,进而影响不同类别之间的得分差异。​​​​​​

  • Multiclass SVM与二分类SVM之间的关系

二分类SVM是Multiclass SVM的一种特例,其损失函数为:

L_i=Cmax(0,1-y_iw^Tx_i) + R(W)

公式(7)

其中,C是超参数,y_i \in \{\left -1,+1 \right \}C\propto \frac{1}{\lambda}

  • Optimization In Prime

想进一步了解SVM,了解核方法、对偶、SMO算法等可以参见博客:机器学习知识点总结 - SVM

  • 其它Multiclass SVM

如:OVA(One-vs-All)SVM:为每一个类别训练一个二分类SVM。

4.2 Softmax Classifier

Softmax分类器是二元Logistics回归泛化到多元分类的情况。与SVM不同的是,Softmax分类器不输出得分,而是输出对应类别的概率。Softmax分类器中,映射函数仍为前面介绍的线性分类器,但是利用Softmax函数将其输出进行运算得到归一化对数概率。

Softmax函数的定义:

S_j(z)=\frac{e^{z_j}}{\sum_{k}e^{z_k}}

公式(8)

其中,S_j代表第在第j个类别上softmax函数给出的归一化对数概率值,z_j代表线性函数在第j个类别上的输出。

此外,Softmax分类器使用的损失函数为cross-entropy loss,其定义如下:

L_i=-log(\frac{e^{y_i}}{\sum_je^{f_j}})              或可以写成            L_i = -f_{y_i}+log\sum_je^{f_j}

公式(9)
  • 信息论角度:一个真实分布p和其估计分布q的交叉熵定义如下: 

H(p,q)=- \sum_xp(x)logq(x)

公式(10)

Softmax分类器是最小化估计的分布q=e^{f_{y_i}}/ \sum_{j}e^{f_j}和真实分布(p=[0,...,1,...,0],只有第y_i个为1)之间的交叉熵。交叉熵可以看做熵和相对熵的和相对熵的和H(p,q)=H(p)+D_{KL}(p||q),真实分布p的熵是零,所以最小化交叉熵等价于最小化相对熵。

  • 概率角度:

P(y_i\mid x_i;W)=e^{f_{y_i}}/\sum_je^{f_j}

公式(11)

已知输入数据x_i和权重参数W,上式可以看做对应类别y_i的归一化概率。评价函数的输出向量没有归一化,直接作为对数概率的输入,之后用对数概率除以所有概率的和来进行归一化,这样概率的和为1。从概率论角度看,我们再最小化正确分类的负概率(即最大化正确分类的概率),这是最大似然估计(Maximum Likelihood Estimation)。这样损失函数中的正则化部分R(W)可以看过权重矩阵W的高斯先验,这样最大似然估计变成了最大后验概率估计(Maximum a posteriori Estimation)。

  • 实践问题

数值稳定:当写代码实现Softmax函数时,会涉及到e^{f_{y_i}}\sum e^{f_j}的计算,因为指数的原因,这些数值可能会非常大。除以很大的数值可能会引起数值不稳定,这时可以使用归一化的技巧。在分子和分母同时乘以一个常数,分数的数值不变: 

\frac{e^{f_{y_i}}}{\sum_je^{f_j}}=\frac{Ce^{f_{y_i}}}{C\sum_je^{f_j}}=\frac{e^{f_{y_i}+logC}}{\sum_je^{f_j+logC}}

公式(12)

C通常设为logC= - max_jf_j,这样分数向量中最大的值为0。

4.3 SVM vs. Softmax

下图可以帮助对比两者的区别:

相对于SVM给出的是类别的得分,Softmax分类器计算每类的概率,直观上比较容易理解。

实践中,SVM和Softmax性能差别不大,不同的人对哪种效果更好持不同的观点。和Softmax相比,SVM更加局部化(local objective),它只关心小于间隔Δ的部分,例如Δ=1,那么分值[10, -100, -100]和[10, 9, 9]对于SVM来说,其loss函数值相同;但是对于softmax就不同了。Softmax的loss函数只有在完全正确情况下才会为0。

5. Summary

  • 定义了score function,并给出了线性函数的score function的定义。 
  • 和kNN使用不一样,参数化方法训练时间比较久,预测只是矩阵相乘。 
  • 通过一个trick,可以把偏置加入到矩阵相乘中。 
  • 定义了loss function,介绍了常用的SVM和Softmax loss。对比了两者的区别。

猜你喜欢

转载自blog.csdn.net/Emma_Love/article/details/87030413