部分内容参考自链接:https://zhuanlan.zhihu.com/p/20918580
1. 为什么放弃使用传统的图像分类方法(KNN)而是使用线性分类?
k-Nearest Neighbor分类器存在以下不足:
- 分类器必须记住所有训练数据,存储起来以便于未来与测试数据比较。这在存储空间上是低效的,数据集的大小以GB计。
- 对一个测试图像进行分类需要和所有训练图像作比较,算法计算资源耗费高。
2. 线性分类方法的组成?
(1)评分函数(score function),它是图像的像素值映射为各分类类别的得分,得分高低代表图像属于该类别的可能性高低
(2)损失函数(loss function),它是用来量化预测分类标签的得分与真实标签之间一致性的。
该方法可将分类问题转化为一个最优化问题,在最优化过程中,将通过更新评分函数的参数来最小化损失函数的函数值。
3. 从图像到标签分值的映射?
N个图像样例: 每个图像维度为D
K个不同分类:
我们现在定义评分函数为:,该函数是原始图像像素到分类分值的映射。
4. 线性分类器:最简单的一个线性映射: 其中,矩阵W大小为[K x D];图像数据大小为[D x 1];列向量b大小为[K x 1] ;最后的分类数值的大小也为 [K x 1] 也就说,输入的每个图像数据都将被拉长为一个长度为D的列向量再输出。矩阵W和列向量b为该函数的参数(parameters) 操作方法:首先将图像像素拉伸为一个列向量,与W进行矩阵乘,然后得到各个分类的分值。
以CIFAR-10为例,就包含了第i个图像的所有像素信息,这些信息被拉成为一个[3072 x 1]的列向量,W大小为[10x3072],b的大小为[10x1]。因此,3072个数字(原始像素数值)输入函数,函数输出10个数字(不同分类得到的分值)。 参数W被称为权重(weights)。b被称为偏差向量(bias vector),这是因为它影响输出数值,但是并不和原始数据产生关联。在实际情况中,人们常常混用权重和参数这两个术语。
需要注意的几点:
- 首先,一个单独的矩阵乘法[10 x 1]就可高效地并行评估10个不同的分类器(每个分类器针对一个分类)。 其中每个类的分类器就是W的一个行向量。
- 注意我们认为输入数据是给定且不可改变的,但参数W和b是可控制改变的。我们的目标就是通过设置这些参数,使得计算出来的分类分值情况和训练集中图像数据的真实类别标签相符。在接下来的课程中,我们将详细介绍如何做到这一点,但是目前只需要直观地让正确分类的分值比错误分类的分值高即可。
- 该方法的一个优势是训练数据是用来学习到参数W和b的,一旦训练完成,训练数据就可以丢弃,留下学习到的参数即可。这是因为一个测试图像可以简单地输入函数,并基于计算出的分类分值来进行分类。
- 最后,注意只需要做一个矩阵乘法和一个矩阵加法就能对一个测试数据分类,这比k-NN中将测试图像和所有训练数据做比较的方法快多了。
5. 损失函数(Loss Function)(有时也叫代价函数Cost Function或目标函数Objective)来衡量我们对结果的不满意程度。直观地讲,当评分函数输出结果与真实结果之间差异越大,损失函数输出越大,反之越小。: