您的位置:首页 > 游戏 > 游戏 > 企业信用信息公示年报_东莞网络推广服务平台_广东省人大常委会_邢台市seo服务

企业信用信息公示年报_东莞网络推广服务平台_广东省人大常委会_邢台市seo服务

2025/2/13 22:55:05 来源:https://blog.csdn.net/u011808788/article/details/145570792  浏览:    关键词:企业信用信息公示年报_东莞网络推广服务平台_广东省人大常委会_邢台市seo服务
企业信用信息公示年报_东莞网络推广服务平台_广东省人大常委会_邢台市seo服务

学习资料:

MIT 6.5930课程:https://csg.csail.mit.edu/6.5930/lecnotes.html
B站解读课程:【AI芯片设计第一讲】 https://www.bilibili.com/video/BV1vT421v7eQ/?share_source=copy_web&vd_source=71c01570c33f48f5944a1538bf8d0262

摘要

本书对实现深度神经网络 (DNN) 高效处理的关键原则和技术进行了结构化处理。DNN 目前广泛用于许多人工智能 (AI) 应用,包括计算机视觉、语音识别和机器人技术。虽然 DNN 在许多 AI 任务上提供了最先进的准确性,但它的代价是计算复杂性很高。因此,能够在不牺牲准确性或增加硬件成本的情况下,能够高效处理深度神经网络以提高关键指标(例如能效、吞吐量和延迟)的技术对于在 AI 系统中实现 DNN 的广泛部署至关重要。该书包括 DNN 处理的背景;用于设计 DNN 加速器的硬件架构方法的描述和分类;评估和比较不同设计的关键指标;DNN 处理的特点,适合硬件/算法协同设计,以提高能效和吞吐量;以及应用新技术的机会。读者将找到对该领域的结构化介绍,以及当代工作中关键概念的正式化和组织,这些概念提供了可能激发新想法的见解。

关键词

深度学习、神经网络、深度神经网络 (DNN)、卷积神经网络 (CNN)、人工智能 (AI)、高效处理、加速器架构、硬件/软件协同设计、硬件/算法协同设计、特定领域加速器
deep learning, neural network, deep neural networks (DNN), convolutional neural networks (CNN), artificial intelligence (AI), efficient processing, accelerator architecture, hardware/software co-design, hardware/algorithm co-design, domainspecific accelerators

第一部分 了解深度神经网络

第一章 介绍

深度神经网络 (DNN) 是目前许多现代人工智能 (AI) 应用的基础 [5]。自从 DNN 在语音识别 [6] 和图像识别1 [7] 方面的突破性应用以来,使用 DNN 的应用程序数量呈爆炸式增长。这些 DNN 被用于无数应用,从自动驾驶汽车 [8] 到检测癌症 [9],再到玩复杂的游戏 [10]。在许多此类领域中,DNN 现在能够超越人类的准确性。DNN 的卓越准确性来自于它们能够通过对大量数据进行统计学习来获得输入空间的有效表示,从而从原始感官数据中提取高级特征。这与早期使用由专家设计的手工功能或规则的方法不同。然而,DNN 的卓越准确性是以高计算复杂性为代价的。迄今为止,通用计算引擎,尤其是图形处理单元 (GPU),一直是许多 DNN 处理的支柱。然而,在摩尔定律的衰落中,人们越来越多地认识到需要更专业的硬件来不断提高计算性能和能源效率 [11]。在 DNN 计算领域尤其如此。本书旨在概述 DNN、用于理解其行为的各种工具,以及正在探索的用于有效加速其计算的技术。

1.1 深度神经网络的背景

在本节中,我们介绍了 DNN 在人工智能 (AI) 环境中的一般地位,以及推动 DNN 发展的一些概念。我们还将简要介绍 DNN 历史上的主要里程碑,以及它当前应用的一些域。

1.1.1 人工智能和深度神经网络

DNN(也称为深度学习)是 AI 广泛领域的一部分。根据 1950 年代创造该术语的计算机科学家约翰·麦卡锡 (John McCarthy) 的说法,人工智能是创造智能机器的科学和工程,这些机器能够像人类一样实现目标。深度学习与整个 AI 的关系如图 1.1 所示。
在这里插入图片描述
人工智能中有一个很大的子领域,称为机器学习,Arthur Samuel [12] 于 1959 年将其定义为“赋予计算机无需明确编程即可学习的研究领域”。这意味着单个程序一旦创建,将能够学习如何在编程概念之外进行一些智能活动。这与专门构建的程序形成鲜明对比,后者的行为由手工制作的启发式方法定义,这些启发式方法显式地静态定义其行为。
有效的机器学习算法的优势是显而易见的。与创建独特的自定义程序来解决域中的每个单独问题这种费力且偶然的方法不同,单个机器学习算法只需通过称为训练的过程进行学习即可处理每个新问题。
在机器学习领域,有一个领域通常被称为类脑计算。由于大脑是目前我们所知道的用于学习和解决问题的最佳“机器”,因此它是寻找灵感的自然场所。因此,类脑计算是一种程序或算法,它从大脑的工作方式中获取其基本形式或功能的某些方面。这与创建大脑的尝试形成鲜明对比,而是该程序旨在模拟我们如何理解大脑运作的某些方面。
尽管科学家们仍在探索大脑如何工作的细节,但人们普遍认为大脑的主要计算元素是神经元。平均人脑中大约有 860 亿个神经元。神经元本身由许多进入它们的元素(称为树突)和离开它们的元素(称为轴突)连接起来,如图 1.2 所示。神经元接受通过树突进入它的信号,对这些信号进行计算,并在轴突上产生信号。这些输入输出信号称为激活。一个神经元的轴突分支出来,并与许多其他神经元的树突相连。轴突分支和树突之间的连接称为突触。据估计,平均人脑中有 1014 到 1015 个突触。
与大脑中神经元的连接。xi , wi , f ./ 和 b 分别是激活值、权重、非线性函数和偏置。(图改编自 [4])

突触的一个关键特征是它可以缩放穿过它的信号 (xi ),如图 1.2 所示。该缩放因子可以称为权重 (wi ),人们认为大脑学习的方式是通过改变与突触相关的权重。因此,不同的权重会导致对输入的不同响应。学习的一个方面可以被认为是响应学习刺激而调整重量,而大脑的组织(可能被认为是程序)在很大程度上没有改变。这一特性使大脑成为机器学习风格算法的绝佳灵感来源。在类脑计算范式中,有一个称为尖峰计算的子领域。在这个子领域中,灵感来自于树突和轴突上的通信是尖峰状脉冲,并且所传达的信息不仅仅是基于尖峰的振幅。相反,它还取决于脉冲到达的时间,并且神经元中发生的计算不仅仅是单个值的函数,而是脉冲宽度和不同脉冲之间的时序关系的函数。IBM TrueNorth 项目是受大脑尖峰启发的工作示例 [13]。与尖峰计算相反,类脑计算的另一个子领域称为神经网络,这是本书的重点2

2注:最近以程式化方式使用 TrueNorth 的工作使其可用于计算降低精度的神经网络 [14]。这些类型的神经网络将在第 7 章中讨论。
在这里插入图片描述

1.1.2 神经网络和深度神经网络

神经网络的灵感来自神经元的计算涉及输入值的加权和的概念。这些加权和对应于突触执行的值缩放以及这些值在神经元中的组合。此外,神经元不会直接输出该加权和,因为仅涉及线性运算的神经元级联的表达能力正好等于单个神经元的表达能力,这非常有限。相反,神经元内有一个功能作,该作是对组合输入执行的。此作似乎是一个非线性函数,仅当神经元的组合输入超过某个阈值时,它才会使神经元生成输出。因此,通过类比,神经网络将非线性函数应用于输入值的加权和3。这些非线性函数受到生物函数的启发,但并非旨在模拟大脑。我们在 2.3.3 节中看看其中一些非线性函数。
图 1.3a 显示了三层(非生物)神经网络的示意图。输入层中的神经元接收一些值,计算它们的加权和,然后计算非线性函数,并将输出传播到网络中间层的神经元,该层通常也称为“隐藏层”。神经网络可以有多个隐藏层,隐藏层的输出最终传播到输出层,输出层计算网络的最终输出给用户。为了将类脑术语与神经网络保持一致,神经元的输出通常称为激活,突触通常称为权重,如图 1.3a 所示。我们将在本书中使用 activation/weight 命名法。
在这里插入图片描述

