李飞飞计算机视觉-自用笔记(八)
15 深度学习高效方法与硬件
庞大模型的三大挑战:
大小、速度、能源效率
解决方法:
1、算法优化:
剪枝(pruning):并非神经网络中的所有参数都是有用的,可以通过连接训练减少连接数量,对于网络精度几乎没有降低,同时还可以降低模型复杂度、预防过拟合等。
权值共享(哈弗曼编码、SqueezeNet);
量化;
低秩分解:一个卷积层可以分解为两个不同卷积核的卷积层;
二、三进制网络;
WINOGRAD卷积:一种降低卷积计算算法强度的方法,论文参见《Fast Convolution for CNN》;
2、硬件:
基本思想:最小化内存访问来降低功耗
e.g.:Google TPU;
EIE(Efficient Inference Engine):略过稀疏,共享权值。使用一个查找表(lookup table)来解码一个四位的weight到16bit 的weight。4位的相对index通过地址累加器,得到16位的绝index地址。
3.高效训练算法:
3.1、Parallelization 并行化
idea1:协同权重更新
由一个 master sever来负责梯度更新,其余的sever进行并行的前向计算loss。
idea2:将模型在多核上并行化
将一个输入图像分割成2x2的小格子,全连接就直接分切矩阵。
idea3:并行化训练,尝试不同的超参
3.2、Mixed Precision with FP16 and FP32
idea:在不同的阶段用更适合的精度:
基本没有精度损失,甚至使得精度更优。
3.3、模型蒸馏 Model Distillation
通过信息论的角度,定量分析神经网络的信息容量,因为实验证明,现在的超深的网络(比如ResNet动辄上百层)往往是信息容量过剩的,通过师生网络,可以通过深网络训练一个很小的网络,同时能够使得小网络的性能达到深网络的性能。
师生网络:思想是,使用软化的(形象一点就是 数据上更模糊的)output来训练学生网络:
软化如下(和Batch norm挺像的,基本的变换的思路,即Softmax):
学生网络仅训练了3%的数据,即达到了收敛,精度仅掉了2%。
3.4、DSD : Dense-Sparse-Dense Training
在剪枝的时候看到过,如下图,如果再让它变得Dense,增加它的细节表达能力:
类似画一棵树,先画枝干,然后画树叶。
在不同的网络下,增加了1%-4%的精度。
4.高效训练硬件:
1、GPU (N卡)
Volta架构 优化了Tensor Core。
性能对比 (都是图 快速略过)
2、TPU