北京看白癜风哪里医院专业 https://jbk.39.net/yiyuanzaixian/bjzkbdfyy/etbdf/雷锋网AI科技评论按:本门课程是李飞飞主讲的斯坦福CSn计算机视觉课程,吉林大学珠海学院的赵一帆进行了笔记方面的整理。笔记如有出错,请及时告知。本文对应章节:数据驱动的图像分类方式:K最近邻与线性分类器。上一章节:计算机视觉历史回顾与介绍回到图片上来讨论KNN:可以看到,它实际上表现的不是很好。这里标记了红色和绿色,图像分类正确与否取决于它的最近邻值,可以看到KNN的表现效果不是很好,但如果使用一个更大的K值,那么投票操作的结果就可能会达到前三名或者前五名,甚至包括所有的数据范围。用这种方法来检索相邻数据时,可以想象到这样会对噪声产生更大的鲁棒性。还有另外一个选择,就是当使用K-近邻算法时,确定应该如何比较相对邻近数据距离值传递不同。对于迄今为止的例子,已经展示了已经讨论过的L1距离,它是像素之间绝对值的总和,另一种常见的选择是L2距离,也是欧式距离,即取平方和的平方根,并把这个作为距离。选择不同的距离度量实际上是一个非常有趣的话题,因为在不同维度里,会在预测的空间里对底层的几何或拓扑结构做出不同的假设。相对于下面所示的L1距离和L2距离实际上是一个根据距离的这个围绕着原点的方形和圆,这个方形上的每一个点在L1上是与原点等距的,而距离上类似的会是一个圆,它看起来像你所期望的。这两种方法之间特别指出一件有趣的问题:L1距离取决于你选择的坐标系统,如果你选择坐标轴,将会改变点之间的L1距离,而改变坐标轴对L2距离毫无影响,无论在怎么样的坐标下,L2距离是一个确定的值。如果输入一些特征向量,向量中的一些值有一些重要意义的任务,那么L1也许会更加适合。但如果它只是某个空间中的一个通用向量,而不知道其中的不同元素的意义,那么L2会更适合些。还有一点:通过使用不同的距离度量,可以将K-最近邻分类器泛化到许多不同的数据类型上,而不仅仅是向量,不仅仅是图像。例如,假设想对文本进行分类,那么只需要用KNN指定一个距离函数,这个函数可以测量两段话或者两段话之间的距离。因此,简单的通过指定不同的距离度量,便可以很好地将这个算法应用在基本上任何类型的数据上。选择不同的距离度量在几何学中是一个有趣的问题。在左边可以看到一组L1距离,右侧是使用L2距离。可以看出,分类器的决策边界其实是相差很大的:L1的决策边界趋向于随坐标轴,这是因为L1取决于对坐标的选择;L2对距离的排序并不会受到坐标的影响,只是把边界放置在存在最自然的地方。如何根据问题和数据来确定这些超参数?选择能对训练集给出高准确率、表现最佳的超参数。这其实是一种非常糟糕的想法,千万不要这么做。例如,在之前的K-最近邻分类算法中,假设K=1,总能完美分类训练数据,所以如果采用这一策略总是选择K=1,但是正如之前案例所见的,在实践中让K取更大的值,尽管会在训练集中分错个别数据,但对于在训练集中未出现过的数据分类性能更佳,归根到机器学习中,关心的并不是要尽可能拟合训练集,而是要让分类器在训练集以外的未知数据上表现更好。另一个想法是把数据分成两部分,一部分是训练集,另一部分是测试集,然后在训练集上用不同的超参数来训练算法,然后将训练好的分类器用在测试集上,再选择一组在测试集上表现最好的超参数。这似乎是个合理的策略,但事实上也非常糟糕。因为机器学习的目的是了解算法表现如何,所以测试集只是一种预估的方法,即在没遇到的数据上算法表现会如何,如果采用这种不同的超参数训练不同算法的策略,然后选择在测试集上表现最好的超参数,那么很有可能选择了一组超参数,只是让算法在这组测试集上表现良好,但是这组测试集的表现无法代表在权限的未见过的数据上的表现。更常见的做法是将数据分为三组:大部分作为训练集,然后一个验证集,一个测试集。在训练集上用不同的超参数训练,在验证集上进行评估,然后选择一组评估最好的参数,然后再把这组数据放到测试集中跑一跑,这才是要写到论文中的数据,这才是算法在未见过的新数据上的表现。还有一个设计超参数的方法是交叉验证。这个在小数据集上比较常用,在深度学习中并不怎么常用。它的理念是,取出测试集数据,将整个数据集保留部分作为最后使用的测试集,对于剩余的数据分成很多份,在这种情况下,轮流将每一份都当做验证集。经过交叉验证,会得到这样一张图:x轴表示K-近邻分类器中参数K值,y轴表示分类器对于不同K在数据上的准确率。在这个例子中,用了5次交叉验证,也就是说对于每个K值,都对算法做了5次测试来了解表现如何。使用K次交叉验证也许是一个量化它的好方法,可以观察到算法在不同验证集上表现的方差,同时,不光是知道哪样更好,还能看到算法效果的分布。其实,KNN在图像分类中很少用到,原因包括刚才谈到的所有问题。一是它在测试时运算时间很长,这和刚刚提到的要求不符;另一个问题在于,像欧几里得距离或者L1距离这样的衡量标准用在比较图片上实在不太合适。这种向量化的距离函数不太适合表示图像之间视觉的相似度。图中左边图的女生和右边三张经过不同处理的图片,如果计算他们和原图的欧式距离,会得到相同的答案,这并不是想要的。可以感觉出来L2不适合表示图像之间视觉感知的差异。还有一个问题称之为维度灾难,如果还记得对K近邻的描述,它有点像训练点把样本空间分成几块,这意味着,如果希望分类器有更好的结果,需要训练数据能够密集地分布在空间中。否则最邻近点的实际距离可能会很远。问题在于,要想要密集分布在空间中的数据,意味着需要指数倍地训练数据。小结:我们介绍了KNN做图像分类的基本思路,借助训练集的图片和相应的标记,我们可以预测测试集中数据的分类。下面将介绍神经网络,通常会把神经网络比喻为玩乐高。可以将不同种类的神经网络组件组合在一起,来构建不同的大型卷积网络,它是在不同类型的深度学习应用中看到的最基本的构建块之一。这类有关神经网络的模块化性质的例子来自于图像字幕实验室的一些研究。输入一副图片,然后输出用于描述图像的描述性的句子。这类工作是由一个
转载请注明:http://www.cvwkh.com/jbjs/15335.html