深度学习:降低计算代价的三个思路

卷积神经网络存在网络结构复杂,运算量大,速度慢的问题,对于一些实时性要求较高的应用来说具有较大的局限性,那么将大规模学习系统部署到移动设备上该如何解决呢?即在保持深度学习精度同时,如何降低深度学习的计算代价?

1. 网络剪枝

实现方式

TF官方提供了详尽的Keras剪枝教程和Python API文档,以及训练稀疏模型等高级用法的指导。

目的:

找出这些冗余连接并将其移除,使其不再参与网络的前向或后向运算过程。

过程:

深度学习:降低计算代价的三个思路

权重剪枝:

根据连接权重的绝对值大小来定义每条连接的重要程度
(1)后剪枝:训练完一个模型后直接对权重进行剪枝,不需要其他条件。
(2)训练时剪枝:训练迭代时剪枝。

2. 权值量化

量化的思想就是对权重数值进行聚类。统计网络权重和**值的取值范围,找到最大值最小值后进行min-max映射把所有的权重和**映射到到INT8整型范围(-127~128)。
以卷积神经网络为例,参数所分布在的数值空间,通过一定的划分方法,总是可以划分为 k 个类别,因此可以通过存储这k个类别的中心值或者映射值从而压缩网络的存储。

具体步骤:

(1)量化:首先对权重矩阵中的所有权值进行 k 均值聚类,以图示为例,将其聚为四类,不同类用不同颜色表示,聚类结束后同一类的权重值用对应的聚类索引和聚类中心值表示。

(2)反向传播:使用普通的梯度计算方法得到每个权重所对应的梯度,根据之前的权重分组,将同一组的权重梯度值进行累加,得到聚类中心这一轮网络训练中的更新量,聚类中心值减去更新量与学习率的乘积,就得到本轮训练更新后的聚类中心。

权值量化方法可以让权值参数从32位浮点数量化为 8 位的定点数,起到减少网络模型权值的存储空间问题。尽管量化会损失数值精度,从而给网络引入了噪声,但神经网络一般对噪声是不太敏感,只要控制好量化的程度,对高级任务精度影响不大。
深度学习:降低计算代价的三个思路

3. 知识蒸馏

使用一个大型预先训练的网络(即教师网络)来训练一个更小的网络(又名学生网络)。一旦对一个繁琐笨重的网络模型进行了训练,就可以使用另外一种训练(一种蒸馏的方式),将知识从繁琐的模型转移到更适合部署的小模型。

KD算法

使用两个目标函数的加权平均。首先以一个较高的温度 T 去训练复杂模型,然后训练简单模型,在同样的温度 T 下,将复杂模型输出的 logits 与简单模型输出的 logits 求交叉熵,将之作为第一个目标函数。然后在 T 1 的情况下,求简单模型输出的 logits 与正确标签的交叉熵,作为第二的目标函数。最后将两个目标函数加权平均作为简单模型总的目标函数,用于网络的训练。
深度学习:降低计算代价的三个思路

TAS算法

引入多级知识蒸馏,利用一个中等规模的网络(又称教师助理)来弥补学生和教师之间的鸿沟,学生模型只能从助理模型中提取知识。
深度学习:降低计算代价的三个思路