这节课蜻蜓点水地讲了图像识别和卷积神经网络,老爷子讲得实在很简略。所以这节课不能当作CNN的入门资料,如果感觉任何地方不清楚,不要沮丧,因为根本没讲。
图像识别的难处
为什么最新的技术只能做到十几二十几的error rate呢,因为图像识别本来就是个很艰难的任务。其难处有如下几点:
-
难分割:很难决定那一块儿属于哪个物体,图像中物体和物体有重叠。
-
光照
-
变形:物体可能有多个变种,比如茴香豆茴的四种写法阿拉伯数字2的多种写法。
-
分类的主观性:物体常常根据用途分类,同一个用途的物体常常有多种形态,比如各种椅子。
-
视角:旋转、左右、正反等等
视角的不同会引起特征的维度错乱,类比一下,如果一个医疗数据库中年龄和体重两个维度时而混淆在一起,这对模型是多大的挑战。
保持视角固定
人类是如此擅长推断不同视角下的物体,以至于难以理解这对机器来说有多难。如果能让模型视角固定下来就好了。
有多种方法,其中一种是先用框把物体框出来,标上方向:
但这是个先有鸡还是先有蛋的问题,为了识别,要先检测方向;但为了检测方向,必须知道物体是什么才能正确标记方向。另外,人脑也没有在识别前去做方向变换。其他被证明无效或低效的方法还有很多,我对这些历史兴趣不大,跳过。
CNN识别手写数字
因为物体经常跑来跑去,在图片的不同位置出现。所以有必要在不同位置使用同一个特征detector,既然是同一个detector,那么只有一套参数:
我们可以用多个类型的特征detecter,去捕捉不同位置的相同特征。
训练
为了保持权值相等(同一套参数),只需简单修改反向传播算法,就能让它满足weight的线性约束。做法是像往常一样计算梯度,然后在梯度上做一些约束。
具体做法是
要保证w1和w2相等,只需保证每次更新的delta相等。那么可以用两者梯度之和作为它们共同的delta。只要两个unit的weight相等,那么它们就是同一个特征detector。通过限制weight相等,就强制了神经网络学习重复的特征。
重复特征detector保证了什么
变形稳定性吗?不是,图像变形,激活值也变化了:
但它们反应在激活值上的变化是相同的,所以是激活稳定性,或说是一种“知识”的不变性。如果模型知道如何在一个位置识别一个特征,那么在任何位置,它都能识别该特征。这是weight上的不变性。
如果想达到激活值上的不变性,正确的做法是池化(pooling),简单说就是把相邻的多个detector的输出平均化。这样的好处是到下一层的输入就少了,省出很多计算力去学习更多特征。
pooling也有坏处,多层pool之后,模型就不知道这些特征的位置了。如果是粗略的分类的话,比如这是否是人脸,就算鼻子跑到眼睛上去也没问题。但如果要判断这是否是某个人的脸的话,则不行了,因为人与人相貌的区别很大程度上就是五官的距离。
Le Net
很多层,很多卷积,很多池化(subsampling)……
Le Net的成绩是82个错误:
人类的成绩是20到30。
人工
对CNN来讲,人工不是人工写特征detector,而是设计网络结构、权值约束、激活函数等。这要比手写detector自然很多,但仍然需要很多人工。
另一种方法是用人工知识去生成很多训练数据,但这会加重训练负担。现在计算力上升了,这种方法得到了越来越多的重视。
用上了这两种方法之后,2010年最新的进展是35个错误:
左上角的正确数字,右下角是top2输出,红框是完全预测错误。通过组合多个模型的结果,可以做到25个错误,这基本达到人类水平了。
这项研究还引出了一个问题,那就是30错误的模型一定比40错误的模型好吗?
不是,还取决于它们分别犯了多少另一个模型不会犯的错。
这被称为McNemar test,在这种评测方法中,忽略黑色的双方都对了或都错了的实例,只关注红色的一方对另一方错的数字。
在第一个案例中,模型2对模型1错的次数显著大于反之的次数,所以模型2比模型1显著地好。而第二个案例则不是。
CNN图像识别
从手写数字识别到立体物体
难度剧增:
-
类别数更多
-
像素和颜色数更多
-
2d和3d
-
需要分割图像
-
同一个图像中有多个物体
但CNN依然胜任了该任务。
ImageNet
基于该数据及的ILSVRC-2012有两个任务:
分类:top5的分类对了就算对,一共1000个分类
定位:把物体框出来,与正确的框必须有50%的重叠
排名靠前的机构都用了CNN,最好的成绩是University of Toronto (Alex Krizhevsky)的16%和34%。他们用了很多trick,包括激活函数、normalization、生成更多训练数据、dropout等等。他们用了两块Nvidia GTX 580 ,GPU的好处是硬件加速矩阵运算、高带宽,然后就只花一个星期,在测试的时候也带了加速。
道路识别
另一个CNN的应用是在高分辨率的航拍图上识别道路,这个任务也很难,因为路上有车、光影、摄像机视角等等。
CNN也能做得不错:
红色部分其实是个停车场。
这节课到此就戛然而止了,并没有提到具体的CNN训练,需要参考其他资料。
知识共享署名-非商业性使用-相同方式共享:码农场 » Hinton神经网络公开课5 Object recognition with neural nets