目录
S15.1Algorithms for Efficient Inference
S15.2Hardware for Efficient Inference
S15.3Algorithms for Efficient Training
S15.4Hardware for Efficient Training
S15.0前言
深度学习正在改变我们的生活,例如自动驾驶,机器翻译,AlphaGo,智能机器人等。目前深度学习的趋势是为了实现更高的准确率,学习模型变得越来越大。大型深度模型就遇到了以下挑战:
- 模型大小:深度模型越来越庞大,很难应用到手机设置上。并且要通过无线来更新模型。
- 速度:对于图像分类任务来说,准确率越来越高,但模型的训练时间也来越长。
- 能效:对于AlphaGo,每一局游戏,会花费3000美元的电费;对于手机,消耗电池;对于数据中心,会增加TCO。越大的模型,会有更大的内存占用,就会耗费更多的能量。
本节将会通过软件硬件的共同设计来改进深度学习的效率。共分为4个部分:算法-推断;硬件-推断;算法-训练;硬件-训练。
S15.1Algorithms for Efficient Inference
有助于模型进行有效地推断方法有剪枝Pruning,权重共享Weight Sharing,哈夫曼编码,量化Quantization,低秩近似Low Rank Approximation,Binary / Ternary Net和Winograd Transformation。下面对这些方法进行简要描述。
剪枝Pruning:该方法步骤是:训练权重;剪掉连接;再次训练。该方法能在保证模型准确率不降的情况下,显著减少模型的参数,甚至剪枝之后的模型分类等效果更好。相关论文"Deep Visual-Semantic Alignments for Generating Image Descriptions",[Han et al. NIPS’15]。
权重共享Weight Sharing:该方法过程如下图所示,首先对权重进行聚类,然后生成Code Book,接着使用Code Book量化权重,最后重新训练。量化之后,权重从连续值变为离散值。可能之前权重占用32 bit float,量化之后权重占用2 bit unit,这能够减少模型的内存占用。相关论文[Han et al. ICLR’16]
哈夫曼编码:对量化后的离散权重编码,对于频率高的权重,使用更少的bit来表示,对于频率低的权重,使更多的bit来表示。
深度模型压缩:使用剪枝,权重共享和哈夫曼编码能够对深度模型进行压缩,如图所示。能够对模型进行有效压缩。相关论文"SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size"。深度模型压缩方法已经应用导工业上了。
量化Quantization:量化权重和激活值,方法是得到权重和激活值的统计值,选择合适的基点位置进行调整。方法是,首先模型进行训练,然后再量化,接着以float格式进行微调,最后转化为定点格式。相关论文"Going Deeper with Embedded FPGA Platform for Convolutional Neural Network","Trained Ternary Quantization"。
低秩近似Low Rank Approximation:实践证明,可以将一个卷积层拆分成两步卷积。前面一个卷积,后接一个1*1卷积。这像是把一个复杂问题分成两个独立的小问题。下图给出对于卷积层的低矩秩近似过程。在没有破坏准确性的情况下,速度提升到两倍。相关论文"Efficient and Accurate Approximations of Nonlinear Convolutional Networks "。该方法也同样适用于全连接层。相关论文"Tensorizing Neural Networks"。
Binary / Ternary Net:使用2个或3个权重来表示一个神经网络,即使用一个二元权重或者三元权重(权重值只有-1,0,1)。在训练时,使用完整的权重,在推断时,使用三元权重,这样做效率很高,同时使模型变得更小。相关论文"Tensorizing Neural Networks"。
Winograd Transformation:相关论文"Convolution OPTIMIZATION: Winograd","Fast Algorithms for Convolutional Neural Networks"。
S15.2Hardware for Efficient Inference
对于深度学习,进行有效推断的硬件:Eyeriss-MIT-RS Dataflow,DaDiannao-CAS-eDRAM,TPU-Google-8-bit Integer,EIE-Stanford-Compression/Sparsity。这些硬件的共同目标是最小化内存访问从而节省耗能。
S15.3Algorithms for Efficient Training
有助于模型进行有效地训练方法有并行化,混合精度训练,模型精馏和密-疏-密训练。下面对这些方法进行简要描述。
并行化Parallelization:并行化分为数据并行,模型并行(将模型进行分离)等等。数据并行是指并行运行多个训练样本,但这个受批处理大小的限制。模型并行是指在多个处理器上的分割模型,可以按层,按映射区域的Conv层,按输出激活的全连接层。相关论文"High Performance Hardware for Machine Learning"。
混合精度训练Mixed Precision with FP16 and FP32:从32位浮点数到16位浮点数,可以节省4倍的能耗。在训练时,在某些计算使用16位,某些计算使用32位。相关论文"Training with mixed precision"。
模型精馏Model Distillation:使用集成思想,将大型网络GoogleNet,VGG,Resnet作为老师模型,去指导更小的初级的神经网络(学生模型),使它们可以表现出高级网络的效果。
密-疏-密训练(Dense-Sparse-Dense Training,DSD):这是对于深度神经网络来说更好的正则化技术。如下图所示。首先对网络进行剪枝,减少权重数量,但仍然能保持预测精度。接着,复原和重新训练标红的权重,使得模型更强大。就像首先学习树干,然后逐渐增加叶子,全部一起学习。在ImageNet,该方法提高了1%-4%的准确率。相关论文"DSD: Dense-Sparse-Dense Training for Deep Neural Networks"。DSD模型网址https://songhan.github.io/DSD/。
S15.4Hardware for Efficient Training
需要设计硬件来充分利用15.3所提到的算法。处理器的计算量和存储带宽是决定整体性能的两大因素。不管哪个偏低,都会降低性能。还有一个因素是内部通讯。要达到好的性能,这三个因素要达到一定的平衡。训练深度模型的硬件有:
- CPUs:Intel Knights Landing (2016) ,Nvidia PASCAL GP100 (2016)
- GPUs:Nvidia Volta GV100 (2017)
- TPU:Google Cloud TPU
未来:未来将有大量的AI应用,应用于智能社会,智能医疗,物联网设备,智能零售,亚马逊Go,智能家居等许多场景。这对硬件设计提出了很多挑战,包括低延迟,隐私性,便携性和低能耗。不希望电池消耗过快。