放牧代码和思想
专注自然语言处理、机器学习算法

Hinton神经网络公开课5 Object recognition with neural nets

目录

2017年03月21日23-23-43.png这节课蜻蜓点水地讲了图像识别和卷积神经网络,老爷子讲得实在很简略。所以这节课不能当作CNN的入门资料,如果感觉任何地方不清楚,不要沮丧,因为根本没讲。

图像识别的难处

为什么最新的技术只能做到十几二十几的error rate呢,因为图像识别本来就是个很艰难的任务。其难处有如下几点:

  • 难分割:很难决定那一块儿属于哪个物体,图像中物体和物体有重叠。

  • 光照

  • 变形:物体可能有多个变种,比如茴香豆茴的四种写法阿拉伯数字2的多种写法。

  • 分类的主观性:物体常常根据用途分类,同一个用途的物体常常有多种形态,比如各种椅子。

  • 视角:旋转、左右、正反等等

    视角的不同会引起特征的维度错乱,类比一下,如果一个医疗数据库中年龄和体重两个维度时而混淆在一起,这对模型是多大的挑战。

  • hankcs.com 2017-03-21 下午10.15.12.png

保持视角固定

人类是如此擅长推断不同视角下的物体,以至于难以理解这对机器来说有多难。如果能让模型视角固定下来就好了。

有多种方法,其中一种是先用框把物体框出来,标上方向:

2017年03月21日22-21-00.png

但这是个先有鸡还是先有蛋的问题,为了识别,要先检测方向;但为了检测方向,必须知道物体是什么才能正确标记方向。另外,人脑也没有在识别前去做方向变换。其他被证明无效或低效的方法还有很多,我对这些历史兴趣不大,跳过。

CNN识别手写数字

因为物体经常跑来跑去,在图片的不同位置出现。所以有必要在不同位置使用同一个特征detector,既然是同一个detector,那么只有一套参数:

2017年03月21日22-26-33.png

我们可以用多个类型的特征detecter,去捕捉不同位置的相同特征。

训练

为了保持权值相等(同一套参数),只需简单修改反向传播算法,就能让它满足weight的线性约束。做法是像往常一样计算梯度,然后在梯度上做一些约束。

具体做法是

2017年03月21日22-33-48.png

要保证w1和w2相等,只需保证每次更新的delta相等。那么可以用两者梯度之和作为它们共同的delta。只要两个unit的weight相等,那么它们就是同一个特征detector。通过限制weight相等,就强制了神经网络学习重复的特征。

重复特征detector保证了什么

变形稳定性吗?不是,图像变形,激活值也变化了:

2017年03月21日22-38-29.png

但它们反应在激活值上的变化是相同的,所以是激活稳定性,或说是一种“知识”的不变性。如果模型知道如何在一个位置识别一个特征,那么在任何位置,它都能识别该特征。这是weight上的不变性。

如果想达到激活值上的不变性,正确的做法是池化(pooling),简单说就是把相邻的多个detector的输出平均化。这样的好处是到下一层的输入就少了,省出很多计算力去学习更多特征。

pooling也有坏处,多层pool之后,模型就不知道这些特征的位置了。如果是粗略的分类的话,比如这是否是人脸,就算鼻子跑到眼睛上去也没问题。但如果要判断这是否是某个人的脸的话,则不行了,因为人与人相貌的区别很大程度上就是五官的距离。

Le Net

2017年03月21日22-54-40.png

很多层,很多卷积,很多池化(subsampling)……

Le Net的成绩是82个错误:

2017年03月21日22-57-04.png

人类的成绩是20到30。

人工

对CNN来讲,人工不是人工写特征detector,而是设计网络结构、权值约束、激活函数等。这要比手写detector自然很多,但仍然需要很多人工。

另一种方法是用人工知识去生成很多训练数据,但这会加重训练负担。现在计算力上升了,这种方法得到了越来越多的重视。

用上了这两种方法之后,2010年最新的进展是35个错误:

2017年03月21日23-05-00.png

左上角的正确数字,右下角是top2输出,红框是完全预测错误。通过组合多个模型的结果,可以做到25个错误,这基本达到人类水平了。

这项研究还引出了一个问题,那就是30错误的模型一定比40错误的模型好吗?

不是,还取决于它们分别犯了多少另一个模型不会犯的错。

2017年03月21日23-07-54.png

这被称为McNemar test,在这种评测方法中,忽略黑色的双方都对了或都错了的实例,只关注红色的一方对另一方错的数字。

在第一个案例中,模型2对模型1错的次数显著大于反之的次数,所以模型2比模型1显著地好。而第二个案例则不是。

CNN图像识别

从手写数字识别到立体物体

难度剧增:

  • 类别数更多

  • 像素和颜色数更多

  • 2d和3d

  • 需要分割图像

  • 同一个图像中有多个物体

但CNN依然胜任了该任务。

ImageNet

基于该数据及的ILSVRC-2012有两个任务:

分类:top5的分类对了就算对,一共1000个分类2017年03月21日23-16-10.png

定位:把物体框出来,与正确的框必须有50%的重叠

排名靠前的机构都用了CNN,最好的成绩是University of Toronto (Alex Krizhevsky)的16%和34%。他们用了很多trick,包括激活函数、normalization、生成更多训练数据、dropout等等。他们用了两块Nvidia GTX 580 ,GPU的好处是硬件加速矩阵运算、高带宽,然后就只花一个星期,在测试的时候也带了加速。

道路识别

另一个CNN的应用是在高分辨率的航拍图上识别道路,这个任务也很难,因为路上有车、光影、摄像机视角等等。

CNN也能做得不错:

2017年03月21日23-23-43.png

红色部分其实是个停车场。

这节课到此就戛然而止了,并没有提到具体的CNN训练,需要参考其他资料。

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » Hinton神经网络公开课5 Object recognition with neural nets

分享到:更多 ()

评论 欢迎留言

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

我的开源项目

HanLP自然语言处理包基于DoubleArrayTrie的Aho Corasick自动机