论文背景
-
Yonggan Fu, Han Guo, Xin Yang, Yining Ding & Yingyan Lin
电子与计算机工程系, 莱斯大学 -
Meng Li & Vikas Chandra, Facebook
看起来都是中国人, 不过都是国外的大学和公司
- 期刊/会议: 发表在ICLR 2021
贡献
提出了循环精度训练(CPT),以循环改变两个边界值之间的精度,这两个边界可以在前几轮训练时, 使用简单的精度范围测试来识别.
- 和学习率类似, 可以使用动态精度来训练模型, 大学习率对应低精度帮助更好的泛化以及寻找更优的解, 小学习率对应高精度, 可以提准确率帮助模型收敛. (感觉也有道理, 当精度变低时, 每次调整时的步长也会不一样, 跟lr的作用确实有点类似)
- 提出循环精度训练(Cyclic Precision Training , CPT), 寻找精度和训练效率的trade off. 并且循环精度的边界是可以通过简单的精度范围测试来获取.Precision Range Test (PRT)
- 在分类和语言模型上得到验证, 另外还可视化了loss.
验证猜想
-
Hypothesis 1: DNN’s precision has a similar effect as the learning rate.
作者将训练立案分为三个阶段([0-80, 80-120, 120-160]), 后两个阶段固定使用0.01 和0.001的lr, 并且全都使用full precision, 然后第一阶段使用表里的配置来训练模型, 可以看到, 当学习率比较大的时候, FP的结果比较好, 但是当学习率变小, 反而是低精度的训练的结果反而更好. 这里是说, 初期的低精度的作用类似大的lr, 可以更好的搜索最优解.
这里比较好奇, 为什么不适用full precision + 大LR? -
Hypothesis 2: Dynamic precision helps DNN generalization.
DNN训练先学习低频成分,然后学习高频特征,前者对扰动和噪声更有鲁棒性. 有文章指出一个较大的初始学习率有助于模型记忆更容易拟合和更一般化的模式. 还有论文证明, 循环学习率有助于提升分类网络的accuracy, 所以启发了作者, 可能循环精度训练也能提升精度, 因为精度和LR有类似的地方.
CPT核心思想可以用下图表示
论文中说, CPT不仅能提高精度, 还能减少训练的BitOps(bit operations), 所以说这里的量化其实真正的量化, 而不是像一般的操作那样, 是fake quantize? 如果是fake quantize的话, 理论上应该都是float的操作, 并不会减少bit operations.
Precision Range Test (PRT)
接下来的问题就是如何确定精度的上下界,
- 下届的确定:论文中是从最低的2-bit开始逐渐增加精度, 如果训练时精度差值大于某个阈值, 就可以认为在该精度下起码是部分可收敛的. 感觉就是找一个刚好不会崩掉的一个精度, 因为精度再低的话, 就没法训起来了
- 上届的确定: 上届可以直接采用静态精度时所使用的精度.
实验
benchmark
精度范围从3-8
在FPGA上进行, 使用的是Xilinx development board called ZC706
从图5中可以看到, 精度有提升, 计算量下降.
CPT还能提高浮点精度, 当把范围变为8-32后, 训练出的精度要高于baseline, +0.8~0.9%左右
与其他方法对比
与其他方法相比, 精度提升不多, 不过计算消耗减少了挺多
不同的精度范围的影响
从图7可以看到, CPT结果总是要好一些, 而且能缩小accuracy 的方差.