Paper Reading: CERT-DF: A Computing-Efficient and Robust Distributed Deep Forest Framework With Low Communication Overhead
Paper Reading 是从个人角度进行的一些总结分享,受到个人关注点的侧重和实力所限,可能有理解不到位的地方。具体的细节还需要以原文的内容为准,博客中的图表若未另外说明则均来自原文。
论文概况 | 详细 |
---|---|
标题 | 《CERT-DF: A Computing-Efficient and Robust Distributed Deep Forest Framework With Low Communication Overhead》 |
作者 | Li’an Xie, Ting Wang, Shuyi Du, Haibin Cai |
发表期刊 | IEEE Transactions on Parallel and Distributed Systems(TPDS) |
发表年份 | 2023 |
期刊等级 | 中科院 SCI 期刊分区(2023年12月最新升级版)2 区,CCF-A |
论文代码 | 文中未公开 |
作者单位:
- Engineering Research Center of Software/Hardware Co-design Technology and Application, Ministry of Education, The Shanghai Key Laboratory of Trustworthy Computing, Software Engineering Institute, East China Normal University, Shanghai 200062, China
- Department of Houston International Institute, Dalian Maritime University, Dalian, Liaoning 116026, China
研究动机#
深度神经网络领在各种机器学习任务中表现出了优异的性能,但仍然存在一些明显的缺点。一种名为深度森林 gcForest 的新型学习范式可视为 DNN 的替代方案,深度森林被赋予了自适应调整模型训练深度的能力,通过使用比 DNN 更少的超参数交叉验证来评估级联层的性能。此外深度森林使用决策树作为模型的基础,使其更具可解释性。虽然 gcForest 在各方面都取得了令人瞩目的成绩,但由于数据和模型的高度复杂性,gcForest 的非分布式单机工作方式导致其训练效率不高。为了解决 gcForest 的计算效率低下问题,一些研究研究了不同并行粒度层次的深度森林分布式训练方案,缓解了单机计算资源的不足。例如 ForestLayer 采用森林作为并行粒度,将级联森林划分为多个子森林在分布式集群中进行计算,TreeServer 采用基于树的并行粒度进行分布式计算。然而分裂的分布式计算单元(如子森林、树)的大小通常是一个静态值,这使得模型不能适应各种分布式环境,不能充分利用计算资源。为了解决上述分布式深度森林中计算单元最优分割大小的问题,基于 BLB 的分布式深度森林算法 BLB-gcforest 实现了一种自适应子森林分割算法。然而过度的并行化也会带来严重的负面影响,高度并行的分离子森林的聚合将导致通信开销的增加,基于分布式存储集群(如 HDFS)实现的 BLB 方法需要扫描整个数据集,这将导致数据远程访问的高采样开销。
文章贡献#
为了解决现有分布式深度森林存在的问题,本文提出了一种新的计算效率高、鲁棒性强的分布式深度森林算法 CERT-DF。CERT-DF 基于本文新提出的 SAB 机制构建的,该机制集成了三种方案:块级预采样、两阶段预聚合和系统级备份。块级预采样将数据集划分为多个不相连的数据块,其中利用随机样本分区机制,确保每个块的统计特征和数据分布与原始整个数据集相似,以减少分布式数据集偏差对模型精度的负面影响。两阶段预聚合方案引入缓冲机制,将每个子森林生成的向量临时存储,然后对分布式子森林进行分层向量聚合,以减轻参数服务器的网络带宽占用,加快聚合过程。系统级备份旨在以很小的内存和磁盘开销备份关键特征空间,防止训练任务失败,增强分布式深度森林的鲁棒性。CERT-DF 框架在 Ray 平台上进行实现,并基于七个知名的基准数据集进行了广泛的实验,评估结果表明 CERT-DF 在计算效率、模型精度、系统资源开销和系统鲁棒性方面优于最先进的方法。
预备知识#
RSP(Random Sample Partition,随机样本分区)是一种新的数据块组织方法,在 Hadoop HDFS(Distributed File System)中实现,下图为《A two-stage data processing algorithm to generate random sample partitions for big data analysis》一文中绘制的 RSP 原理。RSP 对 HDFS 的文件分区方法进行了改进,考虑了原始数据集的数据分布和统计属性,生成新的据分布与原始数据集相似的分布式数据块。相关实验结果表明,对 RSP 生成的局部数据块进行自举采样,避免了远程访问整个数据集的代价,达到了较高的统计精度。
BLB(Bag of Little Bootstrap) 是一种用两阶段子样本自助抽样方法取代了传统的单阶段自助抽样方法,并使用子样本自助抽样执行多次评估和统计。第一阶段称为子样本,通过对数据集进行不替换抽样得到,因此子样本集比原始数据集小得多。因此 BLB 只需要在这个小样本集上执行多次自助采样和放回,可以显著减少内存。两阶段抽样方法很好地适应现代分布式并行计算框架,实现在每个节点独立执行,而不需要花费太多的计算资源。
本文方法#
本节的 CERT-DF 方法包括四个部分,分别是基于 SAB 的分布式级联森林、块级预采样方法、两阶段预聚合方法和系统级备份方法。
分布式深度森林#
假设数据集的原始样本空间为 X,可以表示为:
对每个级联层的输入进行 BLB 子采样过程,得到子采样结果 XB,用公式(2)进行表示。其中 Xt 表示第 n 级联层的输入,b 表示未替换的子样本集的大小。
自举采样过程表示为公式(3),其中 n 表示 bootstrap 的大小。
令 CF 代表级联森林,F 代表级联层,由于级联森林 CF 由多个级联层组成。因此级联森林可以表示为公式(4),其中 T 为级联层总数。
此外还可以根据不同的输入特征空间来表示级联层,因此级联森林也可以表示为公式(5)。
此外每个级联层包含多个随机森林,如果用 f 表示随机森林。则级联层 F 可以表示为公式(6),其中 K 表示每个级联层中随机森林的个数。
其中每个随机森林可以用公式(7)表示,tri 为第 i 棵决策树,L 为随机森林 f 的决策树总数。
在 CERT-DF 中每个随机森林可以进一步分成 R 个子森林 {u1, u2,…,uR},其中 u 表示子森林。则随机森林 f 也可以表示为公式(8)。
每个子森林中决策树的数量可计算为 Q=L/R,因此每个子森林也可以表示为公式(9)。
接下来定义级联森林中生成的启发向量,假设决策树的评价函数为 ξ,则该树输出的类向量为 Vtr,可由评价函数公式(10)得到。
每个子森林的类向量 Vu 可以通过估计 ξ(u) 来计算,ξ(u) 等于子森林中每个决策树生成的类向量的加权平均值,其中 wi 为树 i 的权值。
同样每个随机森林的类向量 Vf 可以通过估计 ξ(f) 得到,ξ(f) 通过汇总子森林的 R 个类向量 Vu 来计算,如下公式(12)所示。
第 n 级联层的估计 Ft(Xt) 可以推导为所有森林估计的并集,如公式(13)所示。
级联森林层 Ft 的输入 Xt 是通过将原始特征空间 X 与第 (t-1) 级联森林层的类向量 V(t−1)F 串联而成的,如公式(14)所示。
CERT-DF 模型#
深度森林包括多粒度扫描阶段和级联森林两个阶段,CERT-DF 采用与 BLB-gcForest 和 ForestLayer 相同的多粒度扫描方法。CERT-DF 中提出的 SAB方法能显著降低级联森林计算过程中的通信开销,提高资源利用率,CERT-DF 框架的体系结构如下图所示。块级预采样方法工作在多粒度扫描阶段,将数据集转移到多个块中进行级联森林层的块级采样。两阶段预聚合和系统级备份方法在级联森林阶段工作,两阶段预聚合帮助用户聚合本地内存中同一个森林中的类向量,以生成用于全局聚合的启发向量。系统级备份方法利用多级备份机制,即类向量级备份方法和特征空间级备份方法,帮助工作节点在发生故障后快速恢复。
整体的算法流程如下伪代码所示,在多粒度阶段结束后,首先通过 Blocklevel_Pre_Sampling 算法处理大小为 n 的样本,在 HDFS(Hadoop 分布式文件系统)上生成分布式原始数据集,并将其作为第一个级联层的输入 X1。每个级联层的 RF 并行选择一个数据块进行不替换的子采样,重复 K 次生成包含 K 个子样本的子样本集 XB,这些子样本将分别分配给 K 个随机森林(第 3-4 行)。接下来将随机森林分成 R 个子森林,每个子森林将其决策树分配给多个工作节点执行,并在 XB 上执行 Bootstrap 以获得 Xbr(第 7 行)。子森林的每个决策树都基于 Xbr 并行训练以获得类向量 Vtr(第 10 行)。在聚合这些类向量时,首先对同一工作节点上同一子森林的类向量进行本地预聚合,获得中间类向量 V(p)w,其中 p 表示第 p 个工作节点,该类向量临时存储在工作节点的本地内存中(第 13-14 行)。然后将这些中间类向量转移到参数服务器以进行全局聚合(第 16 行),接着在参数服务器上进一步聚合同一随机森林的每个子森林的类向量,得到该随机森林的类向量 Vf(第 18 行)。接着将所有随机森林的类向量连接起来,得到级联层的类向量 V(t)F (第 20 行),其中 t 表示第 t 级联层。最后 V(t)F 与原始特征 X 连接,生成下一个级联层的输入 Xt+1(第 21 行)。
块级预采样#
在对整个分布式数据集进行大规模子采样时,BLB 采样导致对分布式数据集的频繁远程访问,存在计算暂停时间长和通信开销高的问题。本文设计了一种新的块级预采样方案 BPS,它在分布式节点上采用数据块采样,以减少级联森林训练过程中的网络通信开销。BPS 首先采用 RSP 方法预生成分布式数据块,保持了与原始整个分布式数据集相似的统计特征,然后 BPS 利用 BLB 方法基于局部数据块执行子采样。这个步骤运行在多粒度扫描和级联层之间,多粒度扫描完成后进行 BPS 算法处理,重组为分布式数据块。
BPS 算法的流程如下图所示,首先在多粒度扫描阶段后,将原始数据集划分为 h 个大小相等且不相交的子数据块 {D1, D2, …, Dh},其中 h 为数据块的数量(第 1 行)。然后将 h 个子数据集随机洗牌,每个子数据集进一步并行划分为 k 个大小相等的小块(第 3-4 行)。接下来对于每个子数据集 D’i,它从 Di 中随机选择一个数据块 Dji进行不替换合并,形成一个由 h 个数据块组成的新子数据块 D’i(第 7-11 行)。并行重复 k 次,并生成 k 个子数据块(第 13 行),用作级联层(第 15 行)中 BLB 子采样的新数据块。
笔者通过自己的理解举了一个例子,尝试更形象具体地描述这个流程。下图为 h=3、k=2 的例子,首先原始的数据块会被划分成 3 个大小相等且不相交的子数据块 h1、h2、h3。接着对于这 3 个数据块随机再划分成 2 个小块,例如 h1 进一步划分成 k11、k12,以此类推。接着上述这些 3 组数据块按照次序合并成 k 个新子数据块,例如 k11、k21、k31 合并为 k1,以此类推。通过上述流程,原先的完整的数据块就被分为 2 个子数据块。
两阶段预聚合#
为了提高级联森林阶段的训练效率,现有的分布式深度森林通常采用基于树的并行训练策略,将森林静态或动态地分割成多个保证负载均衡的树集合,并将其分配给每个工作节点进行并行计算。然而这样的并行策略在聚合每棵树的类向量时,需要从每个工作节点将其单独传输到参数服务器进行全局聚合,此时会造成冗余的传输开销。为了解决这一问题,本文提出了两阶段预聚合方法来优化类向量聚合过程,提高工作节点之间的通信效率。
首先每个工作节点在本地内存对同一子森林中决策树的类向量进行局部预聚合,生成一个中间类向量。接着将每个工作节点上预聚合的中间类向量(不是每棵树的所有类向量)传递给参数服务器进行全局聚合,计算森林的类向量。两阶段预聚合方法只需要将中间类向量存储在本地内存中,而不是存储树的所有类向量,与现有的最先进的方法相比大大减少了内存开销。下图给出了一个描述两阶段预聚合方法过程的示例,其中子森林 u 包含 Q 棵决策树(Q=7),这些决策树将按照轮询机制分配给 W 个工作节点(W=3)。Xbr 是子样本 XB 的 bootstrap 采样得到的集合,每个决策树 tr 基于数据集 Xbr 进行训练生成类向量 Vtr。然后将同一子森林中树的类向量 Vtr 预聚合到每个工作节点的本地内存中,生成中间类向量 Vw。最后三个工作节点将其存储的预聚合中间类向量 Vw 传输到参数服务器,进行进一步聚合。
系统级备份#
为了增强系统的鲁棒性,本文设计了系统级备份方法,从类向量级和特征空间级两个层面提高了系统的容错性,还可以减少由于网络故障和系统故障而恢复任务所带来的网络传输开销。
类向量级备份#
在子森林并行计算阶段,系统级备份方法将每棵树的类向量和中间预聚合的类向量存储在本地磁盘中。例如在下图中,工作节点 p 上的每棵树估计的标记类向量(V(1)tr, …, V(M)tr)将存储在本地硬盘中,树 1 的标记类向量为 V(1)tr(Ft, fi, uj),表示第 5 级联层 Ft 的第 i 个随机森林 fi 的第 j 个子森林 uj 中的第一棵决策树的估计结果。
由于第 t+1 层级联 Ft+1 的计算任务依赖于第 5 层级联 Ft 的类向量,如果一个工作节点在接收层 Ft 的类向量时停机,则 Ft 及其后续的 Ft+1 就不能继续训练任务。当失效的工作节点恢复时,必须从第一层重新开始训练。相比之下,使用类向量备份方法,工作节点可以根据备份在本地磁盘中标记的类向量来确定从哪一层重新启动任务。恢复后的工作节点将立即从本地磁盘检索第 5 层级联层的类向量,继续从第 5 层进行类向量聚合,不需要重新计算之前的级联层的类向量。因此类向量备份方法在防止网络和系统故障方面发挥了重要作用,极大地增强了分布式深度森林系统的鲁棒性。
特性空间级备份#
将原始特征空间 X 与第 t 级联层的类向量 V(t)F连接,计算第 t+1 级联层的输入特征空间 Xt+1,即 Xt+1=concatenate(X, V(t)F)。如果 (t+1)th 级联层在训练中途被打断,中间类向量 Vw(Ft) 将被第 t+1 级联层的不完整中间类向量覆盖,导致中间类向量 Vw(Ft+1) 损坏和不可用。因此即使工作节点使用类向量备份机制备份中间类向量,仍然需要从第一层重新开始训练以获得 V(t)F。
为了在训练失败时快速恢复训练,本文设计了特征空间备份机制来存储训练数据集。考虑到训练数据集 Xbr 可以通过对较小的子样本集 XB 进行 bootstrap 得到,因此选择将 XB 而不是将 Xbr 备份到硬盘中,这样可以减少硬盘存储成本和硬盘读取时间。具体来说,假设训练数据集 Xbr 的大小为 n(原始数据集的大小),根据 BLB 设置,每个子样本集 XB 的大小为 b=ny,其中超参数 y 的经验值通常设置为 y∈[0.6,0.8],确保 b 远小于n。当工作节点恢复时,它可以先在 XB 上执行带替换的 bootstrap,得到训练数据集 Xbr,然后根据得到的数据集 Xbr 快速恢复决策树训练。
算法分析#
算法复杂度分析#
算法的复杂度决定了算法的效率和成本效益,包括计算复杂性和通信复杂性两方面。
计算复杂度#
在分布式数据集上传统的 BLB 采样过程会导致大量的计算暂停,使用数据块级采样可以大大提高采样效率。在分布式深度森林中,每个子样本集的大小为 b=ny,其中 n 为原始数据集 X 的大小,y∈[0.6,0.8] 为超参数。将原始特征空间 X 拆分为 h 个数据块,分别放置在 W 个节点上进行分布式存储,并将每个数据块复制冗余存储在 σ 个节点上,因此数据本地访问和远程访问的概率分别为σ/W 和 (W−σ)/W。使用 E 表示数学期望,对于传统的 BLB 采样,本地数据访问次数为 E(local)=b×(σ/W),远程访问次数为 E(remote)=b×[(W−σ)/W],传统 BLB 采样的计算复杂度为 O(b×(W−σ)/W),可以简化为 O(b)。
相比之下,数据块级采样方法中的原始数据集会被分割为 h×k 个数据块,分配给 W 个工作节点,计算复杂度为 O(h×k)。接着块级采样将 h 个局部数据块以 O(1) 的复杂度进行本地访问,因此块级抽样方法的总计算复杂度为 O(h×k)+O(1),可以简化为 O(h×k)。假设每个分割数据块的大小是 Sd,则有 h×k×Sd=n,对于给定 b=ny 有 h×k=b1/y/Sd。因此只要在分割数据集时保证每个数据块的大小 Sd 大于 b1-y/y,即可保证 h×k 的值小于 b,即 O(h×k)< O(b)。
通信复杂度#
通信开销主要发生在类向量聚合过程中,选择 BLB-gcForest 和 ForestLayer 作为基线与 CERT-DF 进行比较。假设有 T 个级联层,每个级联层中有 K 个森林,分布式环境中有 W 个工作节点。每个森林可划分为 R 个子森林,每个子森林中的决策树数为 Q。每个工作节点将使用轮询机制为子森林分配大约 M=Q/W 棵决策树,每个决策树都经过训练得到大小为 δ 的类向量 Vtr,这些向量随后都将通过网络传输到参数服务器进行全局聚合。因此一个级联层的类向量聚合的通信复杂度为 O(K×R×Q×δ),则基线算法中深度森林类向量聚合的总通信复杂度为 O(Baseline)=O(T×K×R×Q×δ)。
在 CERT-DF 框架中采用两阶段预聚合方法,工作节点首先将同一子森林中决策树的类向量 Vtr 预聚合为中间类向量 Vw=∑Mi=1V(i)tr,Vw 将存储在本地内存中。全局聚合时只需要将中间类向量 Vw 传递到参数服务器即可,则中间类向量 Vw 的大小可计算为 M-1∑Mi=1δ(i)。因此两阶段预聚集方法在一个级联层中进行类向量聚集的通信复杂度为 O(K×R×W×M-1∑Mi=1δ(i)),可以简化为O(K×R×W×δ),因此 CERT-DF 中深层森林类向量聚集的总通信复杂度 O(CERT-DF)=O(T×K×R×W×δ)。由于 M=Q/W,则有 Q=M×W,因此可以得出基线算法的通信复杂度高达 CERT-DF 的 M 倍,即 O(baseline)=M×O(CERT-DF),这证实了 CERT-DF 的通信效率更高。
鲁棒性分析#
算法的鲁棒性决定了其在实际部署中的实用性和可行性,考虑到深度森林逐层训练的特点,一旦某一层训练失败就需要整个深度森林返回第一层重新训练,导致了资源和时间的严重浪费。相比之下,系统级备份方法采用了类向量备份机制和特征空间备份机制,在故障恢复后 CERT-DF 可以快速恢复失败的训练任务,无需从第一级联层重新开始训练,显著增强了系统的鲁棒性。
除了算法本身的鲁棒性外,算法将部署在现有主流分布式计算平台(如 Ray、Hadoop、Spark、Flink)上,这些平台提供的可靠性保证机制可以进一步增强系统的鲁棒性。特别是在实验中 CERT-DF 基于 Ray 框架实现,Ray 提供了一个抽象的有状态执行器 actor 执行采样和训练,并将中间参数存储在共享内存或硬盘中。当执行训练任务时,系统级备份方法将同步存储子样本集 XB 和决策树的类向量 Vtr 在本地硬盘中。假设训练级联层的时间为 Δ,恢复时间为 α,当前级联森林的训练层数为 t。如果在训练决策树时遇到停机,Ray 框架提供了故障自动重试机制,使主节点能够重新启动参与者以继续训练。如果没有系统级备份方案,必须以恢复时间 t×Δ 从第一层重新训练级联森林,相反系统级备份方案中恢复时间最多为 α+Δ。
实验结果#
数据集和实验设置#
实验中 CERT-DF 使用 Python 在 Ray 分布式计算框架上实现,从整体计算效率、训练效率、模型准确性、系统资源成本和系统鲁棒性等方面验证了其可行性和有效性。对比算法方面,包括两个最先进的分布式深度森林模型 ForestLayer 和 BLB-gcForest,两个传统的深度神经网络模型 CNN with word embedding 和 LSTM。实验在基于 Google Cloud Platform(GCP)的 8 节点服务器集群和基于阿里云平台的 2 节点服务器集群上进行,每个节点配置 Intel 2.3 GHz 至强 E5-V3 4 核 CPU 和 16GB 内存,Ray 框架版本为 1.13.0。
在多粒度扫描阶段,CERT-DF、BLB-gcForest 和 ForestLayer 中使用相同的参数设置,如下表所示。其中使用三折交叉验证生成决策树的类向量,R 和 Q 在 ForestLayer 中是常量,在 CERT-DF 和 BLB-gcForest 中可以应用自适应子森林分割算法自动调整并行粒度。
深度森林参数 | 设置 |
---|---|
滑动窗口大小 | d/16、d/8、d/4 |
级联森林 | 4 个 RF 和 4 个 ET |
森林包含的决策树数量 | 500 |
决策树最大深度 | 120 |
子采样数据集的大小 b=ny | y=0.7 |
子森林的初始数量 R | 20 |
子森林的大小 Q | 500/20=25 |
此外还使用 PyTorch 框架实现了深度神经网络,CNN 模型的参数设置如下:
CNN 参数 | 设置 |
---|---|
batch size | 50 |
epoch | 500 |
filters | 3×3、4×4 和 5×5 |
feature map | 100 |
LSTM 的参数设置如下:
CNN 参数 | 设置 |
---|---|
隐藏单元参数 | 128 |
序列长度 | 6500 个 epoch |
学习率 | 10−4 |
数据集包括表格数据集:IMDB、sEMG、LETTER、YEAST 和多维数据集:MNIST、CIFAR10、CIFAR100,基本信息如下表所示。
整体计算效率#
下表给出了 ForestLayer 与 CERT-DF 在训练时间方面的比较结果,可以看出与 ForestLayer 相比,CERT-DF 在 5 个数据集上的计算效率最大提升了 1.27~1.44 倍。主要原因是 CERT-DF 没有使用 ForestLayer 的基于任务的并行方案,而是利用了基于树的并行方案。与 ForestLayer 中固定大小的子森林相比,CERT-DF 可以自适应调整子森林的大小来调整并行粒度,并借助两阶段预聚合方法大大提高了类向量聚合过程的效率。
下表给出了 BLB-gcForest 与 CERT-DF 在训练时间方面的比较结果,结果表明 CERT-DF 在 5 个数据集上的训练效率均优于 BLB-gcForest。这进一步证明了 SAB 方法可以有效地帮助 CERT-DF 提高计算效率,特别是两阶段预聚合方案可以大大减少类向量聚合过程中的数据传输量和传输时间成本,从而加快模型收敛速度。
此外 CERT-DF 在 LETTER 和 YEAST 数据集上的加速比在 MNIST、CIFAR10 和 CIFAR100 数据集上的加速比要高得多,造成这一结果的主要原因是多粒度扫描阶段。后者需要多粒度扫描阶段来增加样本的维数,考虑到 SAB 方法是专门为级联森林阶段设计的,不涉及多粒度扫描阶段,因此 CERT-DF 在具有多粒度扫描阶段的数据集上的训练加速没有太显著。尽管如此,CERT-DF 的整体计算效率在不同大小的分布式集群上仍然优于其他算法。
为了探索 SAB 方法对级联森林阶段的影响,下表对 CERT-DF、BLB-gcForest 和 ForestLayer 在级联森林阶段的训练时间进行了比较。实验结果表明 CERT-DF 在 LETTER、MNIST、CIFAR10、CIFAR100 数据集上实现了级联森林的最短的训练时间。具体来说,块级预采样方案实现了本地数据访问,而不是频繁的远程数据访问,从而大大缩短了数据访问时间。两阶段预聚合方案通过在每个工作节点上预聚合局部类向量,大大减少了全局类向量聚合过程中的数据传输量,从而进一步缩短了数据传输时间。
模型精度#
以上实验结果验证了 CERT-DF 的计算效率很高,此处对模型的准确率进行验证。对比结果如下表所示,CERT-DF 模型精度与 ForestLayer 和 BLB-gcForest 保持相同甚至略高的水平。此外 CERT-DF 的高计算效率可以使一个深度森林模型扩展到更大规模的模型,而更大规模的模型在经验上可以获得更高的模型精度。
系统资源开销#
为了展示级联森林中 CERT-DF 的系统级优化,在四节点分布式集群的 MNIST 数据集上评估了 CERT-DF、ForestLayer 和 BLB-gcForest 的系统资源开销(平均 CPU和内存成本)。实验结果如下图所示,其中 x 轴表示节点数,Y 轴表示每个节点的平均 CPU 开销和内存开销。
在内存成本方面,CERT-DF 相对于 BLB-gcForest 和 ForestLayer 的平均降低率分别为 9.8% 和 27.7%,这是因为两阶段预聚合方案将每个工作节点上决策树的类向量预聚合到需要较少内存开销的较小的中间类向量中。BLB-gcForest 和 ForestLayer 的工作节点都需要直接将决策树的所有类向量存储在本地内存中,然后将它们传递给参数服务器进行全局聚合,这导致内存成本和网络 I/O 成本都很高。
从 CPU 成本的角度来看,CERT-DF 比 BLB-gcForest 和 Forestlayer 平均降低了 3.6% 和 10.2%,这是因为块级预采样方法消除了处理频繁数据远程访问的 CPU 消耗。两阶段预聚合方案还有助于减少 CPU 处理的数据传输量,从而降低 CPU 成本。
鲁棒性#
为了评估 CERT-DF 的鲁棒性,在一个由 8 个节点组成的分布式集群中,通过随机关闭集群中的一个工作节点及其任务来模拟 MNIST 数据集上的实际硬件和软件故障。具体为当级联森林训练到第四层时,使用 GCP 脚本随机选择一个工作节点关闭,然后重新启动。为了模拟故障场景,采用心跳机制来快速感知故障的发生,其中主节点每十秒探测一次每个工作节点,如果连续五次没有收到来自一个工作节点的响应,则认为该工作节点已经失败。
下表给出了 BLB-gcForest 和 CERT-DF 在鲁棒性方面的性能评价结果。一旦检测到故障,BLB-gcForest 的训练将立即回滚并从第一层重新开始。相比之下,采用系统级备份方法,CERT-DF 首先根据备份在硬盘中的已标记的中间类向量和特征空间检查故障点,然后从故障发生层(本实验的第四层)开始恢复故障训练。CERT-DF 在重复前几层的训练中节省了大量的时间,训练完成时间为 252 分钟,远远短于 BLB-gcForest 的 424 分钟,证明了系统级备份方法的有效性和 CERT-DF 的高鲁棒性。
数据块评估#
为了验证不同数据块数量对模型准确性的影响,在 5 个节点的分布式环境下,在 MNIST 数据集上评估了块号为 8、16、24、32、40、48、56、64 的CERT-DF。实验结果如下图所示,图中数据为不同数据块下 CERT-DF 在训练时间和模型精度方面的表现。结果表明随着块数量的增加,模型的准确率从 95.77% 提高到 99.55%,说明块数量的增加可以提高模型的准确率,但也会导致更长的训练时间。这是因为随着块数量的增加,在块级预采样过程中对数据进行洗牌和采样处理,可以使每个生成的数据块更接近原始数据集的数据分布,从而获得更高的模型训练精度。
同时不断增加数据块的数量并不会导致模型精度的进一步提高,从图中可见将数据块数量增加到 32 个以上并不会导致模型精度的显著提高,相反会增加训练时间,并不能有效提高准确率。因此在现实场景中,确定适当数量的数据块是至关重要的,可以根据特定的需求和约束确定数据块的最佳数量。
与 DNN 的比较#
此处比较了 Deep Forest 与 CNN 和 LSTM 在 IMDB 和 sEMG 数据集上的模型精度和双节点分布式集群下的训练效率,如以下两张表所示。实验结果表明与传统 DNN 相比,深度森林模型在 IMDB 和 sEMG 数据集上获得了更好的模型精度。
优点和创新点#
个人认为,本文有如下一些优点和创新点可供参考学习:
- 针对分布式数据子集的偏差会对整体带来的影响,块级预采样基于随机样本分区机制,生成了具有相似数据分布的数据块,减小了偏差和通信开销;
- 所有类向量需要分别传输到参数服务器进行全局聚合带来的冗余的传输开销,本文提出了两阶段预聚合方法先在本地进行预聚合,提高了整体的类向量聚合效率;
- 通过类向量级备份和特性空间级备份,使得分布式深度森林遇到节点故障的时候能从中断的地方恢复训练,提高了整体的鲁棒性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)