2016年10月18日, 世界人工智能大会技术分论坛,特设“新智元智库院长圆桌会议”,重量级研究院院长 7 剑下天山,汇集了中国人工智能产学研三界最豪华院长阵容:美团技术学院院长刘江担任主持人,微软亚洲研究院常务副院长芮勇、360人工智能研究院院长颜水成、北京理工大学计算机学院副院长黄华、联想集团副总裁黄莹、Intel 中国研究院院长宋继强、新华网融媒体未来研究院院长杨溟联袂出席。
【新智元导读】这两天在斯坦福有场深度学习盛宴,Yoshua Bengio、吴恩达等人从不同角度讲解深度学习的前沿技术和挑战。本文是共 12 场演讲中的两场。一是 OpenAI 研究员 Andrej Karpathy 讲计算机视觉里的深度学习;亮点在答疑部分,Karpathy 就如何选择算法、如何调参等实际应用问题给出了靠谱的回答。本文后附 Twitter 人工智能负责人 Hugo Larochelle 介绍前馈神经网络的PPT。后续演讲会持续更新~
卷积神经网络应用中的实际问题
1. 用什么硬件?
2. 用什么框架?
问:我怎么知道该用哪种框架?
答:不要想着自己从头干起。
问:我怎么知道该用什么超参数?
答:不要想着自己从头干起。
卷积神经网络应用:分布式训练
使用 4 台 GPU(每台价格约 1000 美元)训练
VGG 不到 2 周到 3 周的时间,ResNet 101 使用 2 到 3 周
卷积神经网络应用:预加载线程
在构建卷积神经网络结构时,最大的瓶颈是内存瓶颈。大部分现代GPU的内存是3/4/6GB,最好的GPU大约有12GB的内存。
卷积神经网络介绍
目前对输入向量假设很少,但在实际生活中,输入是有“结构”的,可以是光谱图,可以是照片,也可以是文字
卷积神经网络历史简要回顾:标志性事件
Hubel 和 Wiesel
1959 年提出猫的初级视皮层中单个神经元的感受野 1962 年提出猫的视觉中枢里有感受野、双目视觉和其他功能结构
Fukushima 在上世纪 80 年代提出了神经认知
LeCun 等人在 1998 年将基于梯度的学习算法应用与文件识别
ImageNet 创立,ImageNet 挑战赛开始举办
英伟达的 GPU 出现
Krizhevsky 等人在 2012 年获得 ImageNet 竞赛第一名,远远超过其他对手的算法。
神经网络在层数上的提升:微软 ResNet 152 层
根据接触的事物多少或者说经历有多贫乏,人类图像分类准确率为 2~5%
如今卷积神经网络得到各种应用,比如谷歌照片搜索和无人车
其中,具有代表性的技术突破包括:
Kaggle 竞赛识别鲸鱼
Mnih 和 Hinton 2010 年做的卫星图像分析
Dielman 等人 2015 年 Galaxy 挑战赛
谷歌大脑 Vinyals 等人 2015 年自动生成图说
谷歌 DeepMind van den Oord 等人 2016 年提出的 WaveNet
卷积神经网络在教计算机玩游戏的过程中发挥了重要作用,从经典的 ATARI 游戏、围棋,到星际争霸
卷积神经网络模仿人类视觉中枢神经元的活动卷。积层中,神经元与输入层中的一个局部区域相连,每个神经元都计算自己与输入层相连的小区域与自己权重的内积。
卷积神经网络详解
整个过程只涉及两个基本运算
但是,基本运算的参数却多达上 10M
卷积神经网络的激活输出例子。左边的输入层存有原始图像像素,右边的输出层存有类别分类评分。在处理流程中,每个激活数据体铺成一列展示,因为对三维数据作图比较困难,我们就把每个数据体切成层,然后铺成一列显示。最后一层装的是针对不同类别的分类得分,这里只显示了得分最高的5个评分值和对应的类别。
一个 32x32x3 的图像,用一个 5x5x3 的滤波器做卷积处理(宽高都是 5 像素,深度在这里即为颜色通道,所以是 3)。卷积也可以理解为“滑动”。
滤波器的宽永远是与图像一样的,因为都是颜色通道
卷积层中,在前向传播的时候,让每个滤波器都在输入数据的宽度和高度上滑动(也就是做卷积),然后计算整个滤波器和输入数据任一处的内积
当滤波器沿着输入数据的宽度和高度滑过后,会生成一个二维的激活映射,激活映射给出了在每个空间位置处滤波器的反应。直观说,网络会让滤波器学习在它看到某些类型的视觉特征时就激活,可以是某些方位上的边界,或者在第一层上某些颜色的斑点,甚至可以是网络更高层上的蜂巢状或者车轮状图案。
假设还有 6 个 5x5 滤波器,就会得到 6 个不同的激活映射,将这些叠在一起,就得到了一个 28x28x6 的“新图像”
我们将 [32x32x3] 的图像转存为 [28x28x6],如果不这样做,而是改为使用一个全连接的层,需要多少参数呢?
参数为 (32*32*2)*(28*28*6) = 1.45 M
而我们将 [32x32x3] 的图像转存为 [28x28x6] 的图像,这时候需要多少个参数呢?
(5*5*3)*6 = 450 参数
在每个卷积层上,我们会有一整个集合的滤波器(比如 32 个),每个都会生成一个不同的二维激活映射。将这些激活映射在深度方向上层叠起来就生成了输出数据。
一个简单的卷积神经网络是由各种层按照顺序排列组成,网络中的每个层使用一个可以微分的函数将激活数据从一个层传递到另一个层。
卷积神经网络主要由三种类型的层构成:卷积层,池化层和全连接层。通过将这些层叠加起来,就可以构建一个完整的卷积神经网络。
池化层
在连续的卷积层之间一般会周期性地插入一个池化层,用于逐渐降低数据的空间尺寸,从而减少参数的数量,使得计算资源耗费变少,也能有效控制过拟合。
池化层使用MAX操作,对输入数据体的每一个深度切片独立进行操作,改变它的空间尺寸。最常见的形式是汇聚层使用尺寸 2x2 的滤波器,以步长为 2 来对每个深度切片进行降采样,将其中 75% 的激活信息都丢掉。
每个MAX操作是从 4 个数字中取最大值(也就是在深度切片中某个 2x2 的区域)。深度保持不变。
全连接层
全连接层中,神经元对于前一层中的所有激活数据都全部连接,与常规神经网络一样。全连接层和卷积层神经元都是计算点积,所以它们的函数形式是一样的。不同的是,卷积层中的神经元只与输入数据中的一个局部区域连接,并且在卷积列中的神经元共享参数。
卷积神经网络:代表模型
AlexNet
AlexNet 由 Alex Krizhevsky,Ilya Sutskever 和 Geoff Hinton 实现。AlexNet 在2012 年的 ImageNet ILSVRC 竞赛中夺冠,性能远远超出第二名(16% 的 top5 错误率,第二名是 26% 的 top5 错误率)。这个网络的结构和LeNet非常类似,但是更深更大,并且使用了层叠的卷积层来获取特征(之前通常是只用一个卷积层并且在其后马上跟着一个池化层)。
输入为 227x227x3 的图像
第一层(卷积层):96 个 11x11 的滤波器以步长 4 滑动
输出图像为 [55x55x96]
这一层的参数总共有多少?
参数为 (11*11*3)*96 = 35K
第二层(池化层):3x3 的滤波器以步长 2 滑动
这一层的输出为多少? 27x27x96
那么这一层的参数为多少呢?
0!
ZFNet
ZFNet 是 ILSVRC 2013 的冠军,错误率 11.2%。作者 Matthew Zeiler、Rob Fergus 通过修改结构中的超参数对 AlexNet 进行改良,具体说来就是增加了中间卷积层的尺寸,让第一层的步长和滤波器尺寸更小。
ZFNet 模型更像是 AlexNe t架构的微调优化版,但还是提出了有关优化性能的一些关键想法。
VGGNet
ILSVRC 2014的第二名,由 Karen Simonyan 和 Andrew Zisserman 提出。VGGNet 主要的贡献是展示出网络的深度是算法优良性能的关键部分。网络的结构非常一致,从头到尾全部使用的是 3x3 的卷积和 2x2 的池化。
VGGNet 不好的一点是耗费更多计算资源,并且使用了更多的参数,导致更多的内存占用(140M)。其中,绝大多数的参数都是来自于第一个全连接层。后来发现这些全连接层即使被去除,对于性能也没有什么影响,这样就显著降低了参数数量。
GoogLeNet
2014年的 ILSVRC2014 上凭借 6.7% 的错误率进入 Top 5。
模型重点考虑了内存和能量消耗。使用一个奠基模块,显著地减少网络中参数的数量(AlexNet 有 60M,该网络中只有 4M)。论文中没有使用卷积神经网络顶部使用全连接层,而是使用了一个平均池化,把大量不是很重要的参数都去除掉了。GoogLeNet 最新版是 Inception V4。
ResNet
ResNet 是ILSVRC2015的冠军,使用了特殊的跳跃链接,大量使用了批量归一化(batch normalization)。这个结构同样在最后没有使用全连接层。更多可以查看何恺明的的演讲,他在后来又对 ResNet 做了优化(PPT)。ResNet 是当前最好的卷积神经网络模型。
ResNet 的一些变体
拓展阅读及资源
ConvNetJS CIFAR-10 demo 可以让你在服务器上实时地调试卷积神经网络的结构,观察计算结果。
最后还有在线课程 CS231n
Twitter 人工智能负责人 Hugo Larochelle 介绍前馈神经网络的PPT 也在里面哦~