想象一下,你正试图教会一个机器人做决策,就像电子游戏里的裁判,或者夜店里的保安。你不希望这个机器人是一个迟钝、沉重的思考者;你希望它能反应极快,在瞬息之间做出选择而不会卡顿。这就是“提升决策树”(Boosted Decision Trees, BDTs)的世界。不要把 BDT 想象成一个巨大的大脑,而要把它看作是一个由许多简单、微小的决策者组成的团队。每个成员都会问一个简单的问题,比如:“温度是否高于 20 度?”或者“速度是否超过了 50 英里/小时?”根据答案,团队会将接力棒传递给下一位成员。在队伍末端,整个团队会汇总他们的意见,做出最终决定。这些团队以擅长从杂乱的数据中发现模式而闻名,但它们有一个问题:对于驱动自动驾驶汽车或粒子物理实验等实时系统的微型、超高速芯片(称为 FPGA)来说,它们通常过于笨重且缓慢。
巨大的挑战在于,这些决策团队通常是使用“浮点”数字(如 3.14159...)进行训练的,这些数字虽然精确,但存储起来需要大量的空间和能量。为了让它们在微型芯片上运行,工程师通常尝试将这些数字挤进更小、更简单的盒子(如整数)中。但这就像试图把一大团巨大的、摇晃的果冻塞进一个小巧、坚硬的盒子里:如果你在果冻已经凝固后直接把它挤压进去,它就会破碎,导致机器人开始犯傻。旧的方法是为每个人猜测合适的盒子大小,这往往会浪费空间或毁掉机器人的聪明才智。
本文介绍了一种名为 FQTree(细粒度量化树)的巧妙新方法,以及一个配套工具 QXGB,它们改变了我们构建这些决策团队的方式。FQTree 不是先用巨大的浮点数训练团队,然后再试图稍后将其挤进盒子里,而是让团队在学习的过程中就学会用小巧、简单的盒子来思考。这就像是从第一天起就训练一名体操运动员在窄窄的平衡木上练习,而不是让他们在宽阔的地面上练习,然后在比赛前突然强迫他们上平衡木。
其秘诀在于,FQTree 意识到决策团队中的成员并非同等重要。前几个成员负责做出重大、明显的判断,因此需要非常精确。而后面的成员仅负责进行微小的调整以修正小误差,因此不需要那么精确。FQTree 会自动计算出每个成员究竟需要多少“脑力空间”。它给大思考者更多的比特(更多的细节),给小思考者更少的比特(更少的细节),从而节省了大量的空间。它还使用了一种被称为“偏置折叠”(bias folding)的技巧,这就像是将所有数字进行平移,使它们都变成正数,从而允许硬件丢弃符号位,变得更加简单。
一旦团队以这种高效的方式训练完成,QXGB 框架就会充当一个神奇的翻译官。它能将训练好的团队瞬间转化为一个定制的芯片硬件蓝图,而无需人类工程师为每一个新设计重新绘制电路。结果令人印象深刻:在三项不同的测试中(一项是识别手写数字,一项是识别物理学中的喷注粒子,另一项是寻找网络入侵者),该方法比目前最先进的方法节省了 26% 到 57% 的硬件空间(具体指查找表,即 LUTs),同时保持了同样高水平甚至更高的准确率。在某些情况下,它甚至让决策速度提高了两倍。这是一个双赢的结果:机器人的体积更小、速度更快,而且依然一样聪明。
技术摘要:FQTree —— 用于提升决策树(BDT)的细粒度量化与硬件生成
问题陈述
提升决策树(BDTs)因其预测性能和紧凑的规模,被广泛应用于对延迟敏感的应用中,使其非常适合 FPGA 部署。然而,高效的硬件实现仍然具有挑战性。现有的面向 FPGA 的 BDT 设计通常依赖于在整个模型中采用统一或手动调优的定点表示法。这种方法未能考虑到 BDT 不同组件(输入特征、分裂阈值、叶子节点值以及累加逻辑)在数值角色上的异构性,往往导致不必要的硬件成本或可避免的精度下降。
此外,简单的训练后量化(PTQ)对于 BDT 通常是无效的。与神经网络中量化会对算术进行连续扰动不同,BDT 量化可能会引起离散的路由变化;特征或阈值的微小扰动可能会翻转分支决策,从而完全改变所选的叶子节点。这种敏感性需要一种量化感知训练(QAT)方法,使模型在优化过程中能够接触到量化效应,从而允许数值参数在降低精度的同时适应,以保持预测质量。
方法论
FQTree 算法
作者提出了 FQTree,一种面向硬件的、针对 BDT 的细粒度 QAT 算法。与 PTQ 不同,FQTree 将量化直接纳入训练循环中。
- 带量化的提升过程: 在阶段式提升过程中,每个新拟合的树在用于后续训练阶段之前都会立即进行量化。这确保了后期的树能够适应已经量化的集成模型的残差,从而补偿任务残差和量化引起的失真。
- 叶子值量化方案: 核心创新在于一种面向硬件的叶子值量化策略。它没有采用统一精度,而是根据叶子值的幅度分配精度:
- 全局步长与树级偏移: 在整个集成模型中使用全局量化步长 (s),并结合树级偏移因子 (f(v))。
- 非负整数表示: 该方案将叶子值转换为紧凑的非负整数。负值被截断为零,并应用偏移量以移除符号位,从而简化数据通路。
- 偏置折叠(Bias Folding): 在重基(rebasing)过程中移除的偏移量被折叠到树级或类别级偏置项中,该偏置项仅在累加后添加一次,而不是在每个树路径中都携带。
- 动态位宽: 每棵树的位宽 (bt) 由其量化整数值的动态范围(⌈log2(max(vint′)+1)⌉)决定。早期贡献于最终预测的树自然会获得更多位数,而后期的修正树则使用较少的位数。
- 特征/阈值量化: 对特征和阈值应用标准的均匀量化,并通过硬件中的有符号减法器实现它们的精度自然对齐。
QXGB 框架
为了弥合训练与部署之间的差距,作者引入了 QXGB(量化 XGBoost),一个用于自动硬件生成的编译器框架。
- 数据流表示: 训练好的量化 BDT 被降级为扩展的分布式算术指令集(DAIS)中间表示(IR)。该 IR 通过显式的 MUX 指令进行了扩展,以捕捉决策节点的条件路由,将 BDT 推理视为一种无状态的数据流内核。
- 自动生成: 编译器通过符号追踪计算图并生成可综合的 RTL 或高层次综合(HLS)代码。该流程支持位精确仿真,并允许在无需手动重新设计的情况下,系统地探索精度-延迟-资源的权衡。
核心贡献
- FQTree 算法: 一种细粒度的 QAT 方法,其特点是采用了面向硬件的叶子值量化公式,利用全局步长、树级偏移和偏置折叠,实现了紧凑的非负整数表示。
- QXGB 框架: 一个可扩展的、基于编译器的流程,用于为高效、低延迟的 FPGA BDT 实现生成 HLS 或 RTL 代码,最大限度地减少延迟和资源使用。
- 全面评估: 证明了该方法与最先进的 FPGA BDT 设计相比,在保持或提高精度的同时,减少了 26–57% 的查找表(LUT)使用量。
实验结果
该方法在三个数据集上进行了评估:JSC(高能物理中的喷注子结构分类)、MNIST(手写数字分类)和 NID(网络入侵检测)。
- JSC 数据集: FQTree 实现了 75.7% 的准确率,消耗 1,652 个 LUT 和 2 个周期(4.0 ns)。与 TreeLUT(75.6% 准确率,2,234 个 LUT,3 个周期)相比,FQTree 在提高准确率的同时减少了约 26% 的 LUT 使用量和流水线深度。在更低成本的点上,FQTree 以仅 548 个 LUT(比 TreeLUT 少 31%)实现了 74.8% 的准确率和 1 个周期的延迟。
- MNIST 数据集: 最高精度配置达到了 97.7% 的准确率,消耗 8,147 个 LUT 和 2 个周期,在显著降低延迟和资源使用的同时,超越了之前的最佳水平(POLYBiNN,97.2%)。在中等配置点,FQTree 实现了 96.7% 的准确率,消耗 2,744 个 LUT,与具有相似准确率的 TreeLUT 相比,LUT 使用量减少了约 39%。
- NID 数据集: FQTree 仅用 157 个 LUT 和 1 个周期就实现了 93.1% 的准确率,相比 TreeLUT(92.7% 准确率,345 个 LUT)减少了约 55% 的 LUT 使用量。
- PTQ 基准: 与使用相同量化器的训练后量化(PTQ)基准相比,FQTree 在准确率-资源权衡方面始终表现更好,证实了其收益既源于量化器设计,也源于 QAT 优化过程。
意义与主张
本文声称提供了首个用于 BDT FPGA 部署的统一工作流,该工作流结合了面向硬件的叶子值量化、量化感知训练以及自动硬件生成。
作者强调,他们的方法解决了 BDT 的特定挑战,即量化影响的是路由决策,而非仅仅是算术精度。通过将细粒度精度控制集成到训练中,并通过 QXGB 框架实现硬件生成的自动化,该方法能够实现对精度-延迟-资源的系统化探索。结果表明,FQTree 可以识别出紧凑且高质量的实现,在保持或提高预测准确率的同时,在硬件效率(LUT 使用量)方面显著优于现有的最先进设计。
每周获取最佳 machine learning 论文。
受到斯坦福、剑桥和法国科学院研究人员的信赖。
请查收邮箱确认订阅。
出了点问题,再试一次?
无垃圾邮件,随时退订。