[Hinton]Machine Learning-Object Recognition

视频学习链接

参考博文

个人学习记录,有参考博文。初学阶段对知识的学习与理解必定会有谬误或误解,希望路过的前辈不吝赐教。

Lecture 4


       尽管物体的识别对我们人类来说是一件十分稀松平常的事。但要让机器学会识别是一件很难的事情,如果将一个物体变成一组像素数据进行识别,包括光线的强弱、物体的远近等等都是需要考虑的问题。但这也同样意味着单单凭靠手工编写的程序是无法做到这么宏大的识别的,只能够借助于机器学习来实现。
· 很难从图像中分割出一个单独的、没有其他影响因素的物体。人类可以根据运动轨迹、立体声等来实现物体的识别,但机器无从得知哪一块区域是一个独立完整的物体,且有时一个物体会被其他物体遮挡。
· 像素的强度在很大程度上依赖于物体上光照的变化,而这种变化与物体本身是无关的。
· 物体还可以有多种不同的形态。
· 物体的命名经常是以他的用途作为参考的,同一个名字可能会有许多的不同形状的物品,比如椅子。
· 从不同的角度来看会有不同的形状。


关于视点不变性,由于我们很擅长在不同的视角去观察一个物体,所以我们很难去总结该如何让机器同样学会。
使用固定不变的特征(不变特征方法)
      不变特征方法就是需要在大量冗余的特征集合中选择一些在经过平移、旋转、缩放等变换后不变的特征。这些被选择出来的不变特征,在组合起来之后应当只有一种物体与之对应。实际上我们并不需要直接表示这些特性之间的关系,因为这些关系是基于其他的特性来表达的。但是在认知物体的方面,我们必须避免在不同的物体上提取特征。
在物体周围放一个盒子,这样就可以将像素规格化(标准化方法,the judicious normalization approach)
     
      如上图所示,我们在字母“R”的周围放一个框吗,并在其顶部和右侧分别放置top和front箭头。这有效地解决了维度跳动,即视点变动的问题,如果我们能够正确的选择该方框,那么该物体相同的部分也会随之相应的正确出现。此时我们不但能够保证旋转和平移的不变性,同样满足缩放和拉伸。但是,不幸的是,我们很难去选择一个合适的盒子,这是因为可能会有分割错误、重叠遮挡、不寻常的方向等。此外,要选择一个这样的盒子,还需要我们实现就能够让机器去认知物体的特性,才能够分辨出正确的方向箭头。这是一个经典的哲学问题,到底是先有鸡还是先有蛋。
       有心理学家认为,我们是通过心里旋转来认知物品的,但Hinton并不同意。他认为我们能够在我们将物体进行旋转之前就很好的认知某物体,而不是先进行旋转。而在遇到物体的镜像时才应当是先进行旋转再认知的。
       强制标准化方法(the brute force normalization approach):
           · 当我们在训练认知器时,我们使用分割较好的、正向直立的图像去选择以一个正确合适的盒子
           · 在测试时,我们在这个位置范围内尝试所有符合条件的盒子
       这项技术被广泛应用于例如人脸识别等直立的图像检测,并且在处理一些位置变化时更有效率的进行识别,所以我们可以使用一些粗糙的网络进行更多盒子的测试。
使用复制的特性并将其池化,这被称作“卷积神经网络”
     首先在不同的位置上使用大量相同的特征检测器的不同拷贝副本。如下图所示,在一个样本上有三个在不同位置上的特征检测器,这三个特征检测器的权值是相同的;在学习时,我们保证三个相同颜色箭头的权重是相等的。我们同样可以考虑跨尺度和方向进行复制,但这样会大大增加成本,且会减少学习的自由参量数目。

     我们同样可以使用不同的特征类型,每一个类型都对应的复制的探测器。这就能够使得图像的每个部分都可以用许多不同类型的特征来表示。
这种方法很适合用反向传播算法进行学习,我们可以很容易修改反向传播算法纳入任何类型的权值之间线性约束。然后计算梯度,并根据梯度来修改直到满足约束。

如果开始时w_1=w_2,那么我们就要保证\Delta w_1=\Delta w_2。我们通过计算\frac{\partial E}{\partial w_1}\frac{\partial E}{\partial w_2},使用这两个导数的和或是平均数的权重约束,通过强迫反向传播来学习。
那么,这种基于复制的特征检测做到了哪些突破呢?有人称它实现了平移不变性,但Hinton并不认同这一说法。当我们观察一项活动,我们会发现神经元的活动并没有在平移上不变,而是平移等变。我们可以通过以下例子看出:

上层的黑点代表已激活的神经元,当图像改变时,被激活的神经元也改变了。如果在学习过程中在某些位置的特征是有意义的,那么这个特征的检测器将会在测试过程中所有的位置都有用,这就是训练获得的知识。所以,我们在某个位置学习了一个特征,在其他位置就可以直接进行识别。

如果你想在活动中实现不变性,我们就需要池化在复制特征检测层中的输出,通过平均后可以在更深的层中获得些许的不变性。这样做的好处是减少了下一层的输入数量,以便于我们使用更多不同的特征类型,允许我们在下一层中学习更多不同的特征。事实上采用四个邻居特征检测器的最大值比均值效果要好。但通过不断的池化,我们可能会丢失关于物体位置的精确信息。但如果只是想要识别人脸,我们只需要知道有两只眼睛一个鼻子一张嘴巴就足够了。但如果你想知道是谁的脸,那就需要有眉间距,鼻宽等一系列的数据,但这些数据早已在池化的过程中被舍弃了。

其中一个令人印象深刻的神经网络就是由Yann LeCun和他的同事所建立的Le Net,这是一款针对识别手写体的十分好的认知网络,通过前馈网络的反向传播实现。
      · 该网络有许多的隐藏层
      · 每层都有许多的复制单元
      · 邻近的复制单元输出的池化
      · 这张十分宽的网络可以同时处理许多的即使是重叠着的字符,而不需要进行字符预分割。
      · 采用了更智能的方法去训练整个系统,而不仅仅是一个识别器。可以在一端输入像素,在另一端得到整个zip编码。在训练系统的过程中采用了一种被称为最大边缘(maximum margin)的方法,但是在这个网络出来的时候这个最大边缘的方法还没有被发明。
      LeNet5的结构如下图所示。输入是许多的像素,然后是一系列的特征序列图以及子采样。我们可以看到C1采样中共有六种不同的特征采样,每个特征对应的采样的大小为28x28,这些还包含着一些小的特征是5x5像素的,且他们的权重都是在一起的。所以每张图只有9个自由参数可供学习,这样可以使得学习更加的高效,也意味着只需要更少的数据。在C1之后就是子采样,我们现在称之为池化。通过对C1中的一群邻居重复特征的输出进行池化,可以得到一个更小的图作为下一层的输入,而下一层就是发掘更复杂特征的一层。随着网络的前进,得到的特征更加的复杂,但是也有更多的位置不变性。(可参考博文

如何在网络中引入先验知识呢?我们可以通过本地连接、重量限制、特定的神经元活动方法将关于任务的先验知识放入网络。此外,我们还有一些相较于手动设计更加有扰动性的方法,他会使得我们的网络在解决问题时有偏向性。当然,我们同样可以使用我们的先验知识去创造一些相应的大量数据来训练,但这种训练同样会消耗掉我们大量的时间。所以使用本地连接等方式显然是更为高效的。
在模拟训练数据上,我们还可以采用暴力求解的方法。LeNet使用了知识的不变性来设计如连接、权值共享、池化。另外,它还使用了许多方法如输入的许多不同的变化来降低错误。对于每一个图像来说,他们都会通过一些不同的变化来生产许多的新的训练样本。然后在GPU上训练一个网络,且这些训练样本不可以太过贴合。最终我们得到35个错误如下图所示。

每个方框上侧的数字代表正确答案,下侧的两个数字分别代表机器给出的可能性最大的两个答案。可以发现,机器给出的答案通常都会在概率最高的两个答案中得出。
    在1w个测试样例中,30个错误一定比40个错误的网络要更好吗?答案是否定的,真正决定好坏的原因在于错误是如何产生的。McNemar测试(基于特定错误的检测)可以比单纯的按照错误数目的检测更加的有说服力。

从手写体识别到3D物体的识别
很明显,识别一个真实的彩色图像中所显示的物品的复杂度要远远大于识别一个手写的字符,其原因在于一个真实物品的图像往往是非常大的、物品种类繁多、灯光变化、三维物体的二维化图像以及在真实场景中的物品的重叠需要进行分割等。在这个如此庞大的问题面前,我们想要很好的去完成这一任务,就需要给出先验知识,否则完成一个理想的识别他的训练样本将会非常之大以至于我们的计算机还无法实现。
一个针对ImageNet的神经网络
由Alex Krizhevsky传里的深度卷积神经网络(Deep Convolutional Neural Net),他继承了Yann的LeNet的思想,其成就在于:
     · 除出最大池化层外有七层隐藏层
     · 前面的层是卷积的。如果我们有更大的计算机,就可以只使用局部接受域,而且不需要绑定任何权重,即不权重共享。但是在对他们做卷积的时候,必须剔除一些参数,所以需要在考虑计算机计算时间的情况下减少训练数据。
     · 最后两层是全局连接的,这是大部分参数所在的位置。其作用就是寻找早期的层提取的局部特征组合,显然这将会有许多的组合待发现,这也是为什么他需要如此多参数的原因(大约1600w)。
     激活功能函数:修正么每个隐藏层的线性神经元,这样训练的速度更快以及比起逻辑单元更加富有表现力。我们还使用了归一化以便于当临近单元有更加强壮的活动时来抑制隐藏活动。这对强度的变化很有帮助。当我们使用一个边缘检测时,由于一些相对微弱的边缘会使得在边缘部分异常活跃,但当周围有更加强烈的活动时这些就无关紧要了。

一些能够显著提升泛用度的技巧
首先在256x256的图像上随机取224x224的不完整碎片以获取尽可能多的图像来训练,并且通过左右镜像增加了一倍的训练样例。当测试时,在原图像中选取224x224大小的四个角加上中间的224x224的碎片再加上这五个的翻转图像共十个不同的图像进行训练。在顶层(即全局链接层)中,使用新的正则化技术“dropout”,可以有效地防止过拟合现象。其中,dropout的基本思想是每当呈现一个训练示例时,会随机地忽略该层中的一半隐藏单元,剩余的一半不能单独的去进行修复错误。所以每个神经元将变得更加的独立,从而达到防止隐藏单元之间过多的合作和依赖。

使用能够直观的展示物体姿态的物体部分的层次结构(大概是选择最能代表一件物体的部分?)


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值