人工智能(AI)曾经只是科幻小说和学术论文里的概念,但如今,它已经实实在在地渗透到我们的日常生活中——从手机里的语音助手到工业生产线上的智能视觉检测,背后都离不开深度学习(也叫机器学习)的力量。说来也巧,人类一直想复制大脑的复杂性,这个挑战催生了新一代科学家、数学家和算法工程师。而真正让AI从实验室走向商业应用的,是近些年数据爆炸式的增长,以及云计算提供的超大规模计算资源。就拿你口袋里的智能手机来说,Google Now 或 Apple Siri 背后的语音识别,靠的就是一种叫做“人工神经网络”的深度学习算法。不过,语音助手只是冰山一角,工业、汽车、医疗等领域的应用,才是深度学习真正大展拳脚的舞台。
卷积神经网络
在深入具体应用之前,我们先来看看神经网络到底是怎么工作的,它又需要哪些资源支持。通常我们说“神经网络”,更准确的叫法是“人工神经网络”——它是模仿生物中枢神经系统的软件算法。多年来,研究者们设计了许多不同的架构,其中卷积神经网络(CNN)是应用最广的。原因有两个:第一,它的架构天然适合GPU和FPGA这类硬件翻跟斗的并行计算模式;第二,它特别擅长处理空间连续性强的数据,比如图像——因为相邻像素往往具有相似的强度和颜色。
CNN由多个不同功能的层堆叠而成,整个工作流程分为两个阶段:训练阶段和执行阶段。训练阶段让算法学会数据的模式,建立神经元之间的连接和权重;执行阶段则利用学到的知识对输入进行识别。模式匹配,正是CNN最核心的概念。

图 1:CNN 的层方法(来源:Wikipedia – credit Aphex34 1)。
想了解更多CNN的工作原理?可以参考Cadence的一篇论文,以及IEEE协会一次关于计算新前沿的会议录制的视频。真正让CNN在图像识别领域名声大噪的,是微软研究团队赢得ImageNet计算机视觉挑战赛的里程碑事件。从此,CNN成为视觉任务的首选武器。
训练之后就是执行阶段。输入图像经过层层节点,每一层都在提取越来越抽象的命题。卷积层负责提取低级特征,比如线条或边缘;池化层通过平均或“池化”来减少变化、降低数据量;然后可以再进入下一轮卷积和池化。一般来说,CNN的层数越多,图像识别准确率越高,但代价是系统性能需求也随之飙升。如果内存带宽足够,这些层可以并行运行,其中卷积层是计算量最大的部分。
开发者面临的核心挑战是:如何提供足够的计算资源,让CNN在规定时间内完成所需数量的图像分类?举个例子,工业自动化中,计算机视觉需要判断零件是否到达传送带的下一阶段——如果神经网络识别零件需要暂停流程,就会拖慢整个生产节奏。现实不允许任何延迟。
实现CNN
要想让CNN反赌,关键就是加速它的“强化学习”阶段和执行阶段——这本质上是一系列数学运算。GPU和FPGA凭借高内存带宽和强计算能力,都是潜在的候选者。传统微处理器(冯·诺依曼架构)存在缓存瓶颈,能跑算法,但最好把层抽象任务交给专门的硬件翻跟斗。GPU虽然并行处理能力强,但它的固定架构限制了灵活性;而FPGA的动态可重新配置架构,反而更适合CNN加速。为什么?因为FPGA采用非常精细的方法,实际上是在硬件中实现CNN算法,相比GPU纯软件的方式,延迟低得多,确定性也更强。另外,FPGA还能在设备结构中“硬化”DSP等功能块,进一步强化网络的确定性。从资源使用来看,FPGA非常高效,每个CNN层都可以在FPGA结构内构建,并把内存靠近它,实现局部化处理。

图 2:图像处理 CNN 概述(来源:Cadence 2)。
图 2 展示了一个专为工业图像处理设计的CNN关键组件,中间两个块就是CNN的核心。
开发基于FPGA的CNN加速应用,可以借助OpenCL语言(C语言的并行编程扩展)来编写。一个具体的例子是英特尔可编程解决方案集团(原Altera)的Arria 10系列器件。英特尔PSG还提供了CNN参考设计,使用OpenCL内核实现每个CNN层,并通过通道和管道在层间传递数据——这样就不需要消耗外部内存带宽。卷积层借助FPGA内的DSP模块和逻辑来实现;硬化块包括浮点功能,可以进一步提高吞吐量,而不占用内存带宽。
图 3 的框图清晰地展示了一个使用FPGA作为加速处理单元的图像处理和分类系统。

图 3:使用 FPGA 进行加速的图像分类系统框图(来源:FPGA 上的深度学习,过去、现在和未来 3)。
英特尔PSG官网上还有很多关于FPGA卷积神经网络在工业、医疗和汽车领域的有用文档和视频。对于开发者来说,选对深度学习框架是关键的第一步。好消息是,可选的工具越来越多:比如OpenANN(开源人工神经网络库)、deeplearning.net和Embedded-vision.com社区网站。支持OpenCL的流行框架包括Caffe(基于C++)和Torch(基于Lua)。还有一个叫DeepCL的框架,也完全支持OpenCL,但用户群目前还没那么广。
结论
工业界对深度学习神经网络的热情高涨,因为它能为制造和自动化带来革命性的能力。德国提出的“工业4.0”以及更广泛的工业物联网概念,更是把这股热潮推向了新高度。结合高质量的视觉相机、CPU、FPGA方案以及相关控制,卷积神经网络可以自动完成大量制造过程中的检查任务,从而提高产品质量、可靠性和工厂安全性。
FPGA凭借动态可配置的逻辑结构、高内存带宽和出色的能效比,非常适合加速CNN的卷积层和池化层。更何况,有大量社区驱动的开源框架和并行代码库(如OpenCL)作为支撑,未来FPGA在CNN加速领域的使用前景非常稳固。这种高度可扩展、灵活的解决方案,能够满足不同工业部门多样化的应用需求。