图 1.3b 显示了第 1 层的计算示例: y j = f ( ∑ W i j ∗ x i + b i ) y_j = f ( \sum W_{ij}*x_i+b_i ) yj=f(Wijxi+bi),其中 Wij 、 习 和 yj 分别是权重、输入激活和输出激活,而 f 。/ 是 Section 2.3.3 中描述的非线性函数。为简单起见,图 1.3b 中省略了偏置项 bj。在本书中,我们将使用绿色表示权重,蓝色表示激活,红色表示加权和(或部分和,进一步累积成为最终的加权和)。
在神经网络的领域内,有一个叫做深度学习的领域,其中神经网络有不止三层,即不止一层隐藏层。如今,深度学习中使用的网络层的典型数量从 5 个到 1000 多个不等。在本书中,我们通常会使用术语深度神经网络 (DNN) 来指代深度学习中使用的神经网络。
与较浅的神经网络相比,DNN 能够学习更复杂、更抽象的高级特征。演示这一点的一个示例是使用 DNN 处理视觉数据,如图 1.4 所示。在这些应用程序中,图像的像素被馈送到 DNN 的第一层,该层的输出可以解释为表示图像中存在不同的低级特征,例如线条和边缘。在后续层中,这些特征随后被组合成可能存在更高级别特征的度量,例如,将线条组合成形状,这些形状又进一步组合成形状集。最后,基于所有的这些信息,网络提供了一个包含特定对象或场景的高级特征概率。这种深入的特征层次结构使 DNN 能够在许多任务中实现卓越的性能。
在这里插入图片描述

1.2 训练与推理

由于 DNN 是机器学习算法的一个实例,因此基本程序在学习执行其给定任务时不会发生变化。在 DNN 的特定情况下,这种学习涉及确定网络中权重(和偏差)的值,称为训练网络。训练完成后,程序可以通过使用训练过程中确定的权重计算网络的输出来执行其任务。使用这些权重运行程序称为推理。
在本节中,我们将使用图像分类(如图 1.5 所示)作为训练和使用 DNN 的驱动示例。当我们使用 DNN 执行推理时,输入是 image,输出是表示类概率的值向量。每个对象类都有一个值,具有最高值的类表示图像中最可能(预测的)对象类。训练 DNN 的首要目标是确定使正确类的概率最大化和错误类的概率最小化的权重。正确的类通常是已知的,因为它通常在训练集中定义。理想正确概率与 DNN 根据其当前权重计算的概率之间的差距称为损失 (L)。因此,训练 DNN 的目标是找到一组权重,以最大限度地减少大型训练集的平均损失。
在训练网络时,权重 (wij ) 通常使用称为梯度下降的爬坡(hill-descending)优化过程进行更新。在梯度下降中,权重由损失相对于权重的偏导数的缩放版本更新,例如更新权重 w i j t + 1 = w i j t − α ∂ L ∂ w i j w_{ij}^{t+1}=w_{ij}^{t}-\alpha\frac{\partial L}{\partial w_{ij}} wijt+1=wijtαwijL,α称为学习率。请注意,此梯度表示权重应如何变化以减少损失。该过程以迭代方式重复,以减少整体损失。

边栏:训练的关键步骤在这里,我们将非常简要地总结训练和部署模型的关键步骤。有关更多详细信息,我们建议读者参考更全面的参考资料,例如 [2]。首先,我们收集一个标记的数据集,并将数据划分为子集进行训练和测试。其次,我们使用训练集来训练模型,以便它可以学习给定任务的权重。在训练集上获得足够的准确性后,模型的最终质量取决于它在看不见的数据上执行的准确性。因此,在第三步中,我们测试经过训练的模型,要求它预测以前从未见过的测试集的标签,并将预测结果与真实标签进行比较。泛化是指模型在训练数据和未见过的数据之间保持准确性的程度。如果模型不能很好地泛化,则通常称为过拟合;这意味着模型适合Noise,而不是我们希望它学习的底层数据结构。对抗过拟合的一种方法是拥有一个大型、多样化的数据集;研究表明,准确率随训练样本数量的增加呈对数状增加 [16]。Section 2.6.3 将讨论用于训练的各种常用数据集。还有其他有助于泛化的机制,包括 Regularization。它在训练过程中为模型添加了约束,例如平滑度、参数数量、参数大小、先验分布或结构,或使用 dropout [17] 进行训练的随机性。将训练集进一步划分为训练集和验证集是另一个有用的工具。设计 DNN 需要确定(调整)大量超参数,例如层的大小和形状或层数。根据测试集调整超参数可能会导致对测试集的过度拟合,从而导致对看不见的数据的真实性能的误导性评估。在这种情况下,可以使用验证集而不是测试集来缓解此问题。最后,如果模型在测试集上表现足够好,则可以将其部署在未标记的图像上。

较大的学习率会增加每次迭代时应用的步长,这有助于加快训练速度,但也可能导致超过最小值或导致优化不收敛。较小的学习率会减少每次迭代时应用的步长,这会减慢训练速度,但会增加收敛的可能性。设置学习率的方法有很多种,比如 ADAM [18] 等。找到最佳学习率是训练 DNN 的主要挑战之一。
计算梯度的偏导数的一种有效方法是通过一个称为反向传播的过程。反向传播源于微积分中的链式法则,通过网络向后传递值来计算每个权重对损失的影响。
在这里插入图片描述
事实上,这种反向传播计算在形式上与用于推理的计算非常相似,如图 1.6 [19] 所示5 .因此,有效执行推理的技术有时可用于执行训练。但是,还有一些重要的其他注意事项需要注意。首先,反向传播需要保留网络的中间输出以供反向计算,因此训练增加了存储要求。其次,由于爬山(hill-descending)使用的梯度,训练的精度要求通常高于推理。因此,第 7 章中讨论的许多降低精度的技术仅限于推理。

5要通过每一层反向传播:(1) 从层输入(即正向激活,xi )计算损失相对于权重 ∂ L ∂ w i j \frac{\partial L}{\partial w_{ij}} wijL 的梯度和相对于层输出的梯度 ∂ L ∂ y j \frac{\partial L}{\partial y_j} yjL ;(2) 从层权重 wij 计算相对于层输入的损失梯度 ∂ L ∂ x i \frac{\partial L}{\partial x_i} xiL ,以及损失相对于层输出的梯度 ∂ L ∂ y j \frac{\partial L}{\partial y_j} yjL

使用了多种技术来提高训练的效率和稳健性。例如,通常在执行单次权重更新之前计算来自多个输入的损失。这称为批处理,有助于加快和稳定流程6

6有多种形式的 gradient decent,它们在更新权重的频率方面有所不同。Batch Gradient Descent 在计算整个训练集的损失后更新权重,这在计算上成本很高,并且需要大量存储空间。Stochastic Gradient Descent 在单个训练样本上计算损失后更新权重,并且这些样本在完成整个训练集后被随机排列。虽然速度很快,但查看单个示例可能会产生噪声,并导致权重流向错误的方向。最后,Mini-batch Gradient Descent 将训练集划分为更小的集合,称为 mini-batch,并根据每个 mini-batch 的损失(通常简称为 “batch”)更新权重;这种方法是最常用的。通常,整个训练集的每次传递称为一个epoch。

