模的模型训练,我们从跨节点通信、内存占
用、计算复杂度、剪枝以及缓存命中优化等多个方面优化了整个框架
为了讲清楚我们优化逻辑,大家先来看看F是如何实现的F的实现F整个实现过程可以概括为如下几个步骤:()将全量样本离散化并到内存,这一步包含三部分:采样到为每个特征等距分桶,得到潜在切分点使用潜在切分点,将每个样本的特征离散化,此时特征值从被转换成
根据树采样比例,为每条样本生成
标记数组(由数组实现),标记这条样本用于哪棵树的生长()树的生长将整个 热门电子邮件列表 森林看做一张图,采用深度优先搜索待分裂的节点,一次迭代一组节点,由x参数控制节点数根据样本的标记数组,计算每个样本在每个节点的每个下的直方图(统计信息)通过算子,将同一个待分裂节点的所有下的直方图汇总到同一个w中
将待分裂节点的每个切分点直方图
积分,例如f有个切分点[],积分后为[+++],使用直方图 从思想领导力到潜在客户生成:有效的网络研讨会策略 作差,计算左右子节点增益,获取最佳切分点将待分裂节点的最佳切分点回,完成森林的生长使用记录样本所属节点(由参数控制)或广播模型
持续迭代直到达成退出条件可
以看到,的实现除了直方图,还有不少精妙的地的情况下,深度优先搜索相较于广度优先搜索更倾向于快速完成单棵树的训练,从而减少后续训练需要广播的树模型篇幅所限,下面将主要为大家介绍分布式因果森林框架在内存占用方面的优化减少体积从上文可以看出,F使用来表示最大分桶个数,而使用无符号来存储,支持最多56个分桶
我们认为8个分桶足以支撑因果森林的业务需要,所以使用了有符号来表示分桶,相比内存占用减少至4前文中提到,F为每个样本创建了一个标记数组例如训练一个棵树的森林,这个标记数组为[4],这表示此样本在有放回采样4次,在未被使用此外,框架需要支持,也就意味着需要另一个标记数组记录样本在w还是
考虑到无放回采样足以覆盖绝
大部分场景,并且为了不引入第二个标记数组,我们最终选择了实现每棵树最多使用个,个表示是否是该树的样本,个表示是否是样本当关闭或者不使用下采样时,每棵树只需要个,内存占用最多减少至支持更大模型广播上文中提到,F每一轮迭代调用之前都需要计算出哪些样本属于待分裂的节点,通过参数提供了两种策略:策略一:每次迭代将树模型跟随闭包广播到各个w节点通过获取节点
策略二:使用[[]]类型来缓存当
前样本隶属于每棵树的哪个节点(例如训练棵树,则创建长度为的数组,每一个元素记录了此条样本在对应下标的树模型中的叶节点编号)从源代码中我们发现,策略二每一轮迭代都会卸载上一轮持久化的,再创建一个新的持久化到内存以亿条样本棵树的森林举例,每一轮迭代就是亿个长度为的数组的创建与垃圾回收