-
老板:量化INT8又怎么样!还不够小!我把它拿走!AI把模型放在耳机手表里!
-
员工:那我们用二值化网络!!一切都是0和1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
像低比特量化一样,二值化网络的目的是使模型更小,压缩率最高,计算量极低。那么什么是二值呢?二值是指仅使用 1和-1(或0和1)两个值表示权重和激活的神经网络。
与全精度相比(FP32)可以使用表示神经网络的二值化XNOR(逻辑电路中的异或非门)或简单的计数操作(pop Count),取而代之的是极其简单的组合FP32的乘和累加等复杂操作实现了卷积操作,节省了大量的内存和计算,极大地促进了模型在资源有限设备上的部署。
BNN由于压缩比和加速效果极高,是推广以深度神经网络为代表的人工智能模型,在资源和功耗有限的移动设备上应用潜力巨大的技术。
但是,目前BNN模型精度仍低于全精度,无法有效地泛化到更复杂的任务中,这取决于特定的硬件架构和软件框架。但同时,BNN自2016年首次提出以来,ImageNet上只有27%的Top到2020年020年提出ReActNet-C有着71.精度提高4%!
下面来看看BNN在AI系统全栈/AI框架中的一个位置,橙色标签的地方是BNN位置。从图中可以看出,在表达层API需要使用二值化网络模型API接口,然后在中间边和runtime事实上,不大,最重要的是底层需要提供二值化相关算子或二值化推理的专用硬件电路。
1、BNN基本介绍
BNN最初由Yoshua Bengio[1]2016年首次提出,论文称随机梯度下降训练具有二值化权重weight和激活act神经网络模型的参数。
解决二值化权重问题weight在计算梯度传输问题时,提出在训练过程中保持实值(FP32)权重,然后使用一个sign获得二值权重参数的函数。
为FP32,二值化后的值:
其中sign只要输入参数大于或等于0,函数为1,否则为-1:
下面图中上面的是二值化权重和二值化输入的一个3X3卷积操作,二值化操作是平铺卷积核和输入数据的窗口,然后进行XNOR操作,然后进行bit count计数得到卷积结果。
类似于感知量化训练,sign函数在0处不能导,0时导数无法计算梯度,所以论文提出了直接估计 (straight through estimator STE),即梯度传递遇到sign直接跳过函数:
使用直接估计STE之后,可以使用与全精度神经网络相同的梯度下降方法直接训练二值神经网络。权重参数可以用普通的优化器更新。同时,考虑到训练过程中的权重参数没有被切断,权重参数可能总是累积到特别大的值,因此与二值权重的量化误差越来越大。因此,论文在训练过程中增加了权重的截断函数,并将其限制在-1和 1之间,使得训练过程中权重参数和二值权重参数的误差偏差不会太大:
既然对FP32训练过程有嵌入式修改,肯定会导致训练时间更长,最终实验结果的准确性不如FP32这么高有什么用吗?
其实这里翻译翻译最大的功能就是前图,可以1 bit的异或非和pop count操作,替代FP在实际模型部署和推理中,32卷积不仅可以减少32倍的内存参数存储,还可以跑得比马都快!
2、BNN网络结构
近年来,提出了各种二值神经网络方法,从使用预定义函数直接量化权重和输入的简单二值方法,到使用基于各种角度和技术的优化二值方法,包括通过修改网络损失函数来限制权重,通过减少梯度误差来学习离散参数。
北京航空航天大学最新综述文章 Binary Neural Networks: A Survey 对许多二值化网络模型进行了更好的总结,下面ZOMI简单介绍一下,我觉得很精彩。BNN网络模型结构。
3、硬件实现
从二值化网络的流程来看,BNN加速的主要原因是使用XNOR与Pop Count用昂贵的乘法积累代替传统的卷积算法MAC操作。
而通用的x86计算架构基本正确FP计算32个全精度类型数据,优化底层硬件和编译,直接进行BNN通用部署x86计算平台计算平台的收入并不明显,甚至可能不仅没有加速效果,甚至比同样的好FP32网络模型执行缓慢。
分别看下面ARM CPU和FPGA简单分析平台。
BNN事实上,目前重点部署在移动端。BMXNet 来自德国的2017[3]Hasso Plattner Institute的研究员Haojin Yang基于其他开发是基于它的MXNet二值化开源框架。支持使用CuDNN训练并使用二值运算符XNOR和Pop Count做推理。缺点是二值化核心没有经过专门调整,所以在ARM CPU速度性能不突出。
Dabnn 2019[4]由京东AI研究所在汇编基于汇编调优的研究院BNN推理工具。它有效提升了BNN在ARM框架端的推理速度,但该工具不能用于模型训练,需要其他工具。
BMXNet-v2 2019[9],Bethge和Yang等待开源支持Gluon API第二版。该框架的一系列改进大大降低了模型训练的难度,大大降低了模型训练的难度MXNet同步成本。第二版不仅提高了效率,还继续支持模型压缩和二值推理,可以在各种边缘设备上部署模型。
与传统相比CPU,FPGA在硬件架构设计方面很灵活,可以支持bits-wise高效运算,功耗低,专用集成电路对应终极版ASIC更有可比性FPGA更高效、更节能的操作。
目前用FPGA设计AI加速器基本都是Xilinx以设备和开发工具为主,专门为二值化神经网设计了架构FINN,开发者可以使用高层次综合工具(HLS),直接用C语言部署二值化模型FPGA上。
4、总结
虽然BNN在过去的五年里取得了很大的进步,但更大的问题是精度损失仍然是一个头痛,特别是对于大型网络和数据集。主要原因可能包括:
1)还没有SOTA二值化网络模型,不确定什么样的网络结构适合二值化;
即使有梯度估计或类似函数用于二值化,在离散空间中优化二值网络也是一个难题。
此外,随着移动设备的广泛应用,对这些应用程序将有更多的研究,以实现不同硬件上不同任务和模型的部署。例如,耳机触摸分析和点击分析大多是信号分类操作。事实上,它不需要一个大模型。相反,此时,二值化网络可以很好地对信号数据进行高精度分类,以判断是双击停止播放音乐还是拖动放大声音。
最后,对可解释机器学习的研究表明,神经网络推理中存在关键路径,不同的网络结构遵循不同的模式。因此,根据层的重要性设计混合精度策略,设计友好的二级神经网络信息流的新网络结构也具有重要意义。
参考文献:
[1] Courbariaux, Matthieu, et al. "Binarized neural networks: Training deep neural networks with weights and activations constrained to 1 or-1." arXiv preprint arXiv:1602.02830 (2016).
[2] Qin, Haotong, et al. "Binary neural networks: A survey." Pattern Recognition 105 (2020): 107281.
[3] Yang, Haojin, et al. "Bmxnet: An open-source binary neural network implementation based on mxnet." Proceedings of the 25th ACM international conference on Multimedia. 2017.
[4] Zhang, Jianhao, et al. "dabnn: A super fast inference framework for binary neural networks on arm devices." Proceedings of the 27th ACM international conference on multimedia. 2019.
[5]https://zhuanlan.zhihu.com/p/270184068
MindSpore官方资料
GitHub:https://github.com/mindspore-ai/mindpore
Gitee : https : //gitee.com/mindspore/mindspore
官方QQ群 : 486831414