Paper地址:https://arxiv.org/abs/1902.08153

GitHub地址 (PyTorch):GitHub - zhutmost/lsq-net: Unofficial implementation of LSQ-Net, a neural network quantization framework

基本量化设置

  • 计算结点伪量化:
  1. Weight跟Activation都采用Per-tensor量化;
  2. Scaling factor (Paper标记为Step size)作为量化参数,是可训练变量;
  3. 另外,针对TensorRT、MNN等推理引擎,Weight通常执行Per-channel量化,Activation执行Per-tensor量化;为了加快量化训练收敛,Activation的量化参数(可训练)可借助KL量化、或PyTorch observer量化予以初始化,Weight的量化参数则根据absmax方法在线更新;

  • 量化计算公式:

Step-size梯度求解

  • Loss关于step-size的梯度推导:

  1. 基于STE (Straight Through Estimate),直接Bypass掉Round结点的梯度反传(直接近似):

  • 与其他方法梯度函数的对比:
  1. QIL:https://arxiv.org/abs/1808.05779
  2. PACT:https://arxiv.org/abs/1805.06085
  3. 相比较而言,LSQ无论在不同Bin之间的Transition位置、还是量化范围的Clip位置,都有较明显的梯度数值,因而更有利Step-size的参数更新:

  • 梯度的scale:

    • 当量化比特数增加时,step-size会变小,以确保更为精细的量化;而当量化比特数减少时,step-size会变大。为了让step-size的参数更新,能够适应量化比特数的调整,需要将step-size的梯度乘以一个scale系数,例如针对weight:

  • 再奉上TensorFlow版本的LSQ子图构造代码:
def lsq_grad_scale(inputs, scale_var, max_value=127.0):"""Gradient scale computation for LSQ."""tensor_shape = array_ops.shape(inputs)[1:]grad_scale = (math_ops.sqrt(math_ops.cast(math_ops.reduce_prod(tensor_shape), dtypes.float32)* max_value)/ self._grad_scale)grad_scale = array_ops.stop_gradient(grad_scale)# stop gradient backwardscale_div = math_ops.divide(scale_var, grad_scale)scale_diff = array_ops.stop_gradient(scale_var - scale_div)step_size = scale_diff + scale_divreturn step_size

量化训练

  • 伪量化训练时,从预训练模型加载FP32参数,学习率按余弦曲线衰减;通常第一层与最后一层固定为INT8量化,有些实际应用场景中亦可固定为FP32(量化敏感层)。

实验结果

基于可训练Step-size的低比特量化——LSQ: Learned Step-size Quantization相关推荐

  1. 神经网络低比特量化——LSQ

    神经网络低比特量化--LSQ 摘要 方法 量化计算公式 STEP SIZE GRADIENT STEP SIZE GRADIENT SCALE 直通估计器 实验结果 Weight Decay Imag ...

  2. LSQ 的低比特量化之路

    LSQ 是一种有效的低比特量化算法 对于深度神经网络,模型的权重一般都用浮点数表示,如 32-bit 浮点数(float32).推理的时候,如果也采用这种数值类型,会消耗较大的内存空间和计算资源.在不 ...

  3. 低比特量化之DoreFa-Net理论与实践

    本文首发于GiantPandaCV公众号. 1. 前言 这篇文章首先详细介绍了DoreFaNet任意比特量化网络的原理,然后提供了DoreFaNet的Pytorch代码实现解析,并给出将DoreFa- ...

  4. 全网最全-网络模型低比特量化

    CSDN的公式是在是太蛋疼了,如果要看公式的可以上知乎上面看原文 神经网络低比特量化中训练和推理是如何实现的? - ZOMI酱的回答- 知乎 https://www.zhihu.com/questio ...

  5. 神经网络低比特量化——DSQ

    神经网络低比特量化--DSQ 摘要 简介 问题描述 方法 量化表示 二值网络量化表示 多位均匀量化表示 量化函数 渐进函数 可微软量化(DSQ)函数 实验结果 消融实验 二值量化消融实验 均匀量化消融 ...

  6. LSQ:LEARNED STEP SIZE QUANTIZATION论文学习

    论文链接 摘要 在推理时运行低精度操作的深度网络具有功率和空间优势,但需要克服在精度降低时保持高精度的挑战.在这里,我们提出一种方法来训练这样的网络,学习步长量化,达到最高的精度AmageNet数据集 ...

  7. 神经网络压缩之低比特量化的优劣分析

    优势 减小模型尺寸(减少内存占用):如8位整型量化可减少75%的模型大小,更小的模型大小意味着不需要更多的内存 加快推理速度: 1)8 位的访问次数要比 32 位多,在读取 8 位整数时只需要 32 ...

  8. AAAI2020| 超低精度量化BERT,UC伯克利提用二阶信息压缩神经网络

    2020-01-19 10:50:01 机器之心发布 机器之心编辑部 2020 年 2 月 7 日-2 月 12 日,AAAI 2020 将于美国纽约举办.不久之前,大会官方公布了今年的论文收录信息: ...

  9. 基于DeepSpeed训练ChatGPT

    基于DeepSpeed训练ChatGPT 最少只需一张32G GPU,自己也可以训练一个ChatGPT!   最近微软发布了一个基于DeepSpeed的训练优化框架来完成ChatGPT类模型的训练,博 ...

最新文章

  1. webpack 配置 babel
  2. Python 之 matplotlib (六)tick能见度
  3. c语言printf输出格式顶格,c语言printf()输出格式[共6页].pdf
  4. python pandas加速包
  5. macOS的关于屏幕录制的快捷键和操作
  6. OpenGL tessellatedcube棋盘格立方体的实例
  7. python123 ios_Python的iOS自动化打包实例代码
  8. JAVA_HOME系统环境变量
  9. 关于计算机知识竞答的问题,电脑知识竞赛题目有哪些
  10. .rdlc 文件设置方向_在Word里面怎么设置把字竖着打出来?
  11. 实现OO的最后一公里
  12. 与虚拟机和linux的初次接触
  13. ERP员工入职登记(五)
  14. 医学图像预处理(五) 器官与病灶的直方图
  15. python笔记5 - 字符串格式化表达式,while语句嵌套,for循环,break,continue,死循环
  16. 厂房消防宣传设置要求和注意事项
  17. 本原多项式/PRBS编码
  18. 使用hutool进行Unicode转换
  19. Error: `brew cask` is no longer a `brew` command. Use `brew <command> --cask` instead.
  20. java游戏应龙女魃转世_应龙与女魃的爱情故事,应龙在黄泉海边等待女魃数千年...

热门文章

  1. python 将bytes转二进制_Python bytes string相互转换过程解析
  2. javascript进行hex、base64、bytes[]、string的互转
  3. ROS安装使用gazebo
  4. python统计元音总数_在Python中计算i个或多个元音单词的函数?
  5. qcy教你下载你在CSDN上写过的文章——第三篇……
  6. STM32F1_WDG看门狗(独立+窗口)
  7. 根据自身位置的经纬度来查询某一个店铺到你的距离
  8. 学习理发去哪里_【学理发应该去哪里是理发店还是学校】
  9. 基于QWidget的屏幕水印和QImage的背景水印实现
  10. 三菱FX3U——ST编程中的进制