现在深度学习模型的应用仍存在许多瓶颈,模型速度,内存占用,能耗等。

我们的追求就是在保证模型效果的前提之下,保证速度更快,占用内存更少,能耗更少。

接下来介绍几种提升模型效率的方法。

Factorization

low-rank 矩阵分解(2D)

low-rank 张量分解(3D)

canonical polyadic分解(4D)

有效性?

局限性:在原来已训练好的模型上进行改进,减少计算量,但模型体积仍然较大。

Knowledge transfer

distillation network: soft label for teaching.

transfer mid-level information: gram matrix to transfer knowledge。

Pruning

对某些重要性不强的kernel或者fc神经元进行剔除,然后重新进行训练。

通道剪枝:剔除每一层中不太重要的特征通道。可以通过一个缩放因子来决定整个特征图的重要性。

局限性 :减少模型参数量,模型体积小,但是加速不明显,可并行性较低。

Quantization

XNOR-Net

对卷积核和输入进行量化(如二值化),比如浮点数转为0,1,-1这些存储空间小,运算速度快的数值。实现缩小模型体积的同时加快运算。

不过这一 量化过程都是发生在推断的过程,或者说前向传播的过程,但是更新模型参数的时候,反向传播时不能进行二值化,但是在训练时加速不明显,没有对梯度进行量化。

DoReFa-net

对feature map,kernel size,grad进行量化 。但是这三种量化策略不同,不是简单的二值量化。

量化时会导致产生必要的noise,如果在量化之前添加一些noise的话,可能提升性能。

New model design

SqueezeNet

使用 1 * 1 卷积 + skip connection减少模型通道数。

MobileNet

depth-wise / 1* 1 point-wise 卷积减少feature map计算量和参数量。

MobileNet v2:

使用了1*1 conv/ relu6 / dwise residual block

ShuffleNet:

channel shuffle / group conv / dw conv

shuffle 策略??