卷积神经网络优化方法
卷积神经网络优化
卷积神经网络在减少计算量,加快训练和/或inference的速度,减少存储空间等方面的优化主要有以下几种方案:
-
改进网络结构
ResNet网络中的bottleneck结构就是这种方法的典型例子。bottleneck首先通过1×1的卷积层压缩通道数,然后使用3×3的卷积层计算,最后又用1×1的卷积层恢复到原来的通道数(ResNet中通道数压缩比为4)。这种方法大量减少了参数数量,提高了准确率。 -
压缩预训练好的网络
(在保证准确率大致不变的情况下,)压缩预训练好的全精度网络模型,达到减少存储空间和加快测试速度的效果。例如 [Deep Compression][DeepCompression] 去除冗余连接,量化参数,并使用Huffman编码进一步压缩参数。 -
量化
理论依据是:高精度的参数在表现优异的网络中起到的作用并不是非常重要。方法是:通过量化函数将全精度的数(激化量,参数,甚至是梯度值)映射到有限的整数空间,如:n-bit,三值化 (−1,0,+1), 二值化 (−1,+1)或 (0,1)。使用量化的网络需要重新训练。随着量化范围(指取值范围)的减少,分类准确率一般会随之降低。一般而言,量化之后网络的需要定制的硬件才能发挥其功效,比较适用于FPGA,ASIC。 -
二值化
一类比较特殊的量化的方式,只有(−1,1) 或 (0,1), 可以通过XNOR/AND/POPCNT等位操作指令来替代乘法指令。一方面,二值化网络只有两种取值,相比与等价全精度网络,减少了32倍所需的存储空间。另一方面,替代乘法操作,可以大幅度减少计算量。当然,二值化网络的准确率与全精度网络相比还有一定的差距。
BinaryNet
Binarized Neural Networks: Training Neural Networks with Weights and Activations Constrained to +1 or −1
BNN的激活量和参数都被二值化了, 反向传播时使用全精度梯度。有确定性(sign()函数)和随机(基于概率)两种二值化方式。
XNOR-Net与BWN
XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
BWN(Binary-Weights-Networks) 仅有参数二值化了,激活量和梯度任然使用全精度。XNOR-Net是BinaryNet的升级版。
主要思想:
- 二值化时增加了缩放因子,同时梯度函数也有相应改变
- XNOR-Net在激活量二值化前增加了BN层
- 第一层与最后一层不进行二值化
QNN
Quantized Neural Networks: Training Neural Networks with Low Precision Weights and Activations
对BNN的简单扩展,量化激活函数,有线性量化与log量化两种,其1-bit量化即为BinaryNet。在正向传播过程中加入了均值为0的噪音。
TWN
Ternary weight networks
主要思想就是三值化参数(激活量与梯度精度),参照BWN使用了缩放因子。由于相同大小的filter,三值化比二值化能蕴含更多的信息,因此相比于BWN准确率有所提高。
TNN
Ternary Neural Networks for Resource-Efficient AI Applications
训练时激活量三值化,参数全精度 –> infernce时,激活量,参数都三值化(不使用任何乘法)。用FPGA和ASIC设计了硬件
TTQ
Trained Ternary Quantization
与TWN类似,只用参数三值化,但是正负缩放因子不同,且可训练,由此提高了准确率。ImageNet-18模型仅有3%的准确率下降。
小结
以下是Efficient Processing of Deep Neural Networks: A Tutorial and Survey 中对2016年中通过减少精度的方法来优化网络的方法总结。其中,准确率是指使用AlexNet模型在ImageNet的分类任务中得到的准确率,*是指第一层和/或最后一层仍是全精度的。