BNN一般情况下指的是Binarized Neural Network。中文全称为二值化神经网络。这并不是一个简单的缩写巧合,而是一个特殊的算法架构下的专业名词。直接拆开来读就是:Binarized修饰NeuralNetwork,限制权重和激活值的数值类型为二值,并不是传统的32位浮点数。

二值化的神经网络主要的操作就是把网络中传递的权重参数以及输出结果强制限制在+1或者-1这两个数值之内。传统的深度神经网络中,一个权重值可以是0.03217这样精确的小数。在BNN中,只有黑白两种可能。通俗地说就是普通的神经网络计算到小数点后面第五位,而BNN只需要判断正负即可。极端的量化策略就是直接把大部分乘法运算给砍掉。

为什么要和乘法过不去呢?由于乘法器在芯片中比加法器消耗更多的电量,并且占据更大的空间。BNN前向传播的计算量已经很小了。两个二值矩阵相乘在硬件底层就变成了同或运算以及位计数。同或门是用来判断两个比特是不是一样的,而计数器则是把得到的结果进行累加。这就是BNN跑得很快的原因所依据的物理学原理。把浮点运算单元全部换成了逻辑门,那么能耗就可以降低一个数量级。

BNN中文全称为二值化神经网络,“二值化”很容易使人误认为就是把权重从32位压缩到1位。实际上不止于此,激活值也一样进行二值化处理。前面一层神经元的输出经过符号函数处理之后,如果结果大于或等于0,则输出+1;反之则输出-1。梯度计算阶段保留实数值来更新,不能用二进制表示,否则模型就无法学习了。

bnn是啥意思 bnn中文全称是什么

在训练BNN的过程中有一个特殊的动作叫做直通估计器。反向传播的时候梯度遇到符号函数这道硬坎就过不去了。直接强行使梯度跳过二值化函数,装作那一层并不存在的样子。这属于近似的范畴,在数学中并不严谨,但是从工程的角度来看却是有效的。模型最后能够收敛,并不是因为它本身的精度比其他结构的全精度网络低几个百分点。

掉精度就是BNN要承担的一个成本。在ImageNet分类任务中,使用ResNet-18进行全精度训练可以达到约70%的准确率,在做二值化处理之后一般会降到大约50%-60%之间。并不是不可以使用,在不同的情况下要做出选择。在边缘端进行手势识别、关键词唤醒等简单的分类任务,准确率达到60%,配合毫秒级延迟以及微瓦级功耗,在云端大模型中难以企及的综合收益,远远大于云端大模型。

FP32、INT8、BNN这三条精度从高到低的道路也意味着计算效率越来越高。INT8量化目前是工业界的主要方式,模型减小了四分之一,精度损失可以忽略不计。BNN的步伐越来越大,模型也变小了三十二倍,但是精度曲线却出现了明显的断崖。研究界一直都在寻找一个平衡点,例如第一层、最后一层全部用全精度表示,中间层则进行二值化处理。

硬件对于BNN的亲和力是天生存在的。在FPGA中实现一个二值卷积乘加单元只需要一个查找表和一个加法器树。在相同的面积上可以堆放更多的并行计算单元,在浮点设计的基础上增加了几十倍。从ASIC的角度来看,存内计算架构直接在SRAM阵列中进行二值逻辑运算,从而将数据搬运开销降低到零。

存储墙的问题,在BNN架构中得到了很大的改善。权重文件大小由原来的几十兆字节减小为几百千字节。单片机片上的几十KB SRAM就可以容纳整个模型。在网络推理过程中并不需要去读取外边的DDR内存,这也是能效比提高的主要原因之一。

BNN变种为XNOR-Net。XNOR-Net是在二值化的前提下加入了缩放因子,并且使用了浮点数α来乘以二值权重,同样地也使用了浮点数β来乘以二值激活。这样做的目的是把精度提高好几圈,而计算量也只是增加了很小的一块。之后的研究又提出了使用多个二值基底来近似全精度权重,并且接近的效果更好。

bnn是啥意思 bnn中文全称是什么

二值化的神经网络虽然没有达到预期的效果,但是它也存在一些问题。收敛的速度比较慢,一般要经过更多的训练轮次才能达到预期的效果。对于学习率调度策略比较敏感,容易出现震荡的情况。不适宜做回归问题,输出自然就离散了。进行图像分割或者超分辨率等像素级别的密集预测效果非常差。

应用场景主要为超低功耗视觉、语音端点检测等。智能耳塞中使用了BNN来判断用户是否说出了唤醒词,它的平均功耗只有不到一毫瓦。工业振动传感器上的BNN可以用来识别轴承故障类型,一块纽扣电池能用两年。

从算法演进脉络的角度来看,BNN属于模型压缩中的一种极端分支。知识蒸馏、剪枝、低秩分解等都是比较温柔的减肥方式。BNN直接改变骨胳结构。它可以解决关于“神经网络最小可以有多大”的问题。

二值化的操作本身不会改变网络的拓扑结构。卷积核大小、层数以及跳接结构仍然保持不变。但是每一个连接起来的流水都是+1或者-1,并不是连续的数值。这就产生了一个反常识的现象:BNN模型在某些情况下会比全精度模型更具有鲁棒性。输入加上一个小的扰动之后,浮点型神经网络的输出可能会出现漂移现象,而二值型神经网络由于符号函数具有很强的非线性特性,所以它的决策边界会更加陡峭。

在进行硬件部署的时候,BNN权重的存储格式为单比特打包。把32个权值塞到一个32位整型变量中去。在推理代码中使用了一条POPCOUNT指令来计算同或结果为1的位数。X86、ARM、RISC-V等指令集都存在相应的人口计数指令,执行周期非常短。

在训练框架的支持方面,PyTorch、TensorFlow都提供了第三方BNN库。主要困难就是自定义梯度反传逻辑。自己编写符号函数的前向和后向传播代码也是比较常见的做法。预训练模型二值化的微调要比从头开始训练的效果好,这表明全精度初始化所给定的起始点对于二值空间收敛来说是至关重要的。

BNN指的是二值化的神经网络,在学术界以及工业界中是没有争议的。金融界有时会出现BNN(Bloomberg News Network)),但是它不属于本文所要讨论的内容。在技术文档中出现BNN字样,则直接指的是二进制权重的神经网络。

二值神经网络与取代浮点模型还有很大的差距。它是受到一定限制之后的最佳结果。在硬件算力非常有限、能源预算几乎耗尽的时候,BNN就是唯一能够奔跑下去的选择。对于毫瓦级的设备来说,有没有智能化之分,这通常就只是一位二进制数带来的差别了。

未来的演进方向可能为混合精度二值化。关键路径保持高精度,冗余连接被大大地压缩了。在类脑计算领域对于二值脉冲时序编码的研究也有可能和BNN硬件实现路线相交。比特级别的计算正把神经网络从云端拉到现实世界中的每一个地方。