图 8:多种形式的非线性激活函数(来自 Caffe Tutorial [43])
3. 池化(Pooling)
图 9:多种形式的池化(来自 Caffe Tutorial [43]) 4. 归一化(Normalization)
控制输入在层级中的分布能显著地加快训练速度并提升准确度。因此,输入激活在层级上的分布(σ, μ)需要归一化处理,使其变换为均值为 0、标准差为 1 的分布。在批量归一化(batch normalization)中,归一化值如方程(2)所示将进一步缩放和平移,参数(γ, β)是从训练 [44] 中学到的两个小常数,它们能避免数值问题。
(1) 流行的 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 误差。
四、DNN 开发资源
DNN 得以快速发展的一个关键因素是研究社区与产业界使得一系列开发资源变得可用。这些资源对 DNN 加速器的开发也很关键,提供工作负载的特性、在模型复杂性和准确率上促进权衡性的探索。这一章节将描述了对此领域感兴趣的人能快速上手的一些资源。
1. 框架(Frameworks)
为了 DNN 开发的简便以及让训练网络可共享,不同的团队开发出了不同的深度学习框架。这些开源库包含了面向 DNN 的软件库。Caffe 在 2014 年由 UC 伯克利大学开源,它支持 C、C++、Python 和 MATLAB。TensorFlow 由谷歌团队 2015 年开源,支持 C++和 Python,也支持多 CPU 和 GPU。它要比 Caffe 更灵活,计算表达是数据流图到张量管理(多维度阵列)。另一个流行的框架是 Torch,由 Facebook 和 NYU 开发,它支持 C、C++和 Lua。当然,还有其他的一些框架,比如 Theano、MXNet、CNTK,这在 [57] 中有所描述。
这些框架的存在不只是方便了 DNN 研究人员和应用设计者,它们对编程高性能或更高效的 DNN 计算引擎也是无价的。例如,大部分框架可以使用英伟达的 cuDNN 库在 GPU 上进行快速运算。这一加速对框架的使用者而言是很明显的。类似地,硬件加速器这种如此易懂的结合也能在 Eyeriss 这样的芯片上获得 [58]。
最终,这些框架对硬件研究人员来说也是无价的资源(工作负载),它们可被用于设计不同工作负载的实验、性能分析(profiling)不同的工作负载、探索硬件与软件之间的权衡。 2. 模型(Model) 3. 流行的分类数据集