5 X0 R B2 s5 r2 R% Y因此,与训练端到端(从像素到分类结果)系统不同,经典机器学习的流水线看起来更像下面这样: 9 G# T* I' U8 C8 v4 I6 K: l " W1 l' f' [& \& N. R h获取一个有趣的数据集。在早期,收集这些数据集需要昂贵的传感器(在当时最先进的图像也就100万像素)。$ x/ q& p; v2 n
t4 J7 A" ]3 ^+ l, e* q H根据光学、几何学、其他知识以及偶然的发现,手工对特征数据集进行预处理。5 a0 H' ^4 @. `' \ b) I
8 d! a: {9 J, A3 [6 E. L4 V: z
通过标准的特征提取算法,如SIFT(尺度不变特征变换) [Lowe, 2004]和SURF(加速鲁棒特征) [Bay et al., 2006]或其他手动调整的流水线来输入数据。- {: B! Z) s( D
! V0 f/ r( \2 \
将提取的特征送入最喜欢的分类器中(例如线性模型或其它核方法),以训练分类器。' M4 h1 b4 c Y" ^( |: T T- G
, a2 n o5 c" R% u9 y
如果你和机器学习研究人员交谈,你会发现他们相信机器学习既重要又美丽:优雅的理论去证明各种模型的性质。机器学习是一个正在蓬勃发展、严谨且非常有用的领域。然而,如果你和计算机视觉研究人员交谈,你会听到一个完全不同的故事。他们会告诉你图像识别的诡异事实————推动领域进步的是数据特征,而不是学习算法。计算机视觉研究人员相信,从对最终模型精度的影响来说,更大或更干净的数据集、或是稍微改进的特征提取,比任何学习算法带来的进步要大得多。" a8 ? L: |( n, l
7 Y( b. V% W1 d- X2 e
1.1. 学习表征1 t- l* A8 B, _, _) v3 S, }& O: M
另一种预测这个领域发展的方法————观察图像特征的提取方法。在2012年前,图像特征都是机械地计算出来的。事实上,设计一套新的特征函数、改进结果,并撰写论文是盛极一时的潮流。SIFT [Lowe, 2004]、SURF [Bay et al., 2006]、HOG(定向梯度直方图) [Dalal & Triggs, 2005]、bags of visual words和类似的特征提取方法占据了主导地位。& E8 P! s/ _" s+ x4 A+ r/ k: r
1 j$ A) {, v& N
另一组研究人员,包括Yann LeCun、Geoff Hinton、Yoshua Bengio、Andrew Ng、Shun ichi Amari和Juergen Schmidhuber,想法则与众不同:他们认为特征本身应该被学习。此外,他们还认为,在合理地复杂性前提下,特征应该由多个共同学习的神经网络层组成,每个层都有可学习的参数。在机器视觉中,最底层可能检测边缘、颜色和纹理。事实上,Alex Krizhevsky、Ilya Sutskever和Geoff Hinton提出了一种新的卷积神经网络变体AlexNet。在2012年ImageNet挑战赛中取得了轰动一时的成绩。AlexNet以Alex Krizhevsky的名字命名,他是论文 [Krizhevsky et al., 2012]的第一作者。# S' b1 z4 J1 ` K0 r
1 @3 @7 ^( }1 k- P
有趣的是,在网络的最底层,模型学习到了一些类似于传统滤波器的特征抽取器。 图7.1.1是从AlexNet论文 [Krizhevsky et al., 2012]复制的,描述了底层图像特征。! y1 M3 o) ?0 n
) T7 H* k' B! J6 r- S% W& S
/ p) \" E# w4 I1 H3 Z
& r9 }% b1 C: L( F 1.1 AlexNet第一层学习到的特征抽取器。: ^0 T) X a H4 ^% R
/ I3 J( Q0 I5 }* ^" x
AlexNet的更高层建立在这些底层表示的基础上,以表示更大的特征,如眼睛、鼻子、草叶等等。而更高的层可以检测整个物体,如人、飞机、狗或飞盘。最终的隐藏神经元可以学习图像的综合表示,从而使属于不同类别的数据易于区分。尽管一直有一群执着的研究者不断钻研,试图学习视觉数据的逐级表征,然而很长一段时间里这些尝试都未有突破。深度卷积神经网络的突破出现在2012年。突破可归因于两个关键因素。 9 e4 Y+ z2 m2 |! x" d; A+ m( t7 w9 T0 \. H, C. v
1.1.1. 缺少的成分:数据 1 {) I9 k7 Z6 E包含许多特征的深度模型需要大量的有标签数据,才能显著优于基于凸优化的传统方法(如线性方法和核方法)。 然而,限于早期计算机有限的存储和90年代有限的研究预算,大部分研究只基于小的公开数据集。例如,不少研究论文基于加州大学欧文分校(UCI)提供的若干个公开数据集,其中许多数据集只有几百至几千张在非自然环境下以低分辨率拍摄的图像。这一状况在2010年前后兴起的大数据浪潮中得到改善。2009年,ImageNet数据集发布,并发起ImageNet挑战赛:要求研究人员从100万个样本中训练模型,以区分1000个不同类别的对象。ImageNet数据集由斯坦福教授李飞飞小组的研究人员开发,利用谷歌图像搜索(Google Image Search)对每一类图像进行预筛选,并利用亚马逊众包(Amazon Mechanical Turk)来标注每张图片的相关类别。这种规模是前所未有的。这项被称为ImageNet的挑战赛推动了计算机视觉和机器学习研究的发展,挑战研究人员确定哪些模型能够在更大的数据规模下表现最好。 . E$ c3 G9 O2 X1 G d' [) Q 1 ~! Y. b# s+ F U. u1.1.2. 缺少的成分:硬件2 y% j2 u% N0 D' a# E
深度学习对计算资源要求很高,训练可能需要数百个迭代轮数,每次迭代都需要通过代价高昂的许多线性代数层传递数据。这也是为什么在20世纪90年代至21世纪初,优化凸目标的简单算法是研究人员的首选。然而,用GPU训练神经网络改变了这一格局。图形处理器(Graphics Processing Unit,GPU)早年用来加速图形处理,使电脑游戏玩家受益。GPU可优化高吞吐量的4×4矩阵和向量乘法,从而服务于基本的图形任务。幸运的是,这些数学运算与卷积层的计算惊人地相似。由此,英伟达(NVIDIA)和ATI已经开始为通用计算操作优化gpu,甚至把它们作为通用GPU(general-purpose GPUs,GPGPU)来销售。0 \4 U( i B# {! I Y: e0 d
& T) j5 F, A6 h
那么GPU比CPU强在哪里呢? ) ]) f8 n& t. S: O9 S$ r$ O1 \ u" y5 ~0 Z! ]2 ^6 Z7 _
首先,我们深度理解一下中央处理器(Central Processing Unit,CPU)的核心。 CPU的每个核心都拥有高时钟频率的运行能力,和高达数MB的三级缓存(L3Cache)。 它们非常适合执行各种指令,具有分支预测器、深层流水线和其他使CPU能够运行各种程序的功能。 然而,这种明显的优势也是它的致命弱点:通用核心的制造成本非常高。 它们需要大量的芯片面积、复杂的支持结构(内存接口、内核之间的缓存逻辑、高速互连等等),而且它们在任何单个任务上的性能都相对较差。 现代笔记本电脑最多有4核,即使是高端服务器也很少超过64核,因为它们的性价比不高。 # O6 ]& K( f: k$ B: E, E + s) z* x! w3 e! k8 V相比于CPU,GPU由100~1000个小的处理单元组成(NVIDIA、ATI、ARM和其他芯片供应商之间的细节稍有不同),通常被分成更大的组(NVIDIA称之为warps)。 虽然每个GPU核心都相对较弱,有时甚至以低于1GHz的时钟频率运行,但庞大的核心数量使GPU比CPU快几个数量级。 例如,NVIDIA最近一代的Ampere GPU架构为每个芯片提供了高达312 TFlops的浮点性能,而CPU的浮点性能到目前为止还没有超过1 TFlops。 之所以有如此大的差距,原因其实很简单:首先,功耗往往会随时钟频率呈二次方增长。 对于一个CPU核心,假设它的运行速度比GPU快4倍,你可以使用16个GPU内核取代,那么GPU的综合性能就是CPU的16×1/4=4倍。 其次,GPU内核要简单得多,这使得它们更节能。 此外,深度学习中的许多操作需要相对较高的内存带宽,而GPU拥有10倍于CPU的带宽。 # y) Q. y9 O/ s' b3 v9 c5 j/ k8 C% n, T
回到2012年的重大突破,当Alex Krizhevsky和Ilya Sutskever实现了可以在GPU硬件上运行的深度卷积神经网络时,一个重大突破出现了。他们意识到卷积神经网络中的计算瓶颈:卷积和矩阵乘法,都是可以在硬件上并行化的操作。 于是,他们使用两个显存为3GB的NVIDIA GTX580 GPU实现了快速卷积运算。他们的创新cuda-convnet几年来它一直是行业标准,并推动了深度学习热潮。 & r& o0 }& X1 m) B: D5 R$ Y, g 7 q5 c4 U1 |$ R4 l1.2. AlexNet% t- A, @8 K: `: z& v. f5 l
2012年,AlexNet横空出世。它首次证明了学习到的特征可以超越手工设计的特征。它一举打破了计算机视觉研究的现状。 AlexNet使用了8层卷积神经网络,并以很大的优势赢得了2012年ImageNet图像识别挑战赛。- t" U8 R3 o) s+ @; o6 a4 D
0 q3 Z9 ~) U$ H" V$ R) J( rAlexNet和LeNet的架构非常相似,如 图所示。 注意,这里我们提供了一个稍微精简版本的AlexNet,去除了当年需要两个小型GPU同时运算的设计特点。) b" u v7 k2 r: B! E2 M
7 S. p2 G( r3 [" V! S j2 Q+ v3 p 9 X; \: t; H: \( y ^/ n9 C5 K% q+ ?0 K" V( @/ X$ e( y& u3 N
图1.2 从LeNet(左)到AlexNet(右) 8 w0 e( I4 f& M. ^+ j ! s' E. t- Q1 t/ SAlexNet和LeNet的设计理念非常相似,但也存在显著差异。 首先,AlexNet比相对较小的LeNet5要深得多。 AlexNet由八层组成:五个卷积层、两个全连接隐藏层和一个全连接输出层。 其次,AlexNet使用ReLU而不是sigmoid作为其激活函数。 下面,让我们深入研究AlexNet的细节。# k5 _8 o) t+ p2 Y; i# V! ^$ U* [8 [