有多种方法可以训练重量。如上所述,最常见的方法称为监督学习,其中所有训练样本都被标记(例如,使用正确的类别)。无监督学习是另一种方法,其中不标记训练样本。从本质上讲,目标是在数据中找到结构或集群。半监督学习介于两种方法之间,其中只标记训练数据的一小部分(例如,使用未标记的数据来定义集群边界,并使用少量标记的数据来标记集群)。最后,强化学习可用于训练权重,以便根据当前环境的状态,DNN 可以输出代理下一步应采取的行动,以最大化预期奖励;但是,奖励可能不会在作后立即可用,而只能在一系列作(通常称为episode)之后使用。
另一种常用的确定权重的方法是微调,其中先前训练的权重可用并用作起点,然后针对新数据集(例如,迁移学习)或新约束(例如,降低精度)调整这些权重。与从随机起点开始相比,训练速度更快,有时可以提高准确性。
本书将重点介绍 DNN 推理的高效处理,而不是训练,因为 DNN 推理通常在资源有限的嵌入式设备(而不是云)上执行,稍后将更详细地讨论。

1.3 发展历程

尽管神经网络在 1940 年代被提出,但第一个采用多个数字神经元的实际应用直到 1980 年代后期才出现,用于手写数字识别的 LeNet 网络 [20].7 这种系统被 ATM 广泛用于支票上的数字识别。2010 年代初,基于 DNN 的应用程序如雨后春笋般涌现,其中最引人注目的是 2011 年的 Microsoft 语音识别系统 [6] 和 2012 年用于图像识别的 AlexNet DNN [7]。深度学习的简要年表如图 1.7 所示。2010 年代初深度学习的成功被认为是三个因素的共同作用。第一个因素是训练网络的可用信息量。要学习强大的表示形式(而不是使用手工制作的方法)需要大量的训练数据。例如,Facebook 每天接收多达 10 亿张图像,沃尔玛每小时创建 2.5 PB 的客户数据,YouTube 每分钟上传超过 300 小时的视频。因此,这些企业和许多其他企业都有大量的数据来训练他们的算法。第二个因素是可用的计算容量。半导体器件和计算机架构的进步继续提供更高的计算能力,我们似乎已经跨越了一个阈值,即可以在合理的时间内执行 DNN 中的大量加权和计算,这是推理和训练所必需的。

7在 1960 年代初期,由模拟逻辑构建的单神经元系统用于自适应滤波 [21, 22]。
在这里插入图片描述
这些早期 DNN 应用程序的成功为算法开发打开了闸门。它还激发了几个(主要是开源的)框架的开发,使研究人员和从业者更容易探索和使用 DNN。将这些努力结合起来有助于第三个因素,即算法技术的发展,这些技术显著提高了准确性并拓宽了 DNN 的应用领域。
深度学习成功的一个很好的例子可以用 ImageNet 挑战赛 [23] 来说明。这项挑战赛是一项涉及几个不同组成部分的竞赛。其中一个组成部分是图像分类任务,其中算法被赋予图像,它们必须识别图像中的内容,如图 1.5 所示。训练集由 120 万张图像组成,每张图像都标有图像包含的 1000 个对象类别中的一个。在评估阶段,算法必须准确识别测试图像集中的对象,这是它以前从未见过的。
图 1.8 显示了 ImageNet 竞赛中最佳参赛者多年来的表现。算法的准确性最初为 25% 或更高。2012 年,多伦多大学的一个小组使用图形处理单元 (GPU) 来提高计算能力和名为 AlexNet 的 DNN 方法,并将错误率降低了大约 10 个百分点 [7]。他们的成就激发了深度学习算法的涌现,这些算法带来了源源不断的改进。
随着 ImageNet 挑战赛使用深度学习方法的趋势,使用 GPU 的参赛者数量也相应增加:从 2012 年只有 4 名参赛者使用 GPU 到 2014 年几乎所有参赛者 (110 名) 都在使用 GPU。GPU 的这种使用反映了比赛从传统计算机视觉方法到基于深度学习的方法的几乎完全转变。
在这里插入图片描述
2015 年,ImageNet 获奖产品 ResNet [24] 以低于 5% 的前 5 名错误率8 超过了人类水平的准确率。从那时起,错误率下降到 3% 以下,现在将更多注意力放在竞争中更具挑战性的组成部分上,例如对象检测和定位。这些成功显然是 DNN 应用广泛应用的一个因素。

8前 5 名错误率的衡量标准是正确答案是否出现在算法选择的前五个类别之一中。

1.4 DNN 的应用

许多领域都可以从 DNN 中受益,从娱乐到医学。在本节中,我们将提供 DNN 当前产生影响的领域示例,并重点介绍 DNN 未来可能产生影响的新兴领域。
• 图像和视频:视频可以说是最大的大数据。它占当今 Internet 流量的 70% 以上 [25]。例如,全球每天收集超过 8 亿小时的视频用于视频监控 [26]。计算机视觉对于从视频中提取有意义的信息是必要的。DNN 显著提高了许多计算机视觉任务的准确性,例如图像分类 [23]、对象定位和检测 [27]、图像分割 [28] 和动作识别 [29]。
• 语音和语言:DNN 显著提高了语音识别 [30] 以及许多相关任务的准确性,例如机器翻译 [6]、自然语言处理 [31] 和音频生成 [32]。
• 医学和保健:DNN 在基因组学中发挥着重要作用,可以深入了解自闭症、癌症和脊髓性肌萎缩症等疾病的遗传学 [33-36]。它们还被用于医学成像,如检测皮肤癌[9]、脑癌[37]和乳腺癌[38]。
• 游戏:最近,许多涉及游戏的重大 AI 挑战已使用 DNN 克服。这些成功还需要训练技术的创新,其中许多依赖于强化学习 [39]。DNN 在玩 Atari [40]、Go [10] 和 StarCraft [41] 等游戏中已经超过了人类水平的准确性,在这些游戏中,由于可能的移动数量巨大,穷举搜索所有可能性是不可行的。
• 机器人技术:DNN 在机器人任务领域取得了成功,例如用机械臂抓取 [42]、地面机器人的运动规划 [43]、视觉导航 [8, 44]、稳定四轴飞行器的控制 [45] 和自动驾驶汽车的驾驶策略 [46]。

DNN 已广泛应用于当今的多媒体应用(例如,计算机视觉、语音识别)。展望未来,我们预计 DNN 可能会在医疗和机器人领域发挥越来越重要的作用,如上所述,以及金融(例如,用于交易、能源预测和风险评估)、基础设施(例如,结构安全和交通控制)、天气预报和事件检测 [47]。无数的应用领域对 DNN 的高效处理提出了新的挑战;然后,解决方案必须具有自适应性和可扩展性,以便处理这些应用程序可能采用的新的和各种形式的 DNN。

1.5 嵌入式与云

DNN 处理的各种应用和方面(即训练与推理)具有不同的计算需求。具体来说,训练通常需要大型数据集9和大量计算资源来进行多次权重更新迭代。在许多情况下,训练 DNN 模型仍然需要几个小时到几天(或几周或几个月)的时间,因此通常在云中执行。
另一方面,推理可以在云中或边缘(例如物联网 (IoT) 或移动设备)进行。在许多应用中,最好在传感器附近的边缘进行 DNN 推理处理。例如,在计算机视觉应用中,例如测量商店的等待时间或预测交通模式,最好直接在图像传感器而不是在云中从视频中提取有意义的信息,以降低通信成本。对于其他应用程序,例如自动驾驶汽车、无人机导航和机器人技术,需要本地处理,因为依赖云的延迟和安全风险太高。但是,视频涉及大量数据,处理起来计算复杂;因此,用于分析视频的低成本硬件对于实现这些应用具有挑战性,但又至关重要10。语音识别使我们能够与电子设备无缝交互,例如智能手机。虽然目前 Apple Siri 和 Amazon Alexa 语音服务等应用程序的大部分处理都在云中进行,但仍然希望在设备本身上执行识别以减少延迟。一些工作甚至考虑在云和边缘之间按层划分处理,以提高性能 [49]。但是,与对连接、隐私和安全的依赖相关的考虑预示着将计算保持在边缘。许多执行 DNN 推理的嵌入式平台对能耗、计算和内存成本限制有严格的要求;在这些限制下,DNN 的高效处理变得至关重要。

9DNN 的主要缺点之一是它们需要大型数据集来防止训练期间的过度拟合。
10作为参考,在嵌入式设备上运行 DNN 估计每像素消耗的能量比视频压缩高几个数量级,视频压缩是图像传感器附近处理的一种常见形式 [48]。

第二章 深度神经网络概述

深度神经网络 (DNN) 的形状和大小各不相同,具体取决于应用。1 流行的形状和大小也在迅速发展,以提高准确性和效率。在所有情况下,DNN 的输入都是一组值,表示网络要分析的信息。例如,这些值可以是图像的像素、音频波的采样振幅或某些系统或游戏状态的数字表示。
在本章中,我们将介绍 DNN 的关键构建块。由于有许多不同类型的 DNN [50],我们将重点关注使用最广泛的 DNN。我们将首先在第 2.1 节和第 2.2 节中描述常用 DNN 层的突出特征。然后,我们将在第 2.3 节中介绍常见的 DNN 层以及如何组合这些层以形成各种类型的 DNN。第 2.4 节将详细讨论卷积神经网络 (CNN),因为它们被广泛使用,并且往往为高效的 DNN 处理提供许多机会。它还将重点介绍各种流行的 CNN 模型,这些模型通常用作评估 DNN 硬件加速器的工作负载。接下来,在第 2.5 节中,我们将简要讨论其他类型的 DNN,并从工作负载处理的角度(例如,数据依赖关系、计算作的类型等)描述它们与 CNN 的相似和不同之处。最后,在第 2.6 节中,我们将讨论研究人员和从业者提供的各种 DNN 开发资源(例如框架和数据集),以帮助实现 DNN 模型和硬件研发的快速发展。

1DNN 研究社区通常将 DNN 的形状和大小称为其“网络架构”。但是,为了避免与硬件社区使用的“体系结构”一词混淆,我们将在本书中讨论“DNN 模型”及其形状和大小。

2.1 层内连接的属性

如第 1 章所述,DNN 由多个处理层组成,其中在大多数层中,主要计算是加权和。有几种不同类型的层,它们的主要区别在于层内输入和输出的连接方式。

层内的连接有两个主要属性:

  1. 输入和输出激活之间的连接模式,如图 2.1a 所示:如果一个层具有每个输入激活都连接到每个输出的属性,那么我们称该层为 Fully connected。另一方面,如果一个层具有只有一个输入子集连接到输出的属性,那么我们称该层为稀疏连接。请注意,与这些连接关联的权重可以为零或非零;如果权重恰好为零(例如,作为训练的结果),并不意味着没有连接(即连接仍然存在)。
    在这里插入图片描述

对于稀疏连接的图层,sub 属性与连接的结构相关。Input 激活可以连接到任何输出激活(即全局),或者它们只能连接到其邻域(即本地)的输出激活。这种局部连接的结果是,每个输出激活都是输入激活的受限窗口的函数,称为感受野。

  1. 与每个连接关联的权重值:最一般的情况是权重可以采用任何值(例如,每个权重可以具有唯一值)。更受限制的情况是,相同的值由多个权重共享,这称为权重共享。

这些属性的组合会产生许多常见的图层类型。任何具有 fully connected 属性的层都称为 fully connected 层(FC 层)。为了区分属性和层类型,在本章中,我们将使用术语 FC 层来区分 fully connected 属性。但是,在后续章节中,我们将遵循互换使用术语的常见做法。另一种广泛使用的层类型是卷积 (CONV) 层,它是局部的,与权重共享稀疏连接。FC 和 CONV 层中的计算是加权和。但是,还会有其他计算会执行,这些将导致其他类型的图层。我们将在 Section 2.3 中更详细地讨论 FC、CONV 和其他这些层。

2.2 层间连接的属性

另一个属性是从一层的输出到另一层的输入的连接,如图 2.1b 所示。output 可以连接到下一层的 input,在这种情况下,这种连接称为 preforward 。使用前馈连接,所有计算都作为对前一层输出的一系列作执行。3 它没有内存,并且无论先前提供给网络的输入顺序如何,输入的输出始终相同。包含前馈连接的 DNN 称为前馈网络。这些类型的网络的示例包括多层感知器 (MLP),它们是完全由前馈 FC 层组成的 DNN,以及卷积神经网络 (CNN),它们是同时包含 FC 和 CONV 层的 DNN。CNN 通常用于图像处理和计算机视觉,将在 2.4 节中更详细地讨论。
或者,可以将输出反馈到其自身层的输入,在这种情况下,这种连接通常称为递归连接。对于 recurrent connections,层的 output 是该层的当前和先前 inputs(s) 的函数。这会在 DNN 中创建一种内存形式,从而允许长期依赖关系影响输出。包含这些连接的 DNN 称为递归神经网络 (RNN),通常用于处理顺序数据(例如语音、文本),将在第 2.5 节中更详细地讨论。

3连接可以来自紧接的前一层或之前的层。此外,来自一个层的连接可以转到多个后续层。

2.3 DNN 中的常见层类型

在本节中,我们将讨论用于形成 DNN 的各种常用层。我们将首先描述 CONV 和 FC 层,它们的主要计算是加权和,因为在能耗和吞吐量方面,它们往往在计算成本中占主导地位。然后,我们将讨论可以选择包含在 DNN 中并且不使用加权和(如非线性、池化和归一化)的各种层。
这些图层可以看作是基元图层,可以将它们组合起来形成复合图层。当相同的基元层组合经常一起使用时,通常为方便起见,为复合层命名。在实践中,人们通常将 primitive 层或 compound 层称为 layers。

2.3.1 卷积层(卷积)

在这里插入图片描述

CONV 层主要由高维卷积组成,如图 2.2 所示。在此计算中,层的输入激活被构建为 3-D 输入特征图(ifmap),其中维度是高度 (H) 、宽度 (W ) 和输入通道数 (C)。图层的权重结构为 3-D 过滤器,其中尺寸是输入通道的高度 (R)、宽度 (S) 和数量 (C)。请注意,输入特征图和筛选器的通道数相同。对于每个输入通道,输入特征图都会经历 2-D 卷积(参见图 2.2a),滤波器中的相应通道。每个点的卷积结果在所有输入通道上求和,以生成输出部分和。此外,可以将 1-D(标量)偏差添加到过滤结果中,但最近的一些网络 [24] 将其使用从部分层中删除。这样做计算的结果是包含输出特征图 (ofmap) 的一个通道的输出部分和。4可以在同一输入特征图上使用额外的 3-D 滤波器来创建额外的输出通道(即,将 M 滤波器应用于输入特征图会在输出特征图中生成 M 个输出通道)。最后,多个输入特征图 (N ) 可以作为批处理一起处理,以潜在地提高过滤器权重的重用。

4为简单起见,在本章中,我们将部分和数组称为输出特征图。然而,从技术上讲,输出特征图将由部分和经过非线性函数(即输出激活)后的值组成。

在这里插入图片描述
给定表 2.1,5 中的形状参数,CONV 层的计算定义为:
在这里插入图片描述
o、i、f 和 b 分别是 ofmap、ifmap、filters 和 biases 的张量。U 是给定的步幅大小。
图 2.2b 显示了此计算的可视化 (忽略偏差)。在本书中,我们将尽可能遵循以下着色方案。
• 蓝色:属于输入特征图的输入激活。
• 绿色:属于过滤器的权重。
• 红色:部分总和 - 注意:由于部分总和数组没有正式术语,因此我们有时会将部分总和数组标记为输出特征图,并将其涂成红色 (尽管从技术上讲,输出特征图由从通过非线性函数传递的部分和派生的激活值组成,因此应为蓝色)。

5在一些文献中,使用 K 而不是 M 来表示 3-D 滤波器(也称为内核)的数量,它决定了输出特征图通道的数量。我们选择不使用 K,以避免与其他使用 K 来指代维度数的社区混淆。我们还采用了使用 P 和 Q 作为输出维度的惯例,以与其他出版物保持一致,并且由于我们之前使用 E 和 F 导致使用“F”的别名来表示过滤器权重。请注意,一些文献还使用 X 和 Y 来表示输入的空间维度,而不是 W 和 H。

回到公式 (2.1) 中的 CONV 层计算,人们注意到作数(即 ofmaps、ifmaps 和 filters)有很多维度。因此,这些作数可以被视为张量(即高维数组),并且计算可以被视为张量代数计算,其中计算涉及在张量之间执行二进制运算(例如,乘法和加法形成点积)以产生新的张量。由于 CONV 层可以被视为张量代数运算,因此值得注意的是,可以使用 [51] 中的张量索引表示法创建 CONV 层的替代表示形式,该表示法描述了稀疏张量代数计算的编译器6。张量索引表示法提供了一种紧凑的方法来描述内核的功能。例如,在这个符号矩阵中,乘法 Z=AB 可以写成:
Z i j = ∑ k A i k B k j Z_{ij}=\sum {_k}A_{ik}B_{kj} Zij=kAikBkj
即输出点 (i,j)是通过沿 A 的第 i 行和 B 的第 j 列取 k 值的点积而形成的。7 扩展此表示法以表示对索引变量的计算(通过将这些计算放在括号中)可以非常简洁地表示张量索引表示法中的 CONV 层:
在这里插入图片描述
在此计算中,每个输出在点 .n;m;p;q/ 计算为点积,取 input activation 和 filter weight 张量的指定元素的索引变量 c、r 和 s 的点积。请注意,此表示法对 summation 中 index 变量的顺序没有意义。在讨论数据流(第 5 章)和将计算映射到 DNN 加速器(第 6 章)中,这一点的相关性将变得很明显。

最后,为了使 CNN 的术语与通用 DNN 保持一致,
• 过滤器由权重 (即突触) 和
• 输入和输出特征映射(IFMaps、OfMaps)由输入和输出激活(应用非线性函数后的部分和)(即输入和输出神经元)组成。

6请注意,CONV 层张量中的许多值为零,这使得张量稀疏。这种稀疏性的起源,以及执行生成的稀疏张量代数的方法,在第 8 章中介绍。
7请注意,阿尔伯特·爱因斯坦 (Albert Einstein) 为张量代数推广了一种类似的符号,它省略了求和变量的任何明确规范。

在这里插入图片描述

2.3.2 FC 层(全连接)

在 FC 层中,输出特征图中的每个值都是输入特征图中每个输入值的加权和(即,它是完全连接的)。此外,FC 层通常不表现出权重共享,因此计算往往受内存限制。FC 层通常以矩阵乘法的形式进行处理,这将在第 4 章中解释。这就是矩阵乘法通常与 DNN 处理相关联的原因。
FC 层也可以被视为 CONV 层的特例。具体来说,是一个 CONV 层,其中过滤器的大小与输入特征图的大小相同。因此,它没有 CONV 层的 local, sparsely connected with weight sharing 属性。因此,方程 (2.1) 仍然适用于对形状参数有一些额外约束的 FC 层的计算:H= R、W=S、P=Q=1 和 U=1。图 2.3 显示了此计算的可视化,在 Section 2.3.1 的张量索引表示法中,它是:
在这里插入图片描述

2.3.3 非线性

非线性激活函数通常应用在每个 CONV 或 FC 层之后。使用各种非线性函数将非线性引入 DNN,如图 2.4 所示。这些函数包括历史上传统的非线性函数,例如 sigmoid 或双曲正切函数。这些很受欢迎,因为它们促进了数学分析/证明。整流线性单元(ReLU)[52] 由于其简单性和能够实现快速训练的能力,同时达到相当的准确性,8ReLU 的变体,如泄漏的 ReLU [53]、参数 ReLU [54]、指数 LU [55] 和 Swish [56] 也被探索以提高准确性。最后,一种称为 maxout 的非线性,它取两个相交线性函数的最大值,已被证明在语音识别任务中是有效的 [57, 58]。
在这里插入图片描述

2.3.4 池化和上池化(反池化)

根据应用程序,有多种计算可用于更改特征图的空间分辨率(即 H 和 W 或 P 和 Q)。对于图像分类等应用程序,目标是将整个图像汇总到一个标签中;因此,降低空间分辨率可能是可取的。将 input 减少为稀疏输出的网络通常称为编码器网络。对于语义分割等应用程序,目标是为图像中的每个像素分配一个标签;9 因此,可能需要提高空间分辨率。将输入扩展为密集输出的网络通常称为解码器网络。
降低特征图的空间分辨率称为池化或更一般的下采样。池化(分别应用于每个通道)使网络能够鲁棒且不受小偏移和失真的影响。池化 将 Tucking 将其感受字段中的一组值合并或汇集为较少数量的值。池化可以根据其感受野的大小(例如,2 2)和池化作(例如,最大值或平均值)进行参数化,如图 2.5 所示。通常,池化发生在不重叠的块上(即,步幅等于池化的大小)。通常使用大于 1 的步幅,以便降低表示(即特征图)的空间分辨率。池化通常在非线性之后执行。
提高特征图的空间分辨率称为 unpooling,或者更普遍地称为 upsampling。常用的上采样形式包括在激活之间插入零,如图 2.6a 所示(这种类型的上采样通常称为 unpooling10),使用最近邻 [63, 64] 进行插值,如图 2.6b 所示,以及使用双线性或双三次过滤 [65] 进行插值。上采样通常在 CONV 或 FC 层之前执行。如第 8.1.1 节所述,上采样可以在输入特征图中引入结构化稀疏性,可用于提高能源效率和吞吐量。
在这里插入图片描述
8除了易于实现之外,ReLU 还增加了输出激活的稀疏性,DNN 加速器可以利用它来增加吞吐量、降低能耗和降低存储成本,如第 8.1.1 节所述。
9在文献中,这通常被称为密集预测。
10解池有两种版本:(1) 以规则模式应用零插入,如图 2.6a [60] 所示——这是最常用的;(2) 取消池化与 Max 池化层配对,其中存储池化期间最大值的位置,在取消池化期间,非零值的位置放置在池化前的最大值位置 [61]。

2.3.5 归一化

控制跨层的输入分布有助于显著加快训练速度并提高准确性。因此,层 input 激活 (σ,μ) 的分布是标准化的使其具有零均值和单位标准差。在批量归一化 (BN) 中,归一化值被进一步缩放和移动,如方程 (2.5) 所示,其中参数 (γ,β) 是从训练中学习的 [66]:11;12
在这里插入图片描述
其中 ϵ \epsilon ϵ是一个小常数,以避免数值问题。在 BN 被广泛采用之前,使用了局部反应归一化 (LRN) [7],这是受到神经生物学中横向抑制的启发,其中兴奋的神经元(即高值激活)应该制服其邻居(即导致低值激活);但是,BN 现在被认为是 CNN 设计中的标准做法,而 LRN 几乎已被弃用。请注意,LRN 通常在非线性函数之后执行,而 BN 通常在 CONV 或 FC 层与非线性函数之间执行。如果 BN 在 CONV 或 FC 层之后立即执行,则其计算可以折叠到 CONV 或 FC 层的权重中,从而无需额外的推理计算。

2.3.6 复合层

上述基元层可以组合形成复合层。例如,注意力层由矩阵乘法和前馈、全连接层组成 [68]。注意层在处理包括语言和图像在内的各种数据方面已变得很流行,并且通常用于一种称为 Transformer 的 DNN。我们将在 Section 2.5 中更详细地讨论 transformers。复合层的另一个例子是上卷积层 [60],它在输入上执行零插入(解池),然后应用卷积层13。上卷积层通常用于处理图像数据的 DNN,例如通用对抗网络 (GAN) 和自动编码器 (AE)。我们将在第 2.5 节中更详细地讨论 GAN 和 AE。

11最近有报道称,批量归一化之所以能够实现更快、更稳定的训练,是因为它使优化环境更平滑,从而使梯度的行为更具预测性和稳定性[67];这与普遍认为批量归一化稳定了 Importing 跨层的分布形成鲜明对比。尽管如此,批量归一化仍然广泛用于训练,因此在推理过程中需要支持。
12在训练期间,参数σ和μ是按批次计算的,而γ和β则根据梯度按批次更新;因此,针对不同的批量大小进行训练将导致不同的σ和μ参数,这可能会影响准确性。请注意,每个通道都有自己的σ、μ、γ和β参数集。在推理过程中,所有参数都是固定的,其中σ和μ是从整个训练集计算得出的。为避免对整个训练集执行额外的传递以计算σ和μ,并且通常实现为每个批次的运行平均值,并在训练期间计算。
13注意具有不同类型上采样的上 CONV 层变体包括反卷积层、亚像素或分数卷积层、转置卷积层和后向卷积层 [69]。

在这里插入图片描述

2.4 卷积神经网络 (CNN)

CNN 是由多个 CONV 层组成的 DNN 的常见形式,如图 2.7 所示。在这样的网络中,每一层都会生成一个连续更高级别的抽象输入数据,称为特征图 (fmap),它保留了重要但唯一的信息。现代 CNN 能够通过采用非常深的层层次结构来实现卓越的性能。CNN 广泛用于各种应用,包括图像理解 [7]、语音识别 [70]、游戏 [10]、机器人技术 [42] 等。本书将重点介绍它在图像处理中的应用,特别是图像分类任务 [7]。用于图像分类的现代 CNN 模型通常具有 5 [7] 到超过 1,000 [24] 个 CONV 层。出于分类目的,通常在 CONV 层之后应用少量的 FC 层,例如 1 到 3 层。

2.4.1 流行的 CNN 模型

在过去的二十年里,已经开发了许多 CNN 模型。这些模型中的每一个在层数、层类型、层形状(即滤波器大小、通道和滤波器数)以及层之间的连接方面都不同。了解这些变化和趋势对于在任何高效的 DNN 加速器中引入正确的灵活性非常重要,如第 3 章所述。
在本节中,我们将概述各种流行的 CNN,例如 LeNet [71] 以及参加和/或赢得 ImageNet 挑战赛 [23] 的 CNN,如图 1.8 所示,其大多数具有预训练权重的模型都可以公开下载;表 2.2 总结了 CNN 模型。报告了 Top-5 错误的两个结果。在第一行中,通过使用图像中的多个裁剪和多个训练模型的集合(即,CNN 需要多次运行)来提高准确性;这些结果被用于参加 ImageNet 挑战赛。第二行报告仅使用单个裁剪时的准确性(即 CNN 只运行一次),这与可能在实时和/或能源受限的应用程序中部署的内容更一致。

LeNet [20] 是 1989 年引入的首批 CNN 方法之一。它专为在 28 28 大小的灰度图像中进行数字分类的任务而设计。最著名的版本是 LeNet-5,它包含两个 CONV 层,然后是两个 FC 层 [71]。每个 CONV 层使用大小为 5 到 5 的滤波器(每个滤波器 1 个通道),第一层有 6 个滤波器,第二层有 16 个滤波器。每次卷积后使用 2 2 的平均池化,并使用 sigmoid 进行非线性。LeNet 总共需要 60k 个权重和 341k 个乘法累加 (MAC)每张图像。LeNet 使 CNN 取得了第一次商业成功,因为它被部署在 ATM 中以识别支票存款的数字。

AlexNet [7] 是 2012 年第一个赢得 ImageNet 挑战赛的 CNN。它由 5 个 CONV 层和 3 个 FC 层组成。在每个 CONV 层中,有 96 到 384 个滤波器,滤波器大小范围为 3 3 到 11 11,每个层有 3 到 256 个通道。在第一层中,滤镜的三个通道对应于输入图像的红色、绿色和蓝色分量。每层都使用 ReLU 非线性。最大池化 3 3 应用于第 1、2 和 5 层的输出。为了减少计算,在网络的第一层使用 stride 4。AlexNet 在最大池化之前在第 1 层和第 2 层引入了 LRN 的使用,尽管 LRN 在后来的 CNN 模型中不再流行。AlexNet 与 LeNet 的一个重要区别是权重的数量要大得多,并且形状因层而异。为了减少第二个 CONV 层中的权重和计算量,第一层的 96 个输出通道被分成两组,第二层的 48 个输入通道,这样第二层中的滤波器只有 48 个通道。这种方法被称为 “分组卷积”,如图 2.8.14 所示。同样,第四层和第五层的权重也被分成两组。AlexNet 总共需要 61M 权重和 724M MAC 来处理一个 227 227 输入图像。
在这里插入图片描述

Overfeat [72] 的架构与 AlexNet 非常相似,有 5 个 CONV 层,然后是 3 个 FC 层。主要区别在于第 3 层(384 到 512)、第 4 层(384 到 1024)和第 5 层(256 到 1024)的滤波器数量增加了,第 2 层没有分成两组,第一个 FC 层只有 3072 个通道而不是 4096 个,输入大小为 231 231 而不是 227 227。因此,权重数量增加到 146M,每个图像的 MAC 数量增加到 2.8G。Overfeat 有两种不同的模型:快速(在此处描述)和准确。ImageNet Challenge 中使用的准确模型比快速模型低 0.65% 的 Top-5 错误率,代价是多 1.9 个 MAC。

VGG-16 [73] 深入到 16 层,由 13 个 CONV 层和 3 个 FC 层组成。为了平衡更深的成本,较大的滤波器(例如 5 5)由多个较小的滤波器(例如 3 3)构建,这些滤波器的重量较少,以实现相同的有效感受野,如图 2.9a 所示。因此,所有 CONV 层都具有相同的过滤器大小,即 3 3。VGG-16 总共需要 138M 权重和 15.5G MAC 来处理一个 224 224 输入图像。VGG 有两种不同的型号:VGG-16(此处描述)和 VGG-19。VGG-19 的前 5 错误率比 VGG-16 低 0.1%,代价是多 1.27 个 MAC。
在这里插入图片描述

GoogLeNet [74] 的 22 层甚至更深入。它引入了一个 inception 模块,如图 2.10 所示,其输入通过多个前馈连接分配到多个并行层。这些并行层包含不同大小的滤波器(即 1 1、3 3、5 5)以及 3 3 最大池化,它们的输出连接在一起用于模块输出。使用多个滤波器大小具有在多个比例下处理输入的效果。为了提升训练速度,GoogLeNet 的设计使得存储用于训练期间反向传播的权重和激活都可以放入 GPU 内存中。为了减少权重的数量,1 1 滤波器被用作“瓶颈”,以减少每个滤波器的通道数 [75],如图 2.11 所示。这 22 层由 3 个 CONV 层组成,然后是 9 个 inceptions 模块(每个模块都有两个 CONV 层深)和一个 FC 层。使用全局平均池化层将 FC 层的数量从 3 个减少到 1 个,该层将 CONV 层中的大型特征图汇总为一个值;全局池将在 Section 9.1.2 中更详细地讨论。自 2014 年推出以来,GoogLeNet(也称为 Inception)有多个版本:v1(此处描述)、v3、15 和 v4。Inception-v3 通过使用更小的 1-D 滤波器来分解卷积,如图 2.9b 所示,以减少 MAC 的数量和权重,以便更深入地达到 42 层。结合批量归一化 [66],v3 的前 5 错误比 v1 低 3% 以上,后者多了 2.5 个 MAC [76]。Inception-v4 使用残差连接 [77],如下一节所述,将误差减少了 0.4%。
在这里插入图片描述
在这里插入图片描述

ResNet [24],也称为残差网络,使用连接到紧邻下一层以外的层的前馈连接(通常称为残差、跳过或身份连接);这些连接使具有许多层(例如,34 层或更多层)的 DNN 是可训练的。它是ImageNet 挑战赛中第一个超过人类准确率的 CNN,Top5 错误率低于 5%。深度网络的挑战之一是训练过程中梯度消失 [78];随着误差在网络中反向传播,梯度会缩小,这会影响更新非常深网络的早期层中的权重的能力。ResNet 引入了一个“快捷方式”模块,其中包含一个身份连接,以便可以跳过权重层(即 CONV 层),如图 2.12 所示。快捷模块不是学习权重层 F .x/ 的函数,而是学习残差映射 (F .x/ D H.x/ x)。最初,F .x/ 为零,并采用身份连接;然后在训练过程中逐渐使用通过 Weight 层的实际前向连接。ResNet 还使用使用 1 1 个过滤器的“瓶颈”方法来减少权重的数量。结果,快捷模块中的两个层被三个层(1 1、3 3、1 1)取代,其中第一个 1 1 层减少了激活次数,从而减少了 3 3 层中的权重,最后一个 1x1 层存储了第三层输出中的激活数。ResNet-50 由 1 个 CONV 层、16 个快捷层(每个层有 3 个 CONV 层深)和 1 个 FC 层组成;它需要每个图像 25.5M 权重和 3.9G MAC。ResNet 有多种版本,具有多个深度(例如,无瓶颈:18、34;有瓶颈:50、101、152)。具有 152 层的 ResNet 是需要 11.3G MAC 和 60M 权重的 ImageNet 挑战赛的获胜者。与 ResNet-50 相比,它将前 5 个误差降低了约 1%,代价是多了 2.9 个 MAC 和 2.5 个权重。

在这里插入图片描述
在表 2.2 所示的流行 CNN 中可以观察到几种趋势。增加网络深度往往会提供更高的准确性。控制权重的数量,更深的网络可以支持更广泛的非线性函数,这些函数更具辨别力,并且在学习的表示中提供了更多层次的层次结构 [24, 73, 74, 79]。过滤器形状的数量在各层之间不断变化,因此灵活性仍然很重要。此外,大部分计算都放在 CONV 层而不是 FC 层上。此外,FC 层中的权重数量减少了,并且在最近的网络(自 GoogLeNet 以来)中,CONV 层在权重方面也占主导地位。因此,针对 CNN 的硬件实现的重点应该放在解决 CONV 层的效率上,这在许多领域中越来越重要。

自 ResNet 以来,已经提出了其他几个值得注意的网络来提高准确性。DenseNet [84] 通过从多个先前层添加 skip 连接扩展了 skip 连接的概念来增强特征图传播和特征重用。这个概念通常称为特征聚合,并继续被广泛探索。WideNet [85] 建议增加网络的宽度(即过滤器的数量)而不是深度,这还有一个额外的好处,即增加宽度比增加深度更有利于并行。ResNeXt [86] 提议增加卷积组的数量(称为基数)而不是网络的深度和宽度,并被用作 2017 年 ImageNet 获胜作品的一部分。最后,EfficientNet [87] 提议统一缩放所有维度,包括深度、宽度和分辨率,而不是专注于单个维度,因为不同维度之间存在相互作用(例如,为了支持更高的输入图像分辨率,DNN 需要更高的深度来增加感受野,需要更高的宽度来捕获更细粒度的模式)。WideNet、ResNeXt 和 EfficientNet 表明,除了增加深度之外,还存在提高精度的方法,因此突出表明,关于层形状、层数和精度之间的关系,还有很多需要探索和理解的地方。

2.5 其他 DNN

除了 CNN 之外,还有其他类型的 DNN,包括递归神经网络 (RNN) [88, 89]、变压器 [68]、自动编码器 (AE) [90] 和通用对抗网络 (GAN) [91]。DNN 的多种类型使它们能够处理各种任务的各种输入。例如,RNN 和 Transformer 通常用于处理长度可变的序列数据(例如,用于语音识别的音频,或用于自然语言处理的文本)。AE 和 GAN 可用于通过组合编码器和解码器网络来生成密集的输出预测。使用 AE 的示例应用包括预测用于深度估计的像素级深度值 [64] 和为语义分割分配像素级类别标签 [92],如图 2.13 所示。使用 GAN 生成与训练集具有相同统计数据的图像的示例应用包括图像合成 [93] 和样式迁移 [94]。
在这里插入图片描述

在这里插入图片描述
虽然它们的应用程序可能与第 2.4 节中描述的 CNN 不同,但许多构建块和原始层是相似的。例如,RNN 和 transformer 严重依赖矩阵乘法,这意味着它们与 FC 层面临类似的挑战(例如,由于缺乏数据重用,它们受到内存限制);因此,许多用于加速 FC 层的技术也可用于加速 RNN 和变压器(例如,第 4 章讨论的平铺、第 8 章讨论的网络修剪等)。同样,用于图像处理的 GAN 和 AE 解码器网络使用上卷积层,这涉及在应用卷积之前使用零插入(解池)对输入特征图进行上采样;因此,许多用于加速 CONV 层的技术也可用于加速用于图像处理的 GAN 和 AE 的解码器网络(例如,第 8 章中讨论的利用输入激活稀疏性)。虽然这些 DNN 的主要计算方面与 CNN 相似,但它们确实经常需要一些其他形式的计算。例如,RNN,特别是长短期记忆网络(LSTM)[95],需要支持元素乘法以及各种非线性函数(sigmoid、tanh),这与通常只使用ReLU的CNN不同。但是,这些作往往不会主导运行时间或能源消耗;它们可以在软件中计算 [96],或者非线性函数可以通过分段线性查找表 [97] 进行近似。对于 GAN 和 AE,需要额外的支持来进行上采样。最后,RNN 具有额外的依赖关系,因为层的输出会反馈给其输入,如图 2.14 所示。例如,时间 t 时层 i 的输入取决于时间 t 时层 i 1 和时间 t 1 处层 i 的输出。这类似于跨层的依赖关系,因为 i 层的输出是 i C 1 的输入。这些依赖关系限制了可以并行处理的 Importing(例如,在同一批次中)。对于有前馈层的DNN,可以同时处理任何 Importing(即批量大于 1);但是,不能同时处理同一 input 的多个层(例如,层 i 和 i+1)。相比之下,如果输入不是顺序依赖的,则 RNN 只能同时处理多个输入;换句话说,RNN 可以同时处理两个单独的序列,但不能处理序列中的多个元素(例如,同一序列的输入 t 和 t+1),而不是同一输入的多个层(类似于前馈网络)。

2.6 DNN 开发资源

使 DNN 快速发展的关键因素之一是研究界和行业提供的开发资源集。这些资源也是开发 DNN 加速器的关键,因为它提供了工作负载的特征并促进了对模型复杂性和准确性权衡的探索。本节将介绍这些资源,以便对该领域感兴趣的人可以快速上手。

2.6.1 框架

为了便于 DNN 开发并支持共享经过训练的网络,已经从各种来源开发了几个深度学习框架。这些开源库包含用于 DNN 的软件库。Caffe 于 2014 年从加州大学伯克利分校提供 [59]。它支持 C、C++、Python 和 MATLAB。Tensorflow [98] 由 Google 于 2015 年发布,支持 C++ 和 Python;它还支持多个 CPU 和 GPU,并且比 Caffe 具有更大的灵活性,计算表示为数据流图来管理 “张量”(多维数组)。另一个流行的框架是 Torch,它由 Facebook 和 NYU 开发,支持 C、C++ 和 Lua;PyTorch [99] 是它的继任者,它是用 Python 构建的。还有其他几个框架,如 Theano、MXNet、CNTK,在 [100] 中进行了描述。还有一些更高级别的库可以在上述框架上运行,以提供更通用的体验和更快的开发。此类库的一个示例是 Keras,它是用 Python 编写的,支持 Tensorflow、CNTK 和 Theano。
此类框架的存在不仅为 DNN 研究人员和应用程序设计人员提供了方便的帮助,而且对于设计高性能或更高效的 DNN 计算引擎也非常宝贵。特别是,由于框架大量使用一组原始作,例如处理 CONV 层,因此它们可以合并使用优化的软件或硬件加速器。此加速对框架用户是透明的。因此,例如,大多数框架都可以使用 Nvidia 的 cuDNN 库在 Nvidia GPU 上快速执行。同样,可以像使用 Caffe [101] 的 Eyeriss 芯片一样实现专用硬件加速器的透明合并。
最后,这些框架是硬件研究人员的宝贵工作负载来源。它们可用于驱动不同工作负载的实验设计、分析不同的工作负载以及探索硬件算法的权衡。
在这里插入图片描述

2.6.2 模型

预训练的 DNN 模型可以从各种网站 [80–83] 下载,用于各种不同的框架。应该注意的是,即使对于相同的 DNN(例如 AlexNet),这些模型的准确性也可能相差约 1% 到 2%,具体取决于模型的训练和测试方式,因此结果并不总是与原始出版物完全匹配。
这些预先训练的模型通常与给定的框架相关联。为了促进不同网络之间的更轻松交换,开放神经网络交换 (ONNX) 已被建立为可互换 DNN 模型的开放生态系统 [102];目前的参与者包括 Amazon、Facebook 和 Microsoft。

2.6.3 用于分类的常用数据集

在比较不同的 DNN 模型时,重要的是要考虑任务的难度。例如,对MNIST数据集[103]中的手写数字进行分类的任务比将一个对象分类为ImageNet数据集[23]所需的1000个类之一要简单得多(图2.15)。预计 DNN 的大小(即权重数量)和 MAC 的数量对于更困难的任务将比更简单的任务更大,因此需要更多的能量并且吞吐量较低。例如,LeNet-5[71] 是为数字分类而设计的,而 AlexNet[7]、VGG-16[73]、GoogLeNet[74] 和 ResNet[24] 是为 1000 类图像分类而设计的。
公开可用的数据集附带了许多 AI 任务,以评估给定 DNN 的准确性。公共数据集对于比较不同方法的准确性非常重要。计算机视觉中最简单和最常见的任务是图像分类,它涉及获得整个图像,并从图像最可能属于的 N 个类别中选择 1 个。没有定位或检测。

MNIST 是 1998 年推出的一种广泛使用的数字分类数据集 [103]。它由 28 个 28 像素的手写数字灰度图像组成。有 10 类(10个数字)以及 60000 张训练图像和 10000 张测试图像。当 MNIST 首次推出时,LeNet-5 能够达到 99.05% 的准确率。从那时起,使用 dropconnect 对神经网络进行正则化 [104],准确率提高到 99.79%。因此,MNIST 现在被认为是一个相当简单的数据集。

CIFAR是一个数据集,由32张32像素的各种物体的彩色图像组成,于2009年发布[105]。CIFAR 是 8000 万个 Tiny Image 数据集的一个子集 [106]。CIFAR-10 由 10 个互斥的类组成。有 50000 张训练图像(每类 5000 张)和 10000 张测试图像(每类 1000 张)。当 CIFAR-10 首次引入时,两层卷积深度置信网络能够在 CIFAR-10 上达到 64.84% 的准确率 [107]。从那时起,使用分数最大池化的准确率提高到 96.53% [108]。

ImageNet 是一个大规模图像数据集,于 2010 年首次推出;该数据集在 2012 年趋于稳定 [23]。它包含 256 256 像素的彩色图像,具有 1000 个类。这些类是使用 WordNet 作为主干来定义的,以处理歧义的单词含义,并将同义词组合到同一个对象类别中。换句话说,ImageNet 类别有一个层次结构。选择 1000 个类,以便在 ImageNet 层次结构中没有重叠。ImageNet 数据集包含许多细粒度类别,包括 120 种不同品种的狗。有 1.3M 训练图像(每个类 732 到 1300 个)、100000 个测试图像(每个类 100 个)和 50000 个验证图像(每个类 50 个)。

ImageNet 挑战赛中图像分类任务的准确性使用两个指标来报告:Top-5 和 Top-1 准确性。16 Top-5 准确性意味着,如果前五个评分类别中的任何一个是正确的类别,则将其计为正确的分类。Top-1 准确性要求得分最高的类别是正确的。2012 年,ImageNet 挑战赛的获胜者 (AlexNet) 能够达到前 5 名的 83.6% 的准确率(大大优于当年第二名未使用 DNN 的 73.8%);它在验证集的前 1 名中取得了 61.9% 的成绩。2019 年,最先进的 DNN 在 Top-5 中的准确率达到 97% 以上,在 Top-1 中的准确率超过 84% [87]。

综上所述,很明显 MNIST 是一个相当简单的数据集,而 ImageNet 是一个更具挑战性的数据集,类的覆盖范围更广。因此,在评估给定 DNN 的准确性方面,重要的是要考虑衡量准确性所依据的数据集。

2.6.4 用于其他任务的数据集

由于最先进的 DNN 在图像分类任务中的准确率优于人类水平的准确率,因此 ImageNet 挑战赛已开始专注于更困难的任务,例如单目标定位和目标检测。对于单对象本地化,必须对目标对象进行本地化和分类(共 1000 个类)。DNN 输出前五个类别和前五个边界框位置。识别图像中但未包含在地面实况中的对象不会受到处罚。对于对象检测,所有图像必须本地化和分类(共 200 个类)。必须标记这些类别中所有对象的边界框。未标记的对象以及重复的检测都会受到惩罚。
除了 ImageNet,还有其他用于计算机视觉任务的常用图像数据集。对于对象检测,有 PASCAL VOC (2005-2012) 数据集,其中包含代表 20 个类(27k 个对象实例,其中 7k 具有详细分割)的 11k 图像 [109]。对于上下文中的对象检测、分割和识别,有 M.S. COCO 数据集,在 328k 图像(91 个对象类别)中具有 2.5M 标记实例 [110];与 ImageNet 相比,COCO 的类别更少,但每个类别的实例更多,这对于精确的 2-D 定位非常有用。COCO 还为每张图像提供了更多标记的实例,这可能有助于获取上下文信息。
最近,甚至更大规模的数据集已经可用。例如,Google 有一个 Open Images 数据集,其中包含超过 9M 张图像 [111],跨越 6000 个类别。还有一个 YouTube 数据集,其中包含 8M 个视频(0.5M 小时的视频),涵盖 4800 个类 [112]。Google 还发布了一个音频数据集,该数据集由 632 个音频事件类和一组 2M 人工标记的 10 秒声音剪辑组成 [113]。随着 DNN 变得更深,需要训练的权重越来越多,这些大型数据集将变得越来越重要。此外,已经表明,准确性会根据训练数据量以对数方式提高 [16].17
毫无疑问,更大的数据集和新域的数据集都将成为分析和探索未来 DNN 引擎效率的重要资源。

17这在 Google 的内部 JFT-300M 数据集上得到了验证,该数据集具有 300M 图像和 18,291 个类别,比 ImageNet 大两个数量级。然而,使用 50 个 K80 GPU 在整个训练集中执行四次迭代需要两个月的时间,这进一步强调了计算是 DNN 研究发展的主要瓶颈之一。

2.6.5 总结

本节中介绍的开发资源使我们能够使用适当的 DNN 模型和数据集评估硬件。特别是,重要的是要认识到困难的任务通常需要更大的模型;例如,LeNet 不适用于 ImageNet 挑战赛。此外,不同的任务需要不同的数据集;例如,自动驾驶汽车需要高清视频,因此在低分辨率 ImageNet 数据集上训练的网络可能不够用。为了满足这些要求,数据集的数量继续快速增长。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com