本文主要讨论以下几个问题:
- DNN设计关键考虑因素
- 对比不同DNN硬件的性能
- 理解不同架构和平台间的折中
- 评估不同DNN设计程序的处理效率
- 了解最近的趋势
DNN(Deep Neural Network)背景
各种概念之间的关系可以用下图1来表示。其中类脑计算中又有两个分支。一个是spiking,以微软的TrueNorth芯片为代表,是模仿人脑的工作模式,打破了现有的冯诺依曼结构的新的计算结构。另一种是神经网络,其中包含了深度学习。这也就是本文讨论的重点。
DNN概述
在DNN中,主要有以下几种计算:
(1)卷积
DNN的卷积主要如图2。
(2)非线性
一般常用的非线性为ReLU。一些常见的非线性函数如图3所示。
(3)池化
池化层可以减少网络中参数的个数。池化的方法如图4所示。
(4)归一化
归一化用来控制输入的分布,这样可以提高训练的速度和准确度。最常用的是batch normalization,其公式如下。
其中σ和μ是输入的概率分布,参数γ和β是需要训练的。
DNN模型
- LeNet
这是第一个流行的DNN。 - AlexNet
- Overfeat
- VGG-16
- GoogLeNet
- ResNet
各模型的比较如下图5。
其中表现出来的趋势为:
- 网络的深度不断增加。
- 权重的数量受到控制。
- filter的大小根据不同的层而改变,灵活性要求更高。
- 大部分的计算资源用于卷积。
DNN数据集
- MNIST
手写数字数据集 - DIFAR
32*32彩色图片 - ImageNet
1000多类的256*256彩色图片
DNN硬件
1. 加速计算方法
对于全连接,相乘卷积用矩阵相乘来表示。对于卷积计算,可以用Teaplitz matrix来表示。分别如图6和图7所示。
图7中,如果是传统的卷积方式,其中会存在很多重复的存储,化为Teaplitz矩阵(对角线常数)后便可直接进行矩阵运算。
卷积可以用FFT来做,但是它的益处会随着filter大小的减小而减小。减小计算量但是加大存储量。
加速的低功耗的数据流
在DNN中,主要是片外DRAM与片内的数据传输需要消耗大量的能量,因而,可以通过建立多级缓存的方式来节能。其中会有很多数据复用的地方。如图8所示。
近数据处理器
DRAM
为了减少功耗,提高数据的传输带宽,可以考虑将存储器做成3维,这样就有了Micron’s Hyper Memory Cube(HMC)
SRAM
可以考虑让存储器既可以存储数据又可以进行乘法的运算,这样就可以节省数据流的功耗,又可以提高计算速度。 如图9(a)所示。
非易失性存储器
思路记录
对于卷积神经网络加速,主要有以下几种思路:
- 数据流入手,数据复用
WS
OS
NLR
RS - 存储器入手,减少计算
- 减少精度
位宽限制 quantization3种
浮点数,定点数 - 模型处理
二值化等 - 压缩
权重编码
稀疏性
剪枝