resource:github上备份的包括ipad标注的pdf版本。
作者是旷视的Shuchang Zhou, Yuxin Wu, Zekun Ni, Xinyu Zhou, He Wen和Yuheng Zou,这篇文章也是BNN领域的开创性&代表性作品,但是很奇怪,这个组后面是金盆洗手了吗,怎么不见发其他BNN相关的文章了?
Summary:BNN领域非常具有代表性的作品,提出将模型的参数、激活值、梯度都进行量化(位数不定,根据需要调整),给出了敏感度梯度>激活值>参数的排名(因此需要的位数也是如此排序),因此加速在CPU, FPGA, ASIC和GPU等设备上的推理速度和训练速度(没想清楚,在FPGA上训练是怎么回事…真会有这样的需求吗?)。但是DoReFa给出的方案非常简单粗暴,所以影响也比较深?
rating:3.8/5.0
comprehension:4.0/5.0
文章的贡献有:
这里指出参数和激活值的量化是确定量化,梯度的量化是随机量化。
这节讲的是低比特乘法?对于两个定点数\(\Bbb{x}= \sum_{m=0}^{M-1}c_m(\Bbb{x})2^m\)和\(\Bbb{y}= \sum_{k=0}^{K-1}c_k(\Bbb{y})2^k\),那么\(\Bbb{x}\)和\(\Bbb{y}\)之间的点乘积可以用下式计算:\(\Bbb{x} \cdot \Bbb{y} = \sum_{m=0}^{M-1}\sum_{k=0}^{K-1}2^{m+k}bitcount[and(c_m(\Bbb{x}), c_k(\Bbb{y}))]\),计算的时间和\(\Bbb{x}\)与\(\Bbb{y}\)的位宽相关。
这里的forward形式(low-bit quantization)有点没见过:
量化之后的比特串就按照上面的式子计算,再按情况scaling。
However, the channel-wise scaling factors will make it impossible to exploit bit convolution kernels when computing the convolution between gradients and the weights during back propagation
),所以本文对所有filter统一采用常数进行scaling(对所有权重都是如此):在量化前使用tanh将范围限制到[-1, +1],式中的最大值是一层中所有权重的最大值(这里有点懵,这说明每层中参数必有能取到最大值的吗?)
式中最大值是在除batch轴之外的轴上进行的(也就是每个batch会有一个最大值)。
需要引入一个随机噪声(作者声称这个对性能比较重要)\(N(k)=\frac{\sigma}{2^k-1}\),但是加的位置有点奇怪,直接塞到量化前的数值里去了(可以理解好吧,不然不就不是定点值了233):
梯度的量化只在反传的时候进行(我寻思正向传播的时候也妹有啊…/有其他要量化的东西):
算法简单版如下所示:
第一层最后一层不量化,但是最后一层的梯度有歧义,Nevertheless, the gradients back-propagated from the final FC layer are properly quantized
.
合并方法:
结论:
结论: