神经网络:从基本概念到新的可能性

hexianhao 2017-04-19

机器之心报道


生物学中的神经网络是互相交换信息的相互连接的神经元。这个想法现在已经适用于机器学习的世界,并被称为人工神经网络(ANN)。深度学习(deep learning)是一个经常出现的词,是指几层连续放置的人工神经网络。

人工神经网络(ANN)包含了许多可以学习类似人脑的认知能力的模型。其它算法不能处理的极其复杂的任务(如图像识别),神经网络就可以办到。然而,就像人类的大脑,它需要很长时间来训练模型,且需要很多的能量(想一想我们为了保持大脑的工作,我们吃了多少东西)。


目前,包括计算机视觉、语音识别和机器人在内的诸多人工智能应用已广泛使用了深度神经网络(deep neural networks,DNN)。DNN 在很多人工智能任务之中表现出了当前最佳的准确度,但同时也存在着计算复杂度高的问题。因此,那些能帮助 DNN 高效处理并提升效率和吞吐量,同时又无损于表现准确度或不会增加硬件成本的技术是在人工智能系统之中广泛部署 DNN 的关键。

本文旨在提供一个关于实现 DNN 的有效处理(efficient processing)的目标的最新进展的全面性教程和调查。特别地,本文还给出了一个 DNN 综述——讨论了支持 DNN 的多种平台和架构,并强调了最新的有效处理的技术的关键趋势,这些技术或者只是通过改善硬件设计或者同时改善硬件设计和网络算法以降低 DNN 计算成本。


I. 导语

深度神经网络(DNN)目前是许多人工智能应用的基础 [1]。由于 DNN 在语音识别 [2] 和图像识别 [3] 上的突破性应用,使用 DNN 的应用量有了爆炸性的增长。这些 DNN 被部署到了从自动驾驶汽车 [4]、癌症检测 [5] 到复杂游戏 [6] 等各种应用中。在这许多领域中,DNN 能够超越人类的准确率。而 DNN 的出众表现源于它能使用统计学习方法从原始感官数据中提取高层特征,在大量的数据中获得输入空间的有效表征。这与之前使用手动提取特征或专家设计规则的方法不同。

然而 DNN 获得出众准确率的代价是高计算复杂性成本。虽然通用计算引擎(尤其是 GPU),已经成为许多 DNN 处理的砥柱,但提供对 DNN 计算更专门化的加速方法也越来越热门。本文的目标是提供对 DNN、理解 DNN 行为的各种工具、有效加速计算的各项技术的概述。


II. 深度神经网络(DNN)的背景

在这一部分,我们将描述深度神经网络(DNN)在人工智能这个大框架下的位置,以及一些促进其发展的的概念。我们还将对其主要的发展历程和现阶段主要的应用领域做一个简单的介绍。

A. 人工智能和深度神经网络

根据 John McCarthy 的论述,深度神经网络(也称为深度学习)是人工智能(AI)大框架下的一部分。而人工智能(AI)是利用科学与工程学创造具有如同人类那样能实现目标的智能机器。人工智能这个词就是这位计算机科学家在上个世纪 50 年代所创造出的。深度学习和整个人工智能的关系就如下图所示。

神经网络:从基本概念到新的可能性

图 1:深度学习在人工智能大框架下的位置

B. 神经网络和深度神经网络(DNN)

神经网络从神经元涉及对输入值求加权和进行计算这一概念而获得灵感。这些加权和对应于突触完成值的缩放以及其和神经元值间的组合。此外,因为计算与神经元级联相关联,并且其为简单线性代数的运算,所以神经元不会仅仅输出加权和。相反,在神经元中有函数执行组合输入的运算,而这种函数应该是非线性运算。在非线性运算的过程中,神经元只有在输入超过一定阀值时才生成输出。因此通过类比,神经网络将非线性函数运用到输入值的加权和中。我们等一下会描述一些非线性函数。

神经网络:从基本概念到新的可能性

图 2:简单的神经网络例子。(a) 神经元和突触,(b) 为每一层计算加权和,(c) 前向和反向(循环)网络,(d) 全连接与稀疏

(a)中展示了计算神经网络的示意图。图的前端是输入层,该层会接受输入数据值。这些数据值前向传播到神经网络中间层的神经元中,中间层也常称为神经网络的隐藏层。一个或多个隐藏层的加权和最终前向传播到输出层,该输出层会最终向用户呈现神经网络的输出结果。为了将脑启发的术语和神经网络相匹配,神经元的输出通常称为激活(activation),并且突触如(a)所示通常称为权重(weight)。

神经网络:从基本概念到新的可能性

在上方表达式中,W_ij 代表着权重、x_i 为输入激活、y_i 是输出激活,而 f(·) 就代表着在 III-2 中描述的非线性激活函数。

在神经网络的领域内,有一门称为深度学习的研究。普通神经网络基本上层级不会很多,而在深度学习里,神经网络的层级数量十分巨大,现如今基本上神经网络可以达到 5 到 1000 多层。

C. 推理 vs 训练

这一节中,如图 4 所示,我们将把图像分类用作训练 DNN 的一个强劲的实例。评估 DNN 时,我们输入一个图像,DNN 为每一个对象分类输出分值向量;分值最高的分类将成为图像中最有可能的对象分类。训练 DNN 的总体目标是决定如何设置权重以最大化正确分类(来自标注的训练数据)的分值并最小化其他不正确分类的分值。理想的正确分值与 DNN 基于其当前权重计算的分值之间的差被称为损失值(L)。因此训练 DNN 的目标是找到一组权重以最小化大型数据集中的平均损失值。

神经网络:从基本概念到新的可能性

图 4:图像分类任务

D. 开发历史

  • 1940 年代 - 神经网络被提出

  • 1960 年代 - 深度神经网络被提出

  • 1989 年 - 识别数字的神经网(LeNet)出现

  • 1990 年代 - 浅层神经网硬件出现(Intel ETANN)

  • 2011 年 - DNN 语音识别取得突破性进展(Microsoft)

  • 2012 年 - 用于视觉的 DNN 开始替代人工放大(AlexNet)

  • 2014 年+ - DNN 加速器研究兴起(Neuflow、DianNao 等等)

图 5 的表柱是这些年来 ImageNet 竞赛中每届冠军的表现。你可以看到最初算法精确度的错误率在 25% 或更多。2012 年,多伦多大学的 AlexNet 团队通过 GPU 来提升其计算能力并采用深度神经网络方法,把错误率降低了近 10% [3]。他们的成功带来了深度学习风格的算法的井喷,以及图像识别技术的持续进步。

神经网络:从基本概念到新的可能性

图 5:ImageNet 竞赛 [10] 结果

E. DNN 的应用

从多媒体到医疗,DNN 对很多应用大有裨益。在这一节中,我们将展示 DNN 正在发挥影响的领域,并凸显 DNN 有望在未来发挥作用的新兴领域。

  • 图像和视频

  • 语音和语言

  • 医疗

  • 游戏

  • 机器人

F. 嵌入 vs 云

执行 DNN 推断处理的嵌入平台有着严格的能耗、计算和存储成本限制。当 DNN 推断在云中执行时,语音识别等应用经常有强烈的延迟需求。因此,在本文中,我们将聚焦于推断处理而不是训练的计算需求。


III. 深度神经网络概述

根据应用情况不同,深度神经网络的形态和大小也各异。流行的形态和大小正快速演化以提升模型准确性和效率。所有深度神经网络的输入是一套表征网络将加以分析处理的信息的值。这些值可以是一张图片的像素,或者一段音频的样本振幅或者某系统或者游戏状态的数字化表示。

处理输入的网络有两种主要形式:前馈以及循环(图 2c)。前馈网络中,所有计算都是在前一层输出基础上进行的一系列运作。最终一组运行就是网络的输出,比如,这张图片包括某个特定物体的概率是多少,某段音频出现某个单词的概率是多少,或者下一步行动的建议等。在这类深度神经网络中,网络并无记忆,输出也总是与之前网络输入顺序无关。

相反,循环网络(LSTM 是一个很受欢迎的变种)是有内在记忆的,允许长期依存关系影响输出。在这些网络中,一些中间运行生成的值会被存储于网络中,也被用作与处理后一输入有关的其他运算的输入。在这篇文章中,我们关注的是前馈网络,因为到目前为止,少有人关注硬件加速,特别是循环网络的。

深度神经网络也可以是全连接的(FC,也指多层感知器),如图 2(d)最左部分所示。在一个全连接层中,所有输出与所有输入都是相连接的。这需要相当数量的存储和计算空间。谢天谢地,在许多应用中,我们可以移除激活(activations)之间的一些连接,方法就是将权重设置为零而不影响准确性。结果会产生一个稀疏连接层。图 2(d)最右端的层就是一个稀疏连接层。

通过限制对结果有影响的权重数量,我们也可以实现更高效的计算。如果每个输出仅仅是一个固定大小输入窗口的函数,就会出现这类结构化稀疏性。如果这套权重被用于每一个输入计算,就会进一步提高效率。这一权重共享能显著降低权重的存储要求。

通过将计算构建为卷积,一种非常流行的窗口式的权重共享的网络诞生了,如图 6(a) 所示,其仅使用少量临近的激活来计算加权和的输出(即,该过滤器有一个有限的接受域,与输入的距离超过特定值的所有权重都将被设置为 0),而且这一套权重能被每个输入共享来计算(即,滤波器是空间不变的)。这种结构稀疏性的形式正交于源自网络(修改情况如本文部分 VII-B2 所述)的稀疏性。所以,卷积神经网络就是一种受欢迎的深度神经网络形式 [35]。

1) 卷积神经网络(CNN)

神经网络:从基本概念到新的可能性

图 6:卷积的维度。(a) 传统图像处理中的二维卷积,(b) CNN 中的高维卷积

神经网络:从基本概念到新的可能性

图 7:卷积神经网络

神经网络:从基本概念到新的可能性

表 1:CONV/FC 层的形状参数

给定表 I 中的形状参数(shape parameters),卷积层的计算可以定义为:

神经网络:从基本概念到新的可能性

2)非线性(Non-Linearity)

神经网络:从基本概念到新的可能性

图 8:多种形式的非线性激活函数(来自 Caffe Tutorial [43])

3)池化(Pooling)

神经网络:从基本概念到新的可能性

图 9:多种形式的池化(来自 Caffe Tutorial [43])

4)归一化(Normalization)

控制输入在层级中的分布能显著地加快训练速度并提升准确度。因此,输入激活在层级上的分布(σ, µ)需要归一化处理,使其变换为均值为 0、标准差为 1 的分布。在批量归一化(batch normalization)中,归一化值如方程(2)所示将进一步缩放和平移,参数(γ, β)是从训练 [44] 中学到的两个小常数,它们能避免数值问题。

神经网络:从基本概念到新的可能性

A. 流行的 DNN 模型

在过去的二十多年里出现了很多种 DNN 模型。每一种都称其拥有不同的「网络架构」,因为他们依据不同层级数量、滤波器形状(如过滤尺寸,滤波器和通道的数量)、层级类型以及连接方式而划分。正确地理解这些不同的方法和它们发展的趋势对于提高 DNN 引擎的效率至关重要。

其中包括:

  • LeNet [9] 于 1989 年提出,是最早的 CNN 方式之一。其中最为人熟知的是第八版的 LeNet-5,其中包含两个卷积层和两个全连接层 [45]。

  • AlexNet[3] 是第一次赢得 ImageNet 挑战赛的 CNN 网络(2012 年)。它由五个卷积层和三个全连接层组成。

  • Overfeat [46] 与 AlexNet 具有非常相似的架构:五个卷积层和三个全连接层。

  • VGG-16 [47] 更进一步,使用了 16 层的深度神经网络,其中包含 13 个卷积层,3 个全连接层。

  • GoogLeNet[48] 更深,有 22 个层,它首次引入了起始模块(见下图)。

  • ResNet [11],即残差网络(Residual Net),使用残差连接可以让层级更加深入(34 层以上)。该网络第一次让 DNN 在 ImageNet 挑战赛中的表现超过了人类,top-5 错误率在 5% 以下。

神经网络:从基本概念到新的可能性

图 11:GoogleNet[48] 的起始模块(Inception module)通道长度实例,其中每个 CONV 层在 ReLU 层之后(图中未显示)。

神经网络:从基本概念到新的可能性

图 12:ResNet[11] 中的快捷模块。其中最后一个 CONV 层之后的 ReLU 层被快捷连接。

神经网络:从基本概念到新的可能性

表 2:目前流行的 DNN [3, 11, 45, 47, 48] 模型,其中正确率都基于在 ImageNet [10] 中 TOP-5 误差。


神经网络新的可能性

神经网络:从基本概念到新的可能性

当使用合成梯度(Synthetic Gradients /SG)训练神经网络时,可以在不使用更新锁定(update locking)的情况下训练层级或模块,这样就不需要等待误差真值梯度(true error gradient)沿反向传播,也就导致一种退耦合神经接口(Decoupled Neural Interfaces/DNIs)。这种更新解锁的能力(unlocked ability)可以使用异步的方式更新部分神经网络,并且 Jaderberg 等人(2016)也证明了只有局部信息(local information)能以经验为主地工作(work empirically)。然而,很少有证据表明是什么改变了从函数(functional)、表征(representational)和视角学习动力点(learning dynamics point)实施的 DNI 和 SG。在本论文中,我们通过使用前馈网络上的合成梯度(Synthetic Gradients)来研究 DNI,并期望能更好地理解它们的行为和阐明其对优化算法的影响。我们的研究表明 SG 的并入并不会影响神经网络学习系统的表征强度(representational strength),并证明了线性和深线性(deep linear)模型的学习系统收敛性。在实际操作问题上,我们调查了使用合成梯度估计量逼近损失真值(true loss)的机制,并很惊讶地发现其是如何导致完全不同的层级表征。最后,我们还揭示了合成梯度和其他误差逼近技术(error approximation techniques)的关系,并发现可以使用同一的语言进行讨论和比较。

神经网络:从基本概念到新的可能性

在过去几年里,卷积神经网络(CNN)已经为计算机视觉领域带来了革新,推动实现了超越人类准确度的图像分类。但是,我们需要非常高功耗的并行处理器或者通用计算图形处理器(GP-GPU)才能满足运行目前 CNN 的要求。最近在为系统级芯片集成(system-on-chip integration)的 CNN 加速器上的发展已经实现了显著的功耗降低。不幸的是,即便是这些经过高度优化的设备,其包络功率(power envelope)也因超过了移动设备和深层嵌入式应用从而面临因 CNN weight I/O 和 storage 导致的硬性限制。这也阻碍了未来在超低功耗物联网端节点中采用 CNN 来对近传感器(near-sensor)的分析工作。最近在算法和理论中的进展使具有竞争力的分类准确度成为可能——即便当在训练中限制 CNN 使其使用二值权重(+1/-1)来计算也没问题。通过去除对大量乘法运算的需求和减少 I/O 带宽与存储,这些新发现为我们带来了在运算核心中进行重要优化的良机。本文中,我们提出了一种为二值 CNN 优化过的加速器,它在仅 1.33MGE(Million Gate Equivalent,百万级等效门)或 0.19 平方毫米的核心区域上在 1.2 V 的条件下实现了 1510 GOp/s 的速度,而且在 0.6 V 条件下使用 UMC 65 nm 技术时仅有 895 uW 的功率耗散。我们的加速器在能量效率和尺寸效率上的表现都显著超越了当前最佳水平,分别在 0.6 V 和 1.2 V 的条件下实现了 61.2 TOp/s/W 和 1135 GOp/s/MGE 的表现。

相关推荐