1.简单介绍
二值神经网络不是一种新的网络模型,实际上它是一种极致的量化方法——将神经网络的权重和激活量化为1bit。随着神经网络的发展,神经网络的性能越来越高,但是同时,模型的大小也越来越大。对于资源有限,功耗又有要求的边沿设备,多数神经网络模型不适合进行部署,这限制了深度学习的发展。因此出现了许多模型压缩的方法,比如知识蒸馏、剪枝、量化等等。
二值神经网络(BNN)的前身可以追溯到BWN,他只是将神经网络的权值进行二值量化,激活还是浮点的形式,实现了不错的性能。真正意义的二值神经网络(BNN)提出是在2016年Bengio大神的论文,第一次将神经网络的权值和激活同时量化为{-1,+1}。
2.二值神经网络
量化方法
Bengio的论文中提出使用符号函数(sign)进行二值量化,如下图所示。后续的研究都是依次为基础进行的优化。使用符号函数进行二值量化的叫做确定型量化,还有一种二值化方法是随机型量化,但是不利于硬件实现,故一般不采用。

STE
符号函数的梯度处处为0,因此在反向传播中不能作为损失函数,采用直通估计(STE)的方法可以避免这个问题。STE的定义如下:

理论上,二值神经网络可以实现32倍内存存储的减少和提高58倍的推理速度。同时,典型的卷积乘加运算可以简化为XNOR+POPCOUNT的运算,对硬件十分友好。如下图所示:

3.BNN优化方法
BNN的优点十分明显,但是它的缺点也同样突出——精度远远低于全精度网络。因此针对BNN精度急剧下降的问题,出现了一系列的优化方法,这里简要介绍几种经典方法,如下表:

- XNOR-Net:XNOR-Net使用一个比例因子缩小实值与二值之间的误差。
- IR-Net:二值化之前对激活进行分布重塑。二值神经网络对分布十分敏感。 SI-BNN:将二值量化为{0,+1},提高了网络的表现能力。
- ReActNet:使用自适应的量化函数,使二值神经网络的每层可以自适应的学习输入的分布。
- RBNN:添加了一个旋转矩阵,缩小了实值与二值之间的固有角偏差,从而减小量化误差。
- AdaBin:通过将每层激活和权值量化到最优的二值集的方法减小量化误差,核心思想还是分布近似。
&spm=1001.2101.3001.5002&articleId=135268127&d=1&t=3&u=93a363759c6d4569862e740d36b75de5)
1931

被折叠的 条评论
为什么被折叠?



