目录
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
上节课讲了什么是图像分类,介绍了一种简单的监督算法KNN。KNN的在图像分类上的效果并不好,后续我们会介绍神经网络和卷积神经网络。神经网络的方法涉及到两个重要的组成:score function(评分函数)和loss function(损失函数)。
评分函数Score function:将原始数据映射成类别得分。
损失函数Loss function:评估预测的类别得分与真实标签之间的差异。
通过这两个函数,可以将分类问题转换为优化问题,即:求使损失函数取得最小值的score function的参数。
定义:图像训练集包含张图片,表示代表第i张图片,且,代表图像的维度。,代表图片的类别。
以CITAR-10数据集为例,共包含张图片,每张图片包含像素,共有个类别。
定义评分函数为:
线性分类器的映射函数/表达式为:
公式(1) |
其中代表图像数据:由原始图像展开得到的一个的向量。矩阵代表权重,表示偏置bias。
以CITAR-10为例:的是维度为的向量;是维度为的矩阵;为维度的向量。
注意:
(1) 得到的列向量,每一行代表在对应类别上的score。
(2)机器学习的目的是为了找到一组参数,使得上面的函数对数据的评分尽可能与真实的标签值接近。
(3)训练结束后,可以丢弃训练数据,只需要保存参数值就可以进行预测。
(4)预测的速度很快,就是进行矩阵的相乘和相加。
线性分类器的解释:
线性分类器就是计算图像所有像素的加权和。
权重的每一行可以看做对应类的模板,每一类的打分就是图像和对应模板的乘积。
此外,还可以将线性分类器看成Nearest Neighbor(最近邻学习),即:为输入图像在给定的不同类别的模板中找到最相似的一个模板,作为最后的得分。
偏置技巧:
我们可以将公式(1)中的偏置项移到前面的矩阵乘法中,即:
公式(2) |
看图便可了解变换方法:
前面我们通过评分函数score function对来计算输入图像属于每一类的得分。而损失函数则是用来评估score function打分结果的好坏。打分越贴近真实标签值,则损失函数越小,反之越大。
首先给出多类别SVM损失函数的定义,SVM Loss希望正确类别的得分比其他类别的得分至少高出。用代表score function给出的打分,第个图像在第类上的得分是,那么第个图像的SVM损失可以用如下公式定义:
公式(3) |
举一个例子:
假设共存在3个类别,score function对某样本的打分为,该样本的真实类别为,,则该样本的损失函数为:。虽然类别2的得分低于真实类别的得分,但是由于SVM Loss希望实现的是真实类别的得分比其他类别至少高出,由于不满足该条件所以仍会带来损失。
本节的分类器是线性分类器时,将score function带入公式(3)可以得到线性分类器的损失函数:
公式(4) |
其中,是的第行。
Hinge Loss:上面的损失函数叫Hinge Loss,形式为。有时也会使用square hinge loss来替代,形如:。
上面的损失函数存在一个“bug”。设想一下,假设评分函数都能够正确预测所有分类,即:,都有,那么这些性能问题是,这样的权重并不是唯一的。因为如果一组权重满足这样的要求,那么对于也都满足这个要求。只不过当评价函数的值不为的时候,那么其得分会被放大倍。
为了解决这个问题,我们可以对添加一些限制来移除上述不确定性,即:对原始损失函数进行扩展,为其添加一个正则项。常用惩罚是范数:
公式(5) |
注意1:惩罚项与数据无关。
这样,损失函数就可以被改写成由data loss和regularization loss两部分组成的:
展开后可得: |
公式(6) |
其中,为一个超参数,可以通过交叉验证进行设置。
正则项可以惩罚大的权重值,这样可以提高模型的泛化能力。例如:输入数据,有两组权重,内积相等。但是L2惩罚不同,对于是1.0,而对于是0.25,故而优于。从直观上看,的取值更小且更加分散,输入数据的所有维度都会对评价函数产生影响,而不是仅仅其中几个维度就决定了评价函数。因此,具有更好的泛化性能,能够减小过拟合。
注意2:惩罚项只针对,而不针对偏差,因为偏差对输入数据各个维度大小没有影响。
margin和正则化系数的关系
也是一个超参数,常用取值为1.0。超参数和具有相同的作用:平衡目标函数中的data loss和regularization loss。因为二者均可以直接或间接影响评价函数的得分,进而影响不同类别之间的得分差异。
二分类SVM是Multiclass SVM的一种特例,其损失函数为:
公式(7) |
想进一步了解SVM,了解核方法、对偶、SMO算法等可以参见博客:机器学习知识点总结 - SVM
如:OVA(One-vs-All)SVM:为每一个类别训练一个二分类SVM。
Softmax分类器是二元Logistics回归泛化到多元分类的情况。与SVM不同的是,Softmax分类器不输出得分,而是输出对应类别的概率。Softmax分类器中,映射函数仍为前面介绍的线性分类器,但是利用Softmax函数将其输出进行运算得到归一化对数概率。
Softmax函数的定义:
公式(8) |
其中,代表第在第个类别上softmax函数给出的归一化对数概率值,代表线性函数在第个类别上的输出。
此外,Softmax分类器使用的损失函数为cross-entropy loss,其定义如下:
公式(9) |
公式(10) |
Softmax分类器是最小化估计的分布和真实分布(,只有第个为1)之间的交叉熵。交叉熵可以看做熵和相对熵的和相对熵的和,真实分布的熵是零,所以最小化交叉熵等价于最小化相对熵。
公式(11) |
已知输入数据和权重参数,上式可以看做对应类别的归一化概率。评价函数的输出向量没有归一化,直接作为对数概率的输入,之后用对数概率除以所有概率的和来进行归一化,这样概率的和为1。从概率论角度看,我们再最小化正确分类的负概率(即最大化正确分类的概率),这是最大似然估计(Maximum Likelihood Estimation)。这样损失函数中的正则化部分可以看过权重矩阵的高斯先验,这样最大似然估计变成了最大后验概率估计(Maximum a posteriori Estimation)。
数值稳定:当写代码实现Softmax函数时,会涉及到和的计算,因为指数的原因,这些数值可能会非常大。除以很大的数值可能会引起数值不稳定,这时可以使用归一化的技巧。在分子和分母同时乘以一个常数,分数的数值不变:
公式(12) |
通常设为,这样分数向量中最大的值为0。
下图可以帮助对比两者的区别:
相对于SVM给出的是类别的得分,Softmax分类器计算每类的概率,直观上比较容易理解。
实践中,SVM和Softmax性能差别不大,不同的人对哪种效果更好持不同的观点。和Softmax相比,SVM更加局部化(local objective),它只关心小于间隔Δ的部分,例如Δ=1,那么分值[10, -100, -100]和[10, 9, 9]对于SVM来说,其loss函数值相同;但是对于softmax就不同了。Softmax的loss函数只有在完全正确情况下才会为0。