以深度神经网络(DNN)为代表的人工智能技术被认为是这场技术变革的基石(之一)。近日,IEEEFellowJoelEmer带领的团队发表了一篇题为《深度神经网络的有效处理:教程和调研(Efficient Processing of Deep Neural Networks: A Tutorial and Survey)》的综述论文,从算法、模型、硬件、架构等多个角度对深度神经网络进行了全面的梳理和总结。鉴于论文篇幅,机器之心提取了原论文的正文和部分重要内容。目前,深度神经网络(DNN)已广泛应用于许多人工智能应用,包括计算机视觉、语音识别和机器人技术。DNN在很多人工智能任务中表现出了最好的精度,但也存在计算复杂度高的问题。因此,能够帮助DNN高效处理并提高效率和吞吐量而不影响性能准确性或增加硬件成本的技术是DNN在人工智能系统中广泛部署的关键。论文地址:https://arxiv.org/pdf/1703.09039.pdf这篇论文旨在提供一个全面的教程和调查,以了解在实现DNN的高效处理目标方面的最新进展。特别是,本文还概述了DNN——讨论了支持DNN的各种平台和架构,并强调了通过单独或同时改进硬件设计来实现高效处理的最新技术的主要趋势。和网络算法,以降低DNN的计算成本。本文还总结了开发资源,以帮助研究人员和从业者快速上手DNN设计,并强调了重要的基准和设计考虑因素,以评估快速增长的DNN硬件设计数量,包括学术界和工业界推荐的算法联合设计。读者将从本文中深入了解以下概念:理解DNN的关键设计注意事项;通过基准和比较指标评估不同的DNN硬件实现;了解不同架构和平台之间的权衡;评估不同DNN高效处理技术的设计有效性;了解最新的履行趋势和机会。一、简介深度神经网络(DNNs)目前是许多人工智能应用的基础[1]。由于DNN在语音识别[2]和图像识别[3]中的突破性应用,使用DNN的应用数量呈爆炸式增长。这些DNN已部署在从自动驾驶汽车[4]、癌症检测[5]到复杂游戏[6]的各种应用中。在许多这些领域中,DNN能够超越人类的准确性。DNN的出色性能源于它能够使用统计学习方法从原始感官数据中提取高级特征,并在大量数据中获得输入空间的有效表示。这不同于以前使用手动提取特征或专家设计规则的方法。然而,DNN的卓越准确性的代价是高计算复杂性成本。虽然通用计算引擎(尤其是GPU)已成为许多DNN处理的支柱,但提供更专门用于DNN计算的加速方法也越来越受欢迎。本文的目的是概述DNN、用于理解其行为的各种工具以及用于有效加速计算的各种技术。本文的结构如下:第二部分给出了DNN为何重要的背景、历史和应用。第三部分概述了DNN的基本组成部分,以及当前流行的DNN模型。第四部分描述了可用于DNN研究和开发的各种资源。第五节描述了用于处理DNN的各种硬件平台,以及在不影响准确性的情况下提高吞吐量(思想输入)和能量(即产生按位相同的结果)的各种优化方法。第六节讨论了如何将混合信号循环和新的内存技术用于近数据处理,以解决DNN中数据流的吞吐量和能耗挑战。第七节描述了各种联合算法和硬件优化,以提高DNN吞吐量和能耗,同时最大限度地减少对准确性的影响。第VIII节描述了在比较DNN设计时应考虑的关键标准。2.深度神经网络(DNN)的背景在本节中,我们描述了深度神经网络(DNN)在更大的人工智能框架中的地位,以及促进其发展的一些概念。现阶段我们也将简要介绍其主要发展历程和主要应用领域。1.人工智能和深度神经网络根据JohnMcCarthy的说法,深度神经网络(也称为深度学习)是人工智能(AI)更大框架的一部分。人工智能(AI)是利用科学和工程学来创造具有人类可以实现的目标的智能机器。人工智能一词是计算机科学家在1950年代创造的。深度学习与整个人工智能的关系如下图所示。图1:深度学习在人工智能大局中的位置2.神经网络和深度神经网络(DNN)神经网络的灵感来自神经元涉及计算输入值的加权和的概念。这些加权和对应于突触完成值的缩放及其与神经元值的组合。此外,由于计算与神经元级联有关,并且是简单线性代数的运算,因此神经元不只是输出加权和。取而代之的是,神经元中存在执行组合输入操作的函数,并且此类函数应该是非线性操作。在非线性操作中,只有当输入超过某个阈值时,神经元才会产生输出。因此,通过类比,神经网络将非线性函数应用于输入值的加权和。稍后我们将描述一些非线性函数。图2:简单的神经网络示例。(a)神经元和突触,(b)计算每一层的加权和,(c)前向和后向(递归)网络,(d)全连接和稀疏(a)显示计算神经网络示意图。图的前端是输入层,它接受输入数据值。这些数据值向前传播到神经网络中间层的神经元,中间层通常被称为神经网络的隐藏层。一个或多个隐藏层的加权和最终前向传播到输出层,最终将神经网络的输出呈现给用户。为了将受大脑启发的术语与神经网络相匹配,神经元的输出通常称为激活,而(a)中所示的突触通常称为权重。上式中,W_ij表示权重,x_i为输入激活,y_i为输出激活,f(·)表示III-2中描述的非线性激活函数。在神经网络领域,有一个研究分支叫做深度学习。普通的神经网络基本上层数不多,但是在深度学习中,神经网络的层数非常多,现在基本上神经网络可以达到5到1000层。3.推理与训练在本节中,如图4所示,我们将使用图像分类作为训练DNN的有力示例。在评估DNN时,我们输入图像,DNN输出每个对象类别的分数向量;得分最高的类成为图像中最有可能的对象类。训练DNN的总体目标是决定如何设置权重以最大化正确类别的分数(来自标记的训练数据)并最小化其他不正确类别的分数。理想的正确分数与DNN根据其当前权重计算的分数之间的差异称为损失(L)。所以训练DNN的目标是找到一组权重,使大型数据集中的平均损失值最小化。图4:图像分类任务4.发展历史1940s-神经网络被提出1960s-深度神经网络被提出1989-NeuralNetworksforRecognizingDigits(LeNet)出现1990s-ShallowNeuralNetworkHardware出现(IntelETANN)2011-DNN突破语音识别(微软)2012-DNNforvision开始取代人工放大(AlexNet)2014+-DNN加速器研究兴起(Neuflow、DianNao等)图5中的列是这些ImageNet竞赛中每个冠军的表现这些年。可以看到初始算法准确率的错误率在25%以上。2012年,多伦多大学AlexNet团队通过GPU提升计算能力,采用深度神经网络方法,将错误率降低近10%[3]。他们的成功带来了深度学习式算法的爆炸式增长和图像识别领域的持续进步。图5:ImageNet竞赛[10]结果5.DNN的应用从多媒体到医学,DNN对许多应用都有很大的好处。在本节中,我们展示了DNN正在产生影响的领域,并强调了DNN有望在未来发挥作用的新兴领域。Image&VideoSpeech&LanguageMedicalGamingRobotics6.嵌入式与云执行DNN推理处理的嵌入式平台具有严格的能源、计算和存储成本限制。当在云端执行DNN推理时,语音识别等应用通常对延迟有很强的要求。因此,在本文中,我们将重点关注推理处理的计算要求,而不是训练。3.深度神经网络概述根据应用的不同,深度神经网络的形状和大小也不同。流行的形状和尺寸正在迅速发展,以提高模型的准确性和效率。所有深度神经网络的输入都是一组值,这些值表征网络将要分析和处理的信息。这些值可以是图像的像素,或音频样本的振幅,或系统或游戏状态的数字表示。处理输入的网络主要有两种形式:前馈和循环(图2c)。在前馈网络中,所有的计算都是基于前一层输出的一系列操作。最后一组运行是网络的输出,例如这张图片包含某个对象的概率是多少,某个音频中某个单词出现的概率是多少,或者对下一步动作的建议。在这类深度神经网络中,网络没有记忆,输出总是独立于之前网络输入的顺序。相比之下,循环网络(其中LSTM是一种流行的变体)具有内部记忆,允许长期依赖性影响输出。在这些网络中,一些中间运行产生的值被存储在网络中,也被用作与处理后面的输入相关的其他操作的输入。在这篇文章中,我们专注于前馈网络,因为到目前为止很少有人关注硬件加速,尤其是循环网络。深度神经网络也可以是全连接的(FC,也称为多层感知器),如图2(d)最左边部分所示。在全连接层中,所有输出都连接到所有输入。这需要相当大的存储和计算空间。值得庆幸的是,在许多应用程序中,我们可以通过将权重设置为零来移除激活之间的一些连接,而不会影响准确性。结果是一个稀疏连接层。图2(d)中最右边的层是一个稀疏连接层。我们还可以通过限制对结果有影响的权重数量来实现更高效的计算。如果每个输出只是固定大小输入窗口的函数,就会出现这种类型的结构化稀疏性。如果每次输入计算都使用这组权重,效率会进一步提高。这种权重共享可以显着降低权重的存储要求。通过将计算构建为卷积,一个非常流行的窗口权重共享网络诞生了,如图6(a)所示,它仅使用少量附近的激活来计算加权和的输出(即过滤后的filter有一个有限的感受野,所有距离输入超过一定距离的权重都会被设置为0),并且这组权重可以被每个输入共享(即filter是空间不变的)。这种形式的结构稀疏性与从网络导出的稀疏性正交(如本文第VII-B2节所述进行修改)。因此,卷积神经网络是深度神经网络的一种流行形式。1.卷积神经网络(CNN)图6:卷积的维度。(a)传统图像处理中的2D卷积,(b)CNN中的高维卷积图7:卷积神经网络表1:CONV/FC层参数的形状参数),卷积层的计算可以定义为:2非线性(Non-Linearity)图8:各种形式的非线性激活函数(来自CaffeTutorial[43])3.池化(Pooling)图9:各种形式的池化(来自CaffeTutorial[43])4.Normalization(归一化)控制层中输入的分布可以显着加快训练速度并提高准确性。因此,需要对输入激活在级别上的分布(σ,μ)进行归一化,使其转化为均值为0标准差为1的分布。在批归一化中,归一化后的值进一步缩放和平移如等式(2)所示,参数(γ,β)是从训练[44]中学习到的两个小常量,可以避免数值问题。(1)流行的DNN模型在过去的二十年中出现了多种DNN模型。据说每个都有不同的“网络架构”,因为它们在层数、过滤器形状(例如过滤器大小、过滤器和通道数)、层类型和连接方面不同。正确理解这些不同的方法及其演变趋势对于提高DNN引擎的效率至关重要。其中包括:LeNet[9],于1989年提出,是最早的CNN方法之一。其中最著名的是第八版LeNet-5,它包含两个卷积层和两个全连接层[45]。AlexNet[3]是第一个赢得ImageNet挑战赛(2012年)的CNN网络。它由五个卷积层和三个全连接层组成。Overfeat[46]具有与AlexNet非常相似的架构:五个卷积层和三个全连接层。VGG-16[47]更进一步,使用了16层深度神经网络,其中包含13个卷积层和3个全连接层。GoogLeNet[48]更深,有22层,首次引入起始模块(见下图)。ResNet[11],即残差网络(ResidualNet),使用残差连接可以使层次更深(34层以上)。该网络首次让DNN在ImageNet挑战赛中以低于5%的前5错误率超越人类。图11:GoogleNet[48]的Inception模块的通道长度示例,其中每个CONV层后跟一个ReLU层(图中未显示)。图12:ResNet[11]中的快捷方式模块。最后一个CONV层之后的ReLU层是快捷连接的。表2:目前流行的DNN[3,11,45,47,48]模型,其中正确率基于ImageNet[10]中的TOP-5错误。4.DNN开发资源DNN快速发展的一个关键因素是研究团体和工业界对一系列开发资源的可用性。这些资源对于DNN加速器的开发也至关重要,提供工作负载表征并促进探索模型复杂性和准确性之间的权衡。本章描述了一些资源,供对此领域感兴趣的人快速入门。1.Frameworks为了简化DNN的开发并使训练网络可共享,不同的团队开发了不同的深度学习框架。这些开源库包含面向DNN的软件库。Caffe于2014年由加州大学伯克利分校开源,支持C、C++、Python和MATLAB。TensorFlow于2015年由Google团队开源,支持C++和Python,也支持多CPU和GPU。比Caffe更灵活,计算表达从数据流图到张量管理(多维数组)。另一个流行的框架是Torch,由Facebook和NYU开发,支持C、C++和Lua。当然,还有其他框架,如Theano、MXNet、CNTK,它们在[57]中有所描述。这些框架的存在不仅方便了DNN研究人员和应用程序设计人员,而且对于编写高性能或更高效的DNN计算引擎也具有无可估量的价值。例如,大多数框架可以使用NVIDIA的cuDNN库在GPU上执行快速计算。这种加速对于框架的用户来说是显而易见的。同样,这种众所周知的硬件加速器组合也可用于Eyeriss[58]等芯片。最终,这些框架对于硬件研究人员来说也是非常宝贵的资源(工作负载),它们可用于设计具有不同工作负载的实验,分析不同的工作负载,探索硬件和软件之间的权衡。2.模型(Model)3.流行的分类数据集很多公开的数据集中有很多人工智能任务可以用来评价DNN的准确率。公共数据集对于比较不同方法的准确性非常重要。最简单和最常见的任务是图像分类。图像分类涉及在给定完整图像的情况下从N类对象中选择1类,并且不需要定位检测。其中包括:MNIST:它包含10个类别(10个数字)的28×28像素手写数字灰度图像,60,000个训练图像和10,000个测试图像。CIFAR:这是一个包含不同物体的32×32像素彩色图像的数据集。ImageNet:它包含256×256彩色像素的图像,有1000多个类别。图13:MNIST数据集(10个类别,60,000张训练图像,10,000张测试图像)[59]与ImageNet数据集(超过1,000个类别,130万张训练图像,100,000张测试图像)[10]4.其他任务的数据集5.DNN处理的硬件在本节中,我们将讨论在不影响准确性的情况下在不同硬件平台上进行高效处理的策略(本节中的所有方法都将输出完全相同的结果)。对于CPU和GPU等时间敏感的架构,我们将讨论如何减少其运算中的乘法次数以提高吞吐量。对于加速器等对空间敏感的架构,我们讨论了如何从内存中廉价地调用数据流以降低能耗。图14:高度并行计算范式1.CPU和GPU平台上的加速内核计算图15:映射到全连接层的矩阵乘法(a),当从单个输入特征图计算单个输出特征图时,使用矩阵向量乘法。(b)当从N个输入特征图计算N个输出特征图时使用矩阵乘法。图16:映射到卷积层的矩阵乘法(a)将卷积映射到Toeplitz矩阵。(b)将Toeplitz矩阵扩展到多个通道和过滤器。图17:用于加速DNN的FFT。2.为加速器设计的节能数据流图18:访问每个MAC图19:存储层次结构和数据移动能量图20:DNN中的数据复用机会图22:DNN的数据流。(a)固定权重(WS),(b)固定输出(OS),(c)无本地多路复用(NLR)VI。近场数据处理在上一节中,我们强调数据流主导能量消耗。虽然空间架构尽量把存储放在靠近计算的地方(比如放在PE里),但是我们也在努力把高密度内存放在靠近计算的地方,或者直接把计算集成到内存本身。在嵌入式系统中,我们还努力将计算放入传感器(首先收集数据的元素)。在本文的这一部分,我们将讨论如何通过使用混合信号电路设计和高级存储器技术将处理尽可能靠近数据来减少数据流量。A.DRAMB。SRAMC。非易失性电阻存储器D.传感器图33.通过(a)SRAM位单元和(b)非易失性电阻存储器进行模拟计算VII.DNN模型和硬件的协同设计(CO-DESIGN)DNN模型和DNN硬件的协同设计可以给处理效率带来很大的好处。为进一步改进。传统上,DNN模型的设计目标是最大限度地提高准确性,而不考虑过多的实施复杂性。然而,这会使设计难以实施。DNN模型和硬件以及联合设计可以有效地共同最大限度地提高准确性和吞吐量,同时最大限度地降低能耗和成本,从而增加采用的可能性。这种方法已在其他重要且广泛使用的多媒体应用程序(例如视频压缩)中得到证明。以前,视频标准主要集中在算法开发上。从MPEG-2到H.264/AVC,编码效率提高了2倍,解码器复杂度增加了4倍[110]。最近,最新的视频编码标准H.265/HEVC[111]采用了算法和硬件的联合设计;因此,与H.264/AVC[112]相比,它的编码效率又提高了2倍,而解码控制器的复杂度仅增加了2倍。在本节中,我们重点介绍了联合研究的几项研究DNN模型和硬件的设计。请注意,与第V节不同,本节中介绍的技术可能会改变准确性;尽管目标是显着降低能耗并提高吞吐量,同时最大程度地减少准确性的变化。这些方法可大致分为以下几类:降低操作和操作数的精度。这包括将浮点数更改为定点数、减少位宽、移至对数域和权重共享。减少操作次数和模型大小。这些技术包括:压缩、修剪和设计紧凑的网络架构。表3:降低AlexNet数值精度的方法。这里的准确率是在ImageNet上测得的前5错误。*表示不适用于第一层和/或最后一层VIII。DNN评估和比较的基准指标1.DNN模型的指标为了评估给定模型的属性,我们应该考虑以下因素:在ImageNet中,这种模型的准确性是数据集上的前5错误。此外,使用了哪种类型的数据增强(例如多重裁剪、集成模型)。对于这个DNN模型,要么使用众所周知的模型,要么报告模型的参数,包括层数、过滤器大小、过滤器数量和通道数。权重的数量影响模型的存储要求,应报告。如果可能,还应报告非零权重的数量,因为这反映了理论上的最小存储要求。应报告需要执行的MAC量,因为它或多或少地指示给定DNN的计算和吞吐量。如果可能,还应报告非零MAC的数量,因为这反映了理论上的最小计算要求。表4:流行的DNN指标。稀疏性源自报告的非零(NZ)权重和MAC2.DNN硬件的指标为了衡量DNN硬件的有效性,我们考虑了以下指标:硬件设计的能效,包括每个非零MAC(非零零权重和激活)和MAC的位宽。应报告片外带宽(例如,DRAM带宽),包括每个非零MAC(非零权重和激活)的片外访问和MAC的位宽。Areaefficiency(面积效率)是在片上测量的对于成本,要考虑存储器(寄存器或SRAM)的大小和类型以及控制逻辑的数量。吞吐量应根据各种DNN的运行时间进行报告,以说明映射和内存带宽效应,这可以提供比峰值吞吐量更有用和信息量更大的指标。表5:Eyerissbenchmark指标示例【本文为专栏机器之心微信公众号“机器之心(id:almosthuman2014)”原文翻译】点此查看作者更多好文
