cs231n 学习笔记(1)- 计算机视觉和图像分类

目录

 

1. 图像分类

2. KNN

3. Validation sets for Hyperparameter tuning

4. Cross Validation

5. KNN实践总结


1. 图像分类

图像分类就是对给定输入图像打上标签标记所属类别,其中标签集合是固定的。图像分类问题是计算机视觉的核心,其他问题如目标检测、分割等最终都可以看成图像识别问题。

图像分类问题存在的挑战:

  • 视角差异:同一物体在不同视角拍出的照片会存在差异
  • 尺度差异:物体本身的大小以及物体在图像中所占的大小的差异。
  • 形变:物体的形状可以发生改变,同一个物体,可能以不同的形状出现。
  • 遮挡:目标物体有时会被遮挡,仅仅能看到部分物体
  • 光照:光照会影响像素值的大小。 
  • 背景:目标物体可能会被背景噪声干扰进而难以被识别。 
  • 对象内部差异:同一类对象间自身存在的差异,例如椅子,有各式各样的的椅子,外表各不相同。

图像分类学习的流程:

输入:输入训练集,训练集由N个带标签的图像组成,其中标签种类为K。

学习:学习每一类图像的特征,即:训练或模型学习。

评估:在一个与训练集不同的新的数据集上对模型的效果进行评估。

2. KNN

K近邻(KNN,K-Nearest Neighbor)学习是一种常用的监督学习方法。

KNN的思想非常简单,即:对于给定的测试样本,基于某种距离度量在训练集中找到与输入样本最靠近的K个样本,基于这K个样本,使用“投票法”/“平均法” 或根据距离的远近使用“加权投票法/加权平均法”进行预测。

投票法:在分类任务重使用投票法,即:选择K个样本中出现最多的标记作为预测结果。

平均法:在回归任务中使用平均法,即:对这K个样本的标记取平均值作为预测结果。

KNN是一种“懒惰学习”算法,即:在训练过程只需要简单的“记住”所有训练样本,不进行其他任何操作;而等到测试任务开始的时候才进行计算。

在KNN算法中,如何进行度量两个样本之间的距离非常关键。常用的两种度量方法为:L1 distance和L2 distance,其定义如下:

L1 Distance: d_1(I_1,I_2) = \sum_{p}\left | I_1^p-I_2^p \right |
L2 Distance: d_2(I_1,I_2) =\sqrt{ \sum_{p}\left ( I_1^p-I_2^p \right )^2}

L1 vs. L2距离:由定义可知,相对于L1而言,L2对样本间的较小差异的感知能力较弱,但对较大的差异更加敏感。此外,在L1相同时,即差异的和相同时,当各个差异比较平均的情况下,L2更小。即:相对于大的差异,L2更加能容忍几个均匀的差异。

KNN的优缺点

优点:直观易理解,几乎不需要训练时间,只需要存储全部的training data就好。

缺点:测试/预测时耗时较长,因为需要将输入样本与训练集中的每个样本进行对比。而实际生产过程中,相对于训练过程所花费的时间,我们更关心在测试过程中的效率。

3. Validation sets for Hyperparameter tuning

Hyperparameter超参数:超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。 

在KNN中,K和距离度量方法是两个超参数。究竟K取多少才是最优的呢?究竟采用L1距离更好还是L2距离带来的效果更好呢?这些就涉及到了超参数的选择,即:调参。

注意:决不能使用测试集对超参数进行调参!

测试集在整个学习过程只能又一次,就是在最后的时刻用来验证算法性能!如果使用测试集进行调参,则训练的模型会对测试集产生过拟合

正确的做法是:将训练集一分为二,小的作为验证集。在验证集上进行调参。

当训练集较小时,可以考虑使用交叉验证的方法。

4. Cross Validation

K折交叉验证:将训练集分为K份,每次保留其中一份作为验证集评估模型效果,其余的K-1则作为训练集进行训练,共进行K次,最后对K次结果的均值来评估所用模型的好坏。这样做的好处是:可以降低一些噪声的干扰。但其缺点是非常耗时。下图给出了5折交叉验证的划分示例:

cs231n 学习笔记(1)- 计算机视觉和图像分类_第1张图片

因为交叉验证的计算代价高,因此在实践中并不经常使用交叉验证,而是单独使用一个验证集。但是,如果训练集很小的情况下,建议使用交叉验证。

5. KNN实践总结

  • 预处理数据:对数据进行归一化处理,使得数据均值为0,方差为1
  • 如果数据维数很高,需要进行降维,例如:使用PCA进行降维。
  • 将训练数据随机划分为train/val集。划分比例取决于超参数的数量,超参数越多,所需要的验证集越大。如果训练数据较少,建议使用交叉验证。
  • KNN的超参数包括:K值以及距离度量如:L1,L2。 
  • 如果预测时间过长,考虑使用近似NN库(Approximate NN library)
  • 记录超参数。不应该使用验证集来训练(最后的模型再用验证集训练),因为这样可能会导致超参数发生变化。正确的做法是使用使用最优超参数得到的模型,直接在测试集来评估超参数的效果。

你可能感兴趣的:(深度学习,cs231n学习笔记,CS231n学习笔记)