高通Data free quantization保姆级讲解

【高通Data free quantization保姆级讲解】(本文首发于公众号 , 没事来逛逛)
前面介绍了一些后训练量化的基本方法 , 从这篇文章开始我们来学习一些高阶操作 。
首先登场的是高通提出的一篇论文:Data-Freeand Bias。之所以介绍它是因为笔者在使用高通的模型量化工具(SNPE) 时感觉效果奇好 , 而和 bias就是该工具中提供的常用算法 , 应该说是比较成熟的量化技术了 , 况且算法本身也有很多巧妙之处 , 值得学习 。
三个关键点
这篇论文发表于 2019 年的 ICCV 会议 , 但在此之前高通就已经将它落地到自己的工具中了 , 算是有一定知名度的论文 。学习这篇论文只要把握住三个点就可以:Data-Free、 、Bias(好的题目可以把握住读者的心) 。
Data-Free
第一点 Data-Free , 也是最不重要的一点 , 我觉得是高通搞出来的一点噱头 。
高通在论文提出了模型量化算法的四重境界 。
第一重 , 不需要数据 , 不需要重训练 , 不 care 模型结构 , 看一眼你的网络就可以自动帮你量化好 。这一重即论文提到的 Data-Free 。但这种一般只对量化起作用 。高通说它的方法是 Data-Free 的 , 意思就是说它对的量化方法非常鲁棒 , 数据都不用就给你量化好了 , 效果还很好 。当然对的量化还是得老老实实用数据来统计数值范围的 。
第二重 , 需要数据 , 但不需要重训练 , 也不 care 模型结构 。这种是目前大部分后训练量化追求的 , 用少量的数据达到最好的量化效果 。这也是对进行量化的最低要求 。但有些论文为了对做更好的量化 , 也会需要一点数据来辅助优化 (高通说:弟弟们 , 我不用 , 我 Data-Free) 。
第三重 , 需要数据 , 也需要重训练 , 但不 care 模型结构 。这种就是量化训练追求的最高境界了 。
第四重 , 需要数据 , 也需要重训练 , 模型结构还不能乱来 。这种指的是最 navie 的量化训练 , 一遇到特殊的结构或者压缩很厉害的模型就 gg 的那种 。
是论文的关键点之一 , 这在另一篇论文 Same, Same But1 ^1 1 中也有所提及 。
 , 顾名思义 , 就是对进行均衡化操作 。为什么要有这个操作呢?因为高通研究人员在剖析的时候发现 , 这个网络用 per-layer 量化精度下降极其严重 , 只有用上 per- 的时候才能挽救一下 。具体实验数据出自的白皮书 。我特意去翻了一下 , 发现还真是:
类的网络在 per-layer 量化下 , 精度直接掉到 0.001 了 , 而同样作为小网络的下降很小 (per-layer 精度一般是比 per- 低一些 , 但这么严重的精度下降 , 我怀疑是不是的程序员跑错代码了) 。
为什么会有这种情况呢?原因在于中用了大量的可分离卷积 ( conv) , 这个卷积的特殊之处是每个都只由一个 conv计算得到 , 换句话说 , 不同之间的数值是相互独立的 。研究人员调查了某一层可分离卷积的数值 , 发现不同的卷积核 , 其数值分布相差非常大:
纵坐标是数值分布 , 横坐标表示不同的卷积核 。你会发现 , 有些的数值分布在 0 附近 , 有些数值范围就非常大 。在这种情况下 , 如果使用 per-layer 量化 , 那这些大范围的就会主导整体的数值分布 , 导致那些数值分布很小的在量化的时候直接压缩没了 。这也是为什么 per- 对可分离卷积效果更好的原因 。