欢迎大家来到《知识星球》专栏,这里是网络结构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.