Skip to main content
二值 二进制 Binary 神经网络算法
背景
- FPGA的基本单元是LUT(查找表),如果把LUT看成一种逻辑运算单元
- 查找表的真值表可以表示静态权重
- 查找表的部份输入表示动态权重
- FPGA的可重构特性,相对于AI处理器
- 可以把部份或者全部的动态权重(操作数)固化成静态的真值表,大大提高PPA
- 不同的模型和参数,可以通过重新配置FPGA的逻辑单元
- 只适合推理,理论上训练的权重不能静态化,PPA优势不大
- 把FPGA的LUT作为AI芯片的核心算力单元
- 有利于硬件的标准化
- 扩展到二进制神经网络,所有的数据都用二进制表示
- 最大的特点是,所有数据表达范围都是完整的,没有任何稀疏,效率最高
- 不仅限于查找表的计算方法,虽然LUT是很重要的一种二值计算方法
算法
- LUT6
- 6输入1输出的标准LUT,有64种可能,配置权重有 64bit
- xc7k480t包含 74659 slices,每个slice包含 4 LUT, 8个flip-flop
- 如果所有lut真值表都用来存储权重,64bit*74659*4 = 2389088 byte,等效算力 74659*4 / 6 * 2 * 0.5G (GFlops) = 50 TFlops
- 可以组合多个LUT形成更高位的LUT单元
- 向量的映射
- 可以表示任意的运算,包括加乘法
- 4个6LUT组成一个8bit lut,8个 LUT8 并联输出8bit,形成一个8输入8输出的映射表
- 比线性映射拥有更高的表达空间,但是不可微分,不可梯度下降
- 有没有更原生的适合LUT的算法?而不是抽象成数值计算
- 直接对LUT组成的网络做梯度下降
- “多选一+weight”可以表示一个可微的LUT
- 使用任何模型来表示LUT都是对LUT的表示能力的浪费,应该使用传统方式进行训练,并且约束模型最后的计算范围尽量覆盖LUT的所有可能(稠密),才能不浪费LUT的算力。
- 这种情况和稀疏的模型在GPU上浪费算力一样
- 各种精简的乘法电路才能不浪费晶体管,精度越低的乘法器晶体管效率越高
- 就算一个传统的AI模型很稠密,其乘法器等也有大量表达空间浪费,所以低精度(FP8)也能达到效果
- 非常像存内计算,存储容量小,算力非常高
- 多进多出的LUT,可以表示任意的f(x)=y,所有的参数都可以用LUT表达
- ElementWise类、CNN、GEMM:内置的weight都可以用LUT表达
- 多个组合的运算也可以用一个LUT表达
- Reduction、normal、softmax:需要进行Reduce操作
- 动态GEMM(映射向量到指定的空间):需要外部输入的操作数
- 动态LUT
- LUT的查找表是根据另外一个操作数的输入,不同于FPGA是通过配置电路进行操作
计算的表达
二值数据
- 不应该用传统的"乘加”等计算方法来计算
- 传统的网络模型的softmax、normal类计算,是为了弥补GEMM、CNN等固有的缺陷而加入的
- 应该是一堆复杂的逻辑运算,根据逻辑的复杂度,可以用LUT表示,或者直接用逻辑门表示
基础运算目标
- 计算的信息都是带一定的分布空间约束的,只是逻辑电路(LUT)的一部分表示空间
- 需要在电路设计上符合数据的约束,减少浪费
- 传统的硬件按照”加减乘除“作为接口,是数学的定义,虽然能天然的约束到数学算法空间,但是有大量的浪费
- 纯计算,无权重
- 乘法:表示两个信息相互关联,促进的效果
- 加法:表示两个信息积累的效果
- 有一个内部的状态统计累加的结果,按照统计规律输出结果
- 计算两个信息之间的关联性,相似度
- 两个多bit信息之间,两两XOR之后的输出,求算不同层级的AND输出
- 有权重
- 一个信息映射到另外一个信息的维度,linear
- 查找表,输入点数=原始信息点数,表个数=输出点数
- 使用“多选一+weight”表示一个可微的LUT
- 阈值判断,断言输出 => 有权重
计算的信息都是带一定的分布空间约束的,只是逻辑电路(LUT)的一部分表示空间需要在电路设计上符合数据的约束,减少浪费传统的硬件按照”加减乘除“作为接口,是数学的定义,虽然能天然的约束到数学算法空间,但是有大量的浪费
AI网络的计算需求
- 计算两个数据的相似性
- 计算两个数据的相互关联,促进的效果
- 要确定操作数之间要是对等的,可以直接用来计算的,而不是不同的分布空间
- 激活、阈值
- 映射一个数据到另外一个空间(约束信息到另外一个分布)(编码)
- 归一化,shift和scale到相同的空间分布
与量化的差异
- BitNet b1.58 https://mp.weixin.qq.com/s/G9ZbMnBVbeH1m45HY2JIKA
- 量化本质上还是遵循数学的计算定义:加减乘除组合形成的数据变换
问题
- 效率
- 精度问题
参考
- https://arxiv.org/html/2502.19008v1
- 二值神经网络(Binary Neural Networks)最新综述 https://zhuanlan.zhihu.com/p/117285043
- https://github.com/ryuz/BinaryBrain
- バイナリニューラルネットとハードウェアの関係
https://www.slideshare.net/kentotajiri/ss-77136469 - BinaryConnect: Training Deep Neural Networks with binary weights during propagations
https://arxiv.org/pdf/1511.00363.pdf - Binarized Neural Networks
https://arxiv.org/abs/1602.02505 - Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1
https://arxiv.org/abs/1602.02830 - XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
https://arxiv.org/abs/1603.05279 - Xilinx UltraScale Architecture Configurable Logic Block User Guide
https://japan.xilinx.com/support/documentation/user_guides/ug574-ultrascale-clb.pdf