CPT: Efficient Deep Neural Network Training via Cyclic Precision

论文地址
代码地址

论文背景

  • 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.

验证猜想

表 1

  • 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
论文中说, 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
从图5中可以看到, 精度有提升, 计算量下降.

CPT还能提高浮点精度, 当把范围变为8-32后, 训练出的精度要高于baseline, +0.8~0.9%左右

与其他方法对比

表3
与其他方法相比, 精度提升不多, 不过计算消耗减少了挺多

不同的精度范围的影响图7

从图7可以看到, CPT结果总是要好一些, 而且能缩小accuracy 的方差.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,我无法确定你具体想要了解什么关于"Cpt VSCode"。但是,我可以为你提供一些关于VSCode的基本介绍和演示。 Visual Studio Code(简称VSCode)是一款由微软开发的免费开源的代码编辑器。它支持多种编程语言,并提供了丰富的功能和插件生态系统,使开发者能够更高效地编写代码。 以下是VSCode的一些常用功能和操作演示: 1. 安装VSCode:前往VSCode官方网站(https://code.visualstudio.com/),根据你的操作系统下载并安装VSCode。 2. 打开文件或文件夹:在VSCode中,你可以通过点击菜单栏的"文件"选项,然后选择"打开文件"或"打开文件夹"来打开你的代码文件或整个项目文件夹。 3. 编辑代码:在VSCode中,你可以直接在编辑器中编写代码。VSCode提供了代码高亮、自动补全、代码片段等功能,以提高编码效率。 4. 调试代码:VSCode内置了强大的调试功能,你可以通过设置断点、观察变量值等方式来调试你的代码。 5. 使用插件:VSCode拥有丰富的插件生态系统,你可以根据自己的需求安装各种插件来扩展VSCode的功能。你可以通过点击菜单栏的"扩展"选项来搜索、安装和管理插件。 6. 版本控制:VSCode集成了Git版本控制工具,你可以在VSCode中进行代码的版本控制操作,如提交代码、查看提交历史等。 希望以上介绍和演示对你有所帮助。如果你有任何进一步的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值