【知识星球】模型量化从1bit到8bit,二值到三值

欢迎大家来到《知识星球》专栏,这里是网络结构1000变小专题,模型量化是当前工业界的核心技术,我们最近在知识星球更新相关的内容。

作者&编辑 | 言有三

1 1bit量化-二值网络

所以1bit量化就是二值量化,取值为0/1或者1/-1,下面是一个案例。

有三AI知识星球-网络结构1000变

Binarized Neural Networks

Binarized Neural Networks是一个二值量化模型,权重和激活值取值只有1和-1。

作者/编辑 言有三

Binarized Neural Networks是一个典型的二值量化模型,权重和激活值取值只有+1或者-1。

将权重和每层的激活值全部二值化的方法有两种方法。第一种就是符号函数,即x>0,则f(x)=1,x<0,则f(x)=-1。另一种是以一定的概率赋值,类似于Dropout。Binarized Neural Networks就是在激活函数时采用第二种二值化方法,其余都采用符号函数赋值。

针对符号函数的导数并不连续,无法进行梯度传播的问题,该网络方法将sign(x)进行松弛,在-1到1之间采用了线性函数f(x) = max(-1,min(1,x))。

二值网络在训练过程中还是需要保存实数的参数的。在进行权重参数更新时,裁剪超出[-1,1]的部分,保证权重参数始终是[-1,1]之间的实数。在使用参数时,将参数进行二值化。

在MNIST,CIFAR-10等数据集上实验精度稍微有所下降但不明显,模型大学降低为原来的1/32,32bit的float变成1 bit。对于时间代价,作者的优化将速度相对于cublas提升了约3.4倍,而精度不变。类似其他研究不做过多介绍了。

[1] Courbariaux M, Hubara I, Soudry D, et al. Binarized neural networks: Training deep neural networks with weights and activations constrained to+ 1 or-1[J]. arXiv preprint arXiv:1602.02830, 2016.

其他的二值网络还有BinaryConnect,XNOR Net等,会在知识星球中更新。

2 2bit-三值网络

只有1和-1两种值或许不够,如果再加上0就可以构成三值网络,还不增加计算量。

有三AI知识星球-网络结构1000变

Ternary weight networks

Ternary weight networks是一种量化网络,它将权值量化为3阶,即包括1,-1,0三种数值,能取得高达32倍的压缩率,性能接近全精度的网络。

作者/编辑 言有三

Ternary weight networks的原理非常简单,它比二值化网络多了一阶权重,而且这多出来的一阶权重还不增加计算量。

具体的实现是通过最小化全精度权值W和三元权值W_t之间的欧氏距离,如上图,n是卷积核的数量。

实际上我们不直接求解上面的问题获得W_t,而是采用下面的方法进行映射。

即求得一个阈值∆进行分段映射,∆的求取式子如下,具体推导可以见文章:

当然训练的时候只在前向和后向过程中使用量化,但是参数的更新仍然是使用连续的权值,这也是量化网络常用的技巧。

在各大数据集上使用ResNet18网络的性能如上,精度优于二值网络BinaryConnect,XNOR-Net等,略低于全精度网络。

[1] Li F, Zhang B, Liu B. Ternary weight networks[J]. arXiv preprint arXiv:1605.04711, 2016.

3 8bit网络

8bit网络是最常见的量化方法了,有一些成熟的工具可以在训练完成之后做量化,不过我们这里还是关注在训练的时候直接完成这个过程。

有三AI知识星球-网络结构1000变

Integer-Arithmetic Network

本文是一个8 bits量化网络框架,可以在训练的时候直接训练量化模型而无需在训练后进行量化,它在MobileNets等紧凑模型上都取得了很好的效果。

作者/编辑 言有三

整数和浮点数的具体变换公式如下:

其中S,Z都是量化参数,Z就是对应实数0的量化值,S是一个浮点数因子。q就是量化的整数,r是浮点数,对于不同的矩阵,可以使用不同的量化参数,比如权重使用8bit量化,偏置使用32bit量化。

常见的量化网络的方式是,先使用浮点数进行训练,训练完之后再把权重等进行量化,有的再加上微调。作者们认为这种方式在大模型上效果是很好的,但是对于小模型有较大的精度损失。

因为它们采用的方案是在训练中完成量化,前向传播中使用量化,反向时仍然按照全精度的浮点进行计算,具体来说:

(1) 权重在卷积前量化,如果使用了batch normalization则将其与权重合并。

(2) 激活值在即将被后面的神经元使用时再量化,即在激活函数之后。

每一层的具体量化公式如下:

n是量化阶数,对于8bit就是256,a,b就是最大最小值,权重和激活的取值方法略有不同,可以查看原文细节。

结果如下:

与全精度模型以及二值,三值模型比较,精度介于全精度和二值,三值模型之间。

上图展示了在同样的计算时间下,MobileNets量化模型能够取得比浮点型模型更好的结果。

[1] Jacob B, Kligys S, Chen B, et al. Quantization and training of neural networks for efficient integer-arithmetic-only inference[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 2704-2713.

更多量化和剪枝的内容请移步有三AI知识星球。

4 关于有三AI知识星球

有三AI知识星球是我们继公众号之后重点打造的原创知识学习社区,有需要的同学可以阅读下文了解生态。

【杂谈】为什么邀请大家加入硬核知识星球有三AI

(0)

相关推荐