编者按:本文作者 Andrej KarPathy,由阅面科技翻译整理。
卷积神经网络是非常强大的,它能在你的个人照片里识别出物体,地点和人物,又能在自动驾驶汽车里能识别出路标,行人和交通灯,还能在航空影像中识别出庄稼,森林和道路,在医疗图像中识别出多种异常,诸如此类,不胜枚举。在这些严肃的问题之外,这种高大上的视觉识别模型也可以用在消遣和娱乐上,博众一笑。
在接下来我要给大家介绍的这个趣味实验中,我们要做这样一件事:我们从网络中收集了2百万张自拍图,并将它们作为一个具有1亿4千万个参数,当今世界最先进的卷积神经网络模型的输入,来训练一个分类器用以识别好的自拍和差的自拍。这么做的原因仅仅是因为这很简单,而且我们也能轻松实现。读完本文,你将会学到如何自拍的法门。
卷积神经网络
在我们深入介绍这个实验之前,我们先来简单介绍一下卷积神经网络是什么,这样能让更多的受好奇心驱使阅读本文的读者不至于始终处于云山雾罩的状态。用通俗一点的话来说,卷积神经网络是一把大锤,而计算机视觉问题不过是一些钉子。假如你在2015年听说过或者阅读过一些关于计算机如何识别图像或者视频中的物体的文章,大部分文章都会提到卷积神经网络。下面就是一些例子:
卷积神经网络众多成功案例中的一部分。从上到下,从左到右依次是:街景图片中识别门牌号,医疗图像中识别坏东西,中文识别,路牌识别以及人脸识别。
卷积神经网络恰好有着一段有趣的背景故事。卷积神经网络最早是由Yann Lecun等人于上世纪80年代发展出来的技术(当然,还是基于前人,像是Fukushima的工作)。当时的卷积神经网络被叫做LeNet 1,其中一个有趣的应用是在1993年用来识别数字。可惜的是,这类模型并不被当时的计算机视觉界接受,因为大家普遍认为这些模型没办法处理“真实世界”中的海量图片。
这种观念一直到2012年才被扭转过来,那一年开始我们总算有了足够的计算能力(特指GPU计算)以及足够的数据(ImageNet),使得我们能够真正地将这类模型应用到大规模的图像上。首先取得突破的是Alex Krizhevsky,Ilya Sutskever和Geoff Hinton的工作,他们在2012年的ImageNet挑战赛(把它当成计算机视觉界的世界杯即可)上取得了压倒性的胜利(16.4%的错误率,远低于第二名的26.2%的错误率)。
由于过去几年的ImageNet挑战赛是由Fei-Fei Li的实验室组织的,恰好我就在她实验室工作,因此我得以亲眼见证了这一历史的转折点。我还记得当Hinton组的结果提交上来后,实验室的一个妹子那一脸什么鬼的表情(因为实在太强了)。后来,我们大家都注意到了这个结果,纷纷站了起来,从实验室的一头走到另一头,试图去弄清楚刚才发生的一切。
在接下来的几个月中,卷积神经网络从一个备受质疑的晦涩模型一跃成为了计算机视觉界的香饽饽,几乎所有新发表的计算机视觉论文都讲其作为核心模型。ImageNet挑战赛也反映出了这个趋势——2012年的时候,只有Hinton一家用卷积神经网络模型参赛,在那之后的2013年和2014年挑战赛中,几乎所有的参赛者都采用了卷积神经网络模型。另一个有趣的现象是,每一年的冠军小组都立刻被某一公司吸纳。
这几年里,比起2012年的AlexNet(这些模型名称),我们见到了更加完美,简洁并且处理更大规模的模型。2013年是ZFNet,2014年是GoogLeNet(这是Google版的LeNet,)和VGGNet。总之,现在我们知道卷积神经网络有如下优点:
简单:同一个操作在原始图像上会被一遍一遍的重复数十次。
快速:在几十毫秒内处理一个图像。
有效:他们的工作原理在某些方面和我们组的视觉皮层工作很类似。
深入内部
那么,卷积神经网络模型到底是怎么做的呢?如果你看一下模型的细节,