Skip to main content

二值 二进制 Binary 神经网络算法

背景

  1. FPGA的基本单元是LUT(查找表),如果把LUT看成一种逻辑运算单元

    1. 查找表的真值表可以表示静态权重
    2. 查找表的部份输入表示动态权重
  2. FPGA的可重构特性,相对于AI处理器
    1. 可以把部份或者全部的动态权重(操作数)固化成静态的真值表,大大提高PPA
    2. 不同的模型和参数,可以通过重新配置FPGA的逻辑单元
    3. 只适合推理,理论上训练的权重不能静态化,PPA优势不大
  3. 把FPGA的LUT作为AI芯片的核心算力单元
    1. 有利于硬件的标准化
  4. 扩展到二进制神经网络,所有的数据都用二进制表示
    1. 最大的特点是,所有数据表达范围都是完整的,没有任何稀疏,效率最高
    2. 不仅限于查找表的计算方法,虽然LUT是很重要的一种二值计算方法

算法

  1. LUT6
    1. 6输入1输出的标准LUT,有64种可能,配置权重有 64bit 
    2. xc7k480t包含 74659 slices,每个slice包含 4 LUT, 8个flip-flop
    3. 如果所有lut真值表都用来存储权重,64bit*74659*4 = 2389088 byte,等效算力 74659*4 / 6 * 2 * 0.5G  (GFlops) =  50 TFlops
    4. 可以组合多个LUT形成更高位的LUT单元
  2. 向量的映射
    1. 可以表示任意的运算,包括加乘法
    2. 4个6LUT组成一个8bit lut,8个 LUT8 并联输出8bit,形成一个8输入8输出的映射表
    3. 比线性映射拥有更高的表达空间,但是不可微分,不可梯度下降
  3. 有没有更原生的适合LUT的算法?而不是抽象成数值计算
    1. 直接对LUT组成的网络做梯度下降
      1. there is an analog method that treats inputs and outputs as "probabilities of being 1" rather than 0 or 1, which is called Stochastic computation. Fortunately, Neural Networks handle the likelihood of many objects in training, so this approach is a good match.“多选一+weight”可以表示一个可微的LUT
      2. 使用任何模型来表示LUT都是对LUT的表示能力的浪费,应该使用传统方式进行训练,并且约束模型最后的计算范围尽量覆盖LUT的所有可能(稠密),才能不浪费LUT的算力。
        1. 这种情况和稀疏的模型在GPU上浪费算力一样
        2. 各种精简的乘法电路才能不浪费晶体管,精度越低的乘法器晶体管效率越高
        3. 就算一个传统的AI模型很稠密,其乘法器等也有大量表达空间浪费,所以低精度(FP8)也能达到效果
    2. 非常像存内计算,存储容量小,算力非常高

问题

  • 多进多出的LUT,可以表示任意的f(x)=y,所有的参数都可以用LUT表达
    1. 二值网路表ElementWise类、CNN、GEMM:内置的weight都可以用LUT表所有的AI网络行为?
      1. 既然是多个组合的运算也可以用一个LUT表达
    2. Reduction、normal、softmax:需要进行Reduce操作
    3. 动态GEMM(映射向量到指定的空间):需要外部输入的操作数
  • 计算的表达

    二值数据

    1.  不应该用传统的"乘加”等计算方法来计算
    2. 应该是一堆复杂的逻辑运算,根据逻辑的复杂度,可以用LUT表示,或者直接用逻辑门表示

    基础运算

    1. 加减
    2. 乘除

    AI网络

    1. 多层计算可以整合成一个LUT计算

    问题

    1. 效率
    2. 精度问题

    参考

    1. https://arxiv.org/html/2502.19008v1
    2. 二值神经网络(Binary Neural Networks)最新综述 https://zhuanlan.zhihu.com/p/117285043
    3. https://github.com/ryuz/BinaryBrain
    4. バイナリニューラルネットとハードウェアの関係
      https://www.slideshare.net/kentotajiri/ss-77136469

    5. BinaryConnect: Training Deep Neural Networks with binary weights during propagations
      https://arxiv.org/pdf/1511.00363.pdf

    6. Binarized Neural Networks
      https://arxiv.org/abs/1602.02505

    7. Binarized Neural Networks: Training Deep Neural Networks with Weights and Activations Constrained to +1 or -1
      https://arxiv.org/abs/1602.02830

    8. XNOR-Net: ImageNet Classification Using Binary Convolutional Neural Networks
      https://arxiv.org/abs/1603.05279

    9. Xilinx UltraScale Architecture Configurable Logic Block User Guide
      https://japan.xilinx.com/support/documentation/user_guides/ug574-ultrascale-clb.pdf