Skip to main content

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

背景

    FPGA的基本单元是LUT(查找表),如果把LUT看成一种逻辑运算单元
      查找表的真值表可以表示静态权重 查找表的部份输入表示动态权重 FPGA的可重构特性,相对于AI处理器
        可以把部份或者全部的动态权重(操作数)固化成静态的真值表,大大提高PPA 不同的模型和参数,可以通过重新配置FPGA的逻辑单元 只适合推理,理论上训练的权重不能静态化,PPA优势不大 把FPGA的LUT作为AI芯片的核心算力单元
          有利于硬件的标准化 扩展到二进制神经网络,所有的数据都用二进制表示
            最大的特点是,所有数据表达范围都是完整的,没有任何稀疏,效率最高 不仅限于查找表的计算方法,虽然LUT是很重要的一种二值计算方法 binary LUT 通过bit量化降低数据量
              使用全集的可能权重,8bit时候需要256bit表示所有可能的输入 避免复杂的数字电路计算,以存储替代计算,降低算力和能耗的需求 结合CIM扩大存储容量,避免权重搬运 直接整形训练、Bitnet训练
                传统的大模型训练使用的是浮点数非常注重精度,两个概念共用一个权重,那么这个权重的分辨间隔是非常关键的,必须有足够的冗余来区分这两个概念,量化后会导致冗余度减小,但是也是在可控的范围内。如果本身模型就是FP8训练的话,那做int4量化也是合理的。 所以如果使用整形进行训练的话,训练和推理的晶体管计算效率应该是最高的

                算法

                  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输出 可以直接通过简单的逻辑运算(异或、与、或)将两个操作数合并成一个,然后再利用LUT做映射 有权重
                                                一个信息映射到另外一个信息的维度,linear
                                                  查找表,输入点数=原始信息点数,表个数=输出点数 使用“多选一+weight”表示一个可微的LUT 阈值判断,断言输出 => 有权重

                                                  AI网络的计算需求

                                                    计算两个数据的相似性 计算两个数据的相互关联,促进的效果
                                                      要确定操作数之间要是对等的,可以直接用来计算的,而不是不同的分布空间 激活、阈值 映射一个数据到另外一个空间(约束信息到另外一个分布)(编码) 累加 累乘 归一化,shift和scale到相同的空间分布

                                                      LLM实验

                                                        所有的基本单元都是”多进单出“的单bit单元
                                                          利用统一的基本单元构建复杂的模型网络 原始的状态都是固定的一个复杂的可微的结构
                                                            可以表达所有的空间:所有的输入都能影响到输出 训练完成后可以被映射到几种固定的简化的”处理单元“ 通过在每个单元内部的特殊计算结构,结合单元外部的梯度下降,实现基于统计的训练方法 基本单元采用8bit的全连接结构
                                                              通过复杂的组合来实现更多bit的关联性 8bit 需要256个 weight weight的调整采用统计方式,和历史的激励有关联,和其他bit的状态也有关联
                                                                仿真生物的行为:过敏、脱敏、连续放大、贪心 优化的目标
                                                                  尽量能把LUT训练成固定的,简单的逻辑代码,减少生物和计算机的能量消耗 把LUT优化成更少的bit的LUT 自洽 一个具有非常多输入的单输出节点
                                                                    优化/训练成(或量化成)简单处理逻辑,忽略大部份不激活的节点 优化成(或量化成)简单的输出之间的处理算法:“累加”,“逻辑与”等等 要求
                                                                      全连接,输入的节点完全对称 基于统计、贪心、类脑的训练 能用梯度下降进行优化? 模型
                                                                        x -> x
                                                                          类似attention的方式,生成qkv进行bit映射
                                                                            QK分为动态参数(额外的一个数据参与生成qk)和静态参数(只和input有关) 通过有限的LUT组合进行reduce 构建一种稀疏的LUT模型
                                                                              支持类脑训练

                                                                              目标

                                                                                替代传统的网络LLM/CNN
                                                                                  更好、更容易的量化 更好的PPA 适合FPGA和专用电路 通过类脑模型实现智能

                                                                                  生物脑

                                                                                    生物脑的典型的神经元结构能实现上述所有的计算需求 AI模型理论实际上是在理论数学的方法模拟大脑的工作,作为一个模拟器有大量的浪费和低效 神经元的功能相对固定 神经元之间的初始拓扑关系是DNA决定的 神经元之间的细节连接可以通过学习(训练)而改变 生物神经元的模型和LUT非常的像
                                                                                      神经元对时序也敏感,统计 都是多输入单输出 多个输入会进行精细的统计、不同的阈值、不同的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 1-bit AI Infra: Part 1.1, Fast and Lossless BitNet b1.58 Inference on CPUs
                                                                                            https://arxiv.org/abs/2410.16144v2 Bitnet.cpp: Efficient Edge Inference for Ternary LLMs https://arxiv.org/abs/2502.11880v1 Continual Quantization-Aware Pre-Training: When to transition from 16-bit to 1.58-bit pre-training for BitNet language models? https://arxiv.org/abs/2502.11895v1 (NEW!) BitNet v2: Native 4-bit Activations with Hadamard Transformation for 1-bit LLMs https://arxiv.org/abs/2504.18415 (NEW!) BitVLA: 1-bit Vision-Language-Action Models for Robotics Manipulation https://arxiv.org/abs/2506.07530