首页 AI学术青年与开发者社区

【中文字幕】2017春季CS231n 斯坦福深度视觉识别课

开课时间:2017年11月10日
开课时长:讲座共有6个lecture,3个 Guest Talk,已完结。加入小组即可立即观看(完全免费):https://ai.yanxishe.com/page/groupDetail/19。
免费课 基础入门
现价: 免费
该课程已关闭

1.L1距离:它依赖于数据的坐标系统

  L2距离:欧氏距离,即:取平方和的平方根

2.L2距离是一个确定的,无论你在什么样的坐标轴下,如果你输入的特征向量,如果向量中的一些值,有一些重要的意义对你的任务,那么也许L1可能更适合,但假如他只是某个空间中的一个通用向量,而你不知道其中的不同的元素,你不知道它们实际上代表的含义,那么L2可能更自然一些

3.简单地通过指定不同的距离度量,我们可以很好地应用这个算法,换句话说就是把不同的距离函数应用到K最近邻算法上,可以取得不同的效果

4.使用这个算法,有几个选择是你需要做的。我们讨论过选择K的不同值,也讨论过选择不同的距离度量,所以问题在于,你该如何根据你的问题和数据来选择这些超参数,所以,像K和距离度量这样的选择,我们称之为超参数,因为他们不一定都能从训练数据中学到,你要提前为算法做出选择,那么问题就在于在实践中,该如何设置这些超参数,这些参数被证明是依赖于具体问题的,多数人会为你的问题和数据尝试不同的超参数的值,并找出哪一个值是最好的

6.尝试不同超参看看哪种更合适,究竟该怎么做呢?      首先想到的是,选择能对你的训练集给出最高准确率,表现最佳的超参数(这也是不明智的)我们关心的不是要尽可能拟合训练集,而是要让我们的分类器,我们的方法在训练集以外的未知数据上表现更好。。最常见的做法就是将数据分为三组,大部分数据作为训练集,然后建立一个验证集,一个测试集。我们常做的是在训练集上用不同的超参来训练算法,在验证集上进行评估,然后用一组超参选择在验证集上表现最好的,然后再把这组在验证集上表现最佳的分类器拿出来在测试集上跑一跑,这才是你写论文中需要的数据

7.训练集与验证集的区别是什么?             训练集就是一堆贴上标签的图片,我们记下标签,要给图像分类,我们会将图片与训练集的每个元素进行比较,然后将与训练点最接近点的标签作为结果,我们的算法会记住训练集中的所有样本,然后我们会把验证集中的每个元素与训练集的每个元素比较,将它作为依据,判定分类器的准确率在验证集上表现如何。你的算法可以看到训练集上的各个标签,但在验证集中,你的算法不能直接看到它们的标签,我们只是用验证集的标签来检查我们算法的表现

8.小结:图像分类的思路:我们借助训练集的图片和相应的标记,我们可以预测测试集中数据的分类

[展开全文]

图像分类:K最近邻算法

K最近邻(k-Nearest Neighbour,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一。该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实例(也就是上面所说的K个邻居), 这K个实例的多数属于某个类,就把该输入实例分类到这个类中。 K值越大,边界越平滑。

注意:KNN在图像分类中表现不好。

一旦我们用KNN来区分图片的时候,得先找到计算图片差异的方法,比如L1距离,这个计算的是两幅图片所有像素之间的差的绝对值的总和,此计算方法对坐标比较依赖,一旦改变了坐标,这个值就不一样了,以此不是很可靠;但是另外一种常见的选择是L2距离,也就是欧式距离,求的是图片的所有像素的差的平方和的平方根,这个值就不再依赖于坐标系,比较可靠了。如果你输入的特征向量,如果向量中的一些值有一些重要的意义,那么也许L1可能更加合适;但是如果它只是某个空间中的一个通用向量,而你不知道其中的不同的元素,你不知道它们实际上代表的含义,那么L2可能更加自然一些。我们可以使用不同的距离度量将KNN分类器泛化到许多不同的数据类型上,不仅仅是向量和图像,比如想对文本进行分类,那么你唯一需要做的就是对KNN指定一个距离函数,这个函数可以测量两段话或者两句话或者类似的东西之间的距离。因此,简单地通过指定不同的距离度量,我们便可以很好地应用这个算法,在基本上任何类型的数据上,尽管这是一种简单的算法,但是总的来说,当你研究一个新的问题的时候,尝试它是一件很好的事情。

在几何上,我们使用不同的记录度量的时候,会出现不同的决策边界。使用L1度量时,这些决策边界倾向于跟随坐标轴,而根据L2度量的决策边界就自然很多。

当我们选择不同的K值以及不同的距离度量的时候,这个决策边界就不同,那么我们怎么根据自己的数据来选择这些超参数呢?超参数就是不能通过训练数据而得到的参数。我们要提前为算法做出的选择。很多人的做法就是根据自己的数据,选择不同的超参数,然后进行训练,看哪一个值是最好的。但是其实这个一种非常糟糕的算法,比如,在之前的KNN算法中,假如K=1,我们总能完美分类训练数据,所以如果我们采用这一策略总是选择K=1,但是如之前的案例所见的,在实践中让K取更大的值,尽管会在训练集中分错个别数据,但对于在训练集中出现过的数据分类性能更佳。归根到底在机器学习中我们关心的不是尽可能拟合训练集,而是要让我们的分类器、我们的算法,在训练集之外的未知数据上表现得更好。

还有一种想法就是把所有的数据,分成训练数据和测试数据两个部分,然后在训练集上使用不同的超参数来训练算法,然后将训练好的分类器用在测试集上。再选择一组在测试集上表现最好的超参数。这种做法同样很糟糕,因为机器学习系统的目的是让我们理解算法表现究竟如何,所以测试集的目的,是给我们一种预估方法。如果采用这种使用不同的超参数训练不同算法的策略,然后选择在测试集上表现最好的超参数,那么有可能我们选择了一直超参数只是让我们的算法在这组测试集上表现良好,但是这组测试集的表现,无法代表在全新的未见过的数据上的表现,所以再说一遍不要这么做,这个想法很糟糕。更常见的额做法是将数据分成三部分,大部分作为训练集,然后分成一部分作为验证集,剩下的一部分作为测试集。我们通常所做的就是在训练集上用不同的超参来训练算法,在验证集上进行评估,然后用一组超参数,选择在验证集上表现最好的分类器。当完成了这些步骤之后,我们就完成了所有的测试。再把这组在验证集上表现最佳的分类器拿出来,在测试集上跑,这个才是你需要写到论文中的数据。因此我们必须分类验证数据和测试数据。

另外一个设定超参数的办法是交叉验证。这在小数据集中更常用一些。在深度学习中不那么常用。它的理念是我们取出整个数据,然后将整个数据集中的部分数据保留作为最后使用的测试集,然后剩余部分,不是分成一个训练集合验证集,而是将训练数据分成很多份,在这种情况下,我们轮流将每一份当做验证集,用一组超参数来训练你的算法,现在前4份上训练,在第五份上验证,然后再次训练算法,在1、2、3、5份上训练,在第4份上验证,然后对不同分进行循环,当这么做了你会有更强的信心,哪组超参数的表现更稳定。所以这似乎是一种黄金法则,但是事实上,在深度学习中,当我们训练大型模型时,训练本身非常消耗计算能力,因此这些方法实际上不常用。

一般的做法是将收集到的数据随机打乱,然后随机分成训练集、验证集、测试集。最后你会根据验证集上的表现选择相应的K值和超参数。

但是KNN很少用在图像分类中,首先是它在测试时运算时间比较长,这和我们刚刚提到的需求不符。另外一个问题是像L2或者L1距离的衡量标准,用在比较图像上不合适。这种向量化的距离函数,不太适合表示图像之间视觉的相似度。究竟我们是如何区分图像中的不同的呢?比如原始图片是左边这位女士的图片,需要对比的图片是右边三张经过不同处理的图片,如果计算原图和后面三张图之间的L2距离,其值是一样的。但是这并不是我们想要的,因此L2不适合用来表示图像之间视觉感知的差异。

KNN算法还有另外一个问题,计算维度灾难。根据KNN的描述,它有点像是用训练数据,把样本空间分成几块,这意味着如果我们希望分类器有好的效果,我们需要训练数据能够密集地分布在空间中,否则最近邻点的实际距离可能很远,也就是说和待测样本的相似性没有那么高。而问题在于想要密集地分布在空间中,我们需要指数倍的训练数据,我们不可能拿到那么多的图片去密布到整个空间中。

注意:维度灾难

假设样本点取n维,样本选取的标准是为了覆盖总体20%的范围特征。 
我们假设样本点每个维度都有10个可能的取值。 
1. 当n为1时 
则总体数量为10,只需要2个样本就能覆盖总体的20% 
2. 当n取2时 
有两个维度,这时总体的数量变为100(10*10),那么就需要20只了。 
3. 当取n时 
共有10n个数量,样本应取10n0.2个。 
注意,这与我们平时理解的总体不一样。 
因为总体的数量从一开始就是固定的,比如,全世界有1亿只苍蝇,如果只需要拿红眼和白眼来作为区分,那么可能取5只就够了,但如果增加属性的维度,比如在增加翅膀长度,个体大小,年龄,那么需要的果蝇数量将呈指数级增长。这是导致维度灾难的主要原因。 
从这个意义上说,不仅是knn,其他分类算法都会遇到维度灾难的问题。

 

 

 

[展开全文]

K-Nearest Neighbor在图像处理的几个问题

 

1 欧式距离不能处理Boxed Shifttd Tinted

2  Curse of dimensionality维度灾难

[展开全文]

改变坐标轴会改变L1

但是  不会L2

L1:在各个坐标有个实际意义时候表现更好

k是超参数 是学不到的

不能总是调整 超参数 使得训练结果最好

也不能使得验证结果最好

也就是你不不能瞎几把调

 

 

还有一种方法:交叉验证(小数据集中使用)

把训练集分成4组,交叉验证

 

knn分类局限性:1、就是用数据将把样本空间分成几块

如果维度太高,那数据太少肯定不行,数据必

须密集

 

2、L1 L2距离并不能真实地反应两张图的差别

 

 

[展开全文]
  1.  L1方形距离坐标,L2圆形距离坐标
  2. 大部分训练集,验证集,测试集
  3. 小数据时:交叉验证,确定超参
  4. 训练集和验证集的区别
  5.  
[展开全文]

设置最佳的超参数:

(1)将数据分为训练集,验证集,测试集。

通过验证集选择最佳的超参数。

(2)交叉验证(小数据集)分为训练集,测试集。

将训练集数据分为若干组,选取其中一组作为验证组,其他组为训练组。不断更换验证组来进行验证。

注:不适合深度学习,训练非常消耗计算能力。

 

对于图片来说,运用平移渲染,使得图片产生变化,但是L2的距离并没有改变。从而导致算法并不能区分不同的图片。

 

KNN算法对于潜在的各种分布情况没有任何预设,唯一能正常工作的方法是在样本空间上有密集的训练样本。

 

 

 

[展开全文]

KNN

L1distance(Manhattan):depends on the choice of coordinates system, when changing the coordinate frame, that would actually change the L1 distance between the points.

L2distance(Euclidean): it's the same thing whatever the coordinate frame is.

For the input features, if the individual entries in the vector have some important meaning for the task, then L1 may fit.

But if it's just a generic vector in some place, then the L2 maybe more natural.

In KNN, there are two major choices that we should select: 

 the K value

the distance metric

hyperparameters:the choices about the algorithm that we set rather than learn:

How do you actually make these choices for your problem and for your data?

setting hyperparameters:

  • split data into train、val and test;train the algorithm with many different choices of hyperparameters on the training set. And evaluate on the validation set, the choose the set of hyperparameters  which performs best on val. Then take the best performing classifer on val and run it once on the test set.
  • cross-validation(useful to small dataset): Take some test set to use very end. Spliting the training data into many folds. Try each fold as validation and average the results.

 

 

 

 

[展开全文]

Hyperparameters:
train-validation-test

Cross-validaion:

 

[展开全文]

L1 distance 会随着坐标轴的变化而改变->是一个菱形

L2 distance 则不会->是圆形

[展开全文]

L1距离 曼哈顿距离

L2距离 欧氏距离

split data into training  and test

train validation test

cross-validation交叉训练、验证

 

问题:

测试慢

距离不适合图像处理

维度灾难

 

实际中不好用!

[展开全文]

相关课程

开课日期:直播已结束,可回看开始
智能驾驶 基础入门 87052
开课日期:开始
机器学习 基础入门 111844

授课教师

暂无教师
微信扫码分享课程