阿里云备案网站备案域名,抖音关键词搜索指数,优化方案的格式及范文,甘肃第九建设集团公司网站文章提出一整套创新算法与架构#xff0c;通过对TensorFlow底层的弹性改造#xff0c;解决了在线学习的弹性特征伸缩和稳定性问题#xff0c;并以GroupLasso和特征在线频次过滤等自研算法优化了模型稀疏性。在支付宝核心推荐业务获得了uvctr的显著提升#xff0c;并较大地提…文章提出一整套创新算法与架构通过对TensorFlow底层的弹性改造解决了在线学习的弹性特征伸缩和稳定性问题并以GroupLasso和特征在线频次过滤等自研算法优化了模型稀疏性。在支付宝核心推荐业务获得了uvctr的显著提升并较大地提升了链路效率。
0.综述
在线学习(Online learning)由于能捕捉用户的动态行为实现模型快速自适应进而成为提升推荐系统性能的重要工具。然而它对链路和模型的稳定性训练系统的性能都提出了很高的要求。但在基于原生TensorFlow设计Online推荐算法时我们发现三个核心问题
一些资讯推荐场景需要大量长尾词汇作为特征需使用featuremap对低频特征频次截断并连续性编码但耗时且方法aggressive。
使用流式数据后无法预知特征规模而是随训练逐渐增长。因此需预留特征空间训练几天后重启否则会越界。
模型稀疏性不佳体积达到数十GB导致上传和线上加载耗时长且不稳定。
更重要的是在线学习如火如荼当流式特征和数据都被打通后能按需增删特征实现参数弹性伸缩的新一代训练平台成为大势所趋。为了解决这些问题从2017年底至今蚂蚁金服人工智能部的同学充分考虑蚂蚁的业务场景和链路对TensorFlow进行了弹性改造 解决了以上三大痛点简化并加速离线和在线学习任务。其核心能力如下
弹性特征伸缩体系支持百亿参数训练。
group_lasso优化器和频次过滤提高模型稀疏性明显提升线上效果。
模型体积压缩90%完善的特征管理和模型稳定性监控。
在与业务线团队的共同努力下目前已在支付宝首页的多个推荐场景全流量上线。其中某推荐位的个性化online learning桶最近一周相比线上多模型融合最优桶提升4.23% 相比随机对照提升达34.67% 。 某个性化资讯推荐业务最近一周相比DNN基准uv-ctr提升0.77%pv-ctr提升4.78%模型体积压缩90%链路效率提升50%。
弹性改造及优势
背景在原生TensorFlow中我们通过Variable来声明变量若变量超过了单机承载的能力可使用partitioned_variables来将参数分配到不同机器上。 但必须指定shape声明后即不可改变通过数组索引查找。
由于推荐系统中大量使用稀疏特征实践中一般采取embedding_lookup_sparse一类的方法在一个巨大的Dense Variable中查找向量并求和来代替矩阵乘法。开源Tensorflow限定了Variable使用前必须声明维度大小这带来了两个问题
1需要预先计算特征到维度范围内的int值的映射表这一步操作通常在ODPS上完成。因为需要扫描所有出现的特征并编号计算非常缓慢
2在online learning场景下为了容纳新出现的特征需要预留一部分维度空间并在线上不断修改映射表超过预留空间则需要重新启动在线任务。
为了突破固定维度限制实现特征的动态增加和删除最朴素的优化想法是在TensorFlow底层实现模拟字典行为的Variable并在此基础上重新实现Tensorflow上层API。由此我们进行了优化在server新增了基于HashMap的HashVariable其内存结构如下 在声明该变量时只需增加一句其他训练代码皆不需改动 每个特征都通过hash函数映射到一个2的64次方大小的空间内。当需要计算该特征时PS会按需惰性创建并返回之。但其上层行为与原生TF一致。由于去掉了featuremap转ID的过程我们内部形象地将其称为“去ID化”。在此之上我们实现了Group Lasso FTRL频次过滤和模型压缩等一系列算法。
备注弹性特征带来一个显著的优势只要用足够强的L1稀疏性约束在单机上就能调试任意大规模的特征训练带来很多方便。我们的hashmap实现是KV化的key是特征value是vector的首地址。
离线训练优化
经过这样的改造后在离线批量学习上带来了以下变化 在线训练优化
online learning上能带来如下变化 除了性能有明显的提升之外其最大的优势是不需提前申请空间训练可以无缝稳定运行。
特征动态增删技术
弹性架构主要目的就是特征优选让模型自适应地选择最优特征进而实现稀疏化降低过拟合。本节介绍特征优选的两个核心技术
使用流式频次过滤 对特征进入进行判定。
使用Group Lasso优化器对特征进行筛选和删除。
2.1 Group Lasso 优化器
稀疏化是算法追求的重要模型特性从简单的L1正则化和Truncated Gradient[9] 再到讨论累积梯度平均值的RDA(Regularized Dual Averaging)[10] 再到目前常见的 FTRL[2] 。 然而它们都是针对广义线性模型优化问题提出的稀疏性优化算法没有针对sparse DNN中的特征embedding层做特殊处理。把embedding参数向量当做普通参数进行稀疏化并不能达到在线性模型中能达到的特征选择效果进而无法有效地进行模型压缩。
例如当包含新特征的样本进入时一个特征对应的一组参数如embedding size为7则参数数量为7被激活FTRL判定特征中的部分参数无效时也不能安全地将该特征删除。如图 因此在L1和L2正则的基础上人们引入L21正则(group lasso)和L2正则(exclusive sparsity)分别表示如下 L21早在2011年已经引入它最初目的是解决一组高度关联特征如男女应同时被保留或删除的问题我们创新地扩展到embedding的表示上以解决类似的问题。
在L21中由于内层L2正则将一个特征的所有参数施加相同的约束能将整组参数清除或保留由此决定embedding层中的某些特征对应的embedding向量是否完全删除提升模型泛化性。因此称为group lasso。
而L12则正好相反它迫使每组参数中的非0参数数量一致但值又尽可能不同但使输出神经元互相竞争输入神经元进而使特征对目标更具区分性。
对于DNN分类网络底层表示要求有足够的泛化性和特征抽象能力上层接近softmax层需要更好的区分性。因此我们通常在最底层的embedding层使用group lasso。即如下的优化目标 直接将L21正则项惩罚加入loss模型最终也能收敛但并不能保证稀疏性。因此Group lasso优化器参考了FTRL将梯度迭代分成两个半步前半步按梯度下降后半步微调实现稀疏性。通过调节L1正则项即公式中的λ能有效地控制模型稀疏性。
Group lasso是弹性计算改造后模型性能提升和压缩的关键。值得指出
在我们实现的优化器中Variable以及accum和linear两个slot也是KV存储。
L12和L21正则相结合的方法也已经有论文讨论[8]但我们还未在业务上尝试出效果。
由于篇幅限制本节不打算详细介绍Group lasso的原理和推导
2.2 流式频次过滤
讨论完特征动态删除的方法后我们再分析特征的准入策略。
2.2.1 频次过滤的必要性
在Google讨论FTRL的文章1中提到 在高维数据中大部分特征都是非常稀疏的在亿级别的样本中只出现几次。那么一个有趣的问题是FTRL或Group FTRL优化器能否能删除(lasso)极低频特征
在RDA的优化公式中满足以下条件的特征会被置0 若在t步之前该特征只出现过几次未出现的step的梯度为0随着步数增大满足上述条件变得越来越容易。由此RDA是可以直观处理极稀疏特征的。 但对于FTRL要满足 其中不仅和历史梯度有关还与历史学习率和权重w有关。 因此FTRL虽然也能处理极稀疏特征但并没有RDA那么aggressive此处还待详细地分析其下界Group FTRL与此类似。
由于FTRL在设计和推导时并未明确考虑极低频特征虽然通过增大λ确实能去除大量极低频特征但由于约束太强导致部分有效特征也被lasso在离线实验中被证明严重影响性能。其次对这些巨量极低频特征保存历史信息的工程代价是很高昂的增加几倍的参数空间和存储需求如下图 因此我们提出能否在实时数据流上模拟离线频次过滤为特征提供准入门槛在不降低模型性能的基础上尽量去除极低频特征进一步实现稀疏化
2.2.2 频次过滤的几种实现
注意 由于默认的embedding_lookup_sparse对特征执行了unique操作特征归一化以简化计算因此在PS端是不可能获取真实特征和label频次的。需要Python端对placeholder统计后上传给server端指定的Variable优化器通过slot获得该Variable后作出联合决策。
最naive的思路是模拟离线频次过滤对特征进行计数只有达到一定阈值后再进入训练但这样破坏了数据完整性如总频次6而阈值过滤为5则该特征出现的前5次都被忽略了。为此我们提出了两种优化方案
基于泊松分布的特征频次估计
在离线shuffle后的特征满足均匀分布但对在线数据流特征进入训练系统可看做泊松过程符合泊松分布
其中n为当前出现的次数t为当前的步数λ为单位时间发生率是泊松分布的主要参数T为训练总步数。为特征最低门限即最少在T时间内出现的次数。
因此我们能通过前t步的特征出现的次数n将t时刻当做单位时间则。 根据泊松分布我们可以算出剩余时间内事件发生大于等于次的概率。 每次该特征出现时都可按该概率做伯努利采样特征在t步进入系统的概率用下式计算
通过真实线上数据仿真它能接近离线频次过滤的效果其λ是随每次特征进入时动态计算的。它的缺陷是
当t越小时事件发生在t内的次数的variance越大所以会以一定概率误加或丢弃特征。
未来总的训练步数T在在线学习中是未知的。
频次过滤与优化器相分离导致不能获得优化器的统计信息。
动态调L1正则方案
在经典的FTRL实现中L1正则对每个特征都是一致的。这导致了2.2.1 中提到的问题过大的L1虽然过滤了极低频特征但也影响的了模型的性能。参考各类优化器如Adam对learning_rate的改进我们提出通过特征频次影响L1正则系数使得不同频次的特征有不同的lasso效果。
特征频次和基于MLE的参数估计的置信度相关出现次数越低置信度越低。如果在纯频率统计基础上加入一个先验分布正则项当频率统计置信度越低的时候越倾向于先验分布相应的正则系数要更大。我们经过多个实验给出了以下的经验公式 其中c是惩罚倍数为特征最低门限这两者皆为超参是当前特征出现的频次。
我们在线上环境使用了动态调节L1正则的方案 。在uvctr不降甚至有些微提升的基础上模型特征数比不使用频次过滤减少75%进而从实验证明了频次过滤对稀疏化的正向性。它的缺点也很明显特征频次和正则系数之间的映射关系缺少严谨证明。
频次过滤作为特征管理的一部分目前还少有相关论文研究亟待我们继续探索。
3. 模型压缩和稳定性
3.1 模型压缩
在工程上由于做了优化如特征被优化器lasso后只将其置0并不会真正删除在足够多步数后才删除。同时引入内存池避免特征的反复创建和删除带来的不必要的性能损失。 这就导致在训练结束后模型依然存在大量0向量。导出时要进一步做模型压缩。
由于引入了HashPull和HashPush等非TF原生算子需要将其裁剪后转换为原生TF的op。 我们将这些步骤统称图裁剪(GraphCut) 它使得线上inference引擎不需要做任何改动即可兼容弹性改造。由于有效特征大大减少打分速度相比原引擎提升50%以上。
我们将图裁剪看做TF-graph的静态优化问题分为3个步骤
第一遍遍历Graph搜索可优化子结构和不兼容的op。
第二遍遍历记录节点上下游和元数据裁剪关键op并将Variable的非0值转存至Tensorflow原生的MutableDenseHashTable。本步骤将模型体积压缩90%。
拼接新建节点重建依赖关系最后递归回溯上游节点去除与inference无关的子图结构
我们实现了完整简洁的图裁剪工具在模型热导出时调用 将模型从原先的8GB左右压缩到几百兆大小同时保证模型打分一致。
3.2 模型稳定性和监控
online learning的稳定性非常重要。我们将线上真实效果与实时模型生成的效果进行了严密的监控一旦样本偏差过多就会触发报警。
由于需捕捉时变的数据变化因而不能用固定的离线数据集评估模型结果。我们使用阿里流式日志系统sls最新流入的数据作为评估样本以滑动窗口先打分后再训练既维持了不间断的训练不浪费数据同时尽可能高频地得到最新模型效果。
我们对如下核心指标做了监控
样本监控 正负比例线上打分值和online-auc(即线上模型打分得到的auc)产出速率消费速率。
训练级监控 AUC, User-AUC(参考备注)loss, 模型打分均值与样本的正负比例对齐异常信息。
特征级管理 总特征规模有效/0/删除特征规模新增/插入/删除的速率。
整体模型和调度模型导出的时间大小打分分布是否正常是否正常调度。
业务指标uvctr,pvctr(小时级更新T1报表)。
线上与训练指标之间的对应关系如下表
通过http接口每隔一段时间发送监控数据出现异常会及时产生钉钉和邮件报警。下图是对9月20日到27号的监控从第二张图表来看模型能较好的适应当前数据流的打分分布。 User-AUC传统的AUC并不能完全描述uvctr因为模型很可能学到了不同用户间的偏序关系而非单个用户在不同offer下的点击偏序关系。为此我们使用了User-AUC它尽可能地模拟了线上uvctr的计算过程在真实实验中监控系统的uvctr小时报表与实时模型输出的User-AUC高度一致。
4. 工程实现和效果
目前算法已经在支付宝首页的多个推荐位上线。推荐系统根据用户的历史点击融合用户画像和兴趣结合实时特征预估用户CTR进而提升系统整体点击率。
我们以推荐位业务为例说明其采用了经典的widedeep的网络结构其sparse部分包含百级别的group(见下段备注1)。 一天流入约百亿样本label的join窗口为固定时长。由于负样本占大多数上游链路对正负样本做了18的降采样(见下文备注2)。
训练任务采用蚂蚁统一训练平台构建并使用工作流进行定时调度离线和在线任务的其他参数全部一致。Batchsize为512每200步即20万样本评估结果定时将模型通过图裁剪导出到线上系统。当任务失败时调度系统会自动拉起从checkpoint恢复。
该推荐业务的online learning桶最近一周相比线上多模型融合最优桶提升4.23% 相比随机对照提升达34.67% 。 另一资讯推荐业务其最近一周相比DNN基准uv-ctr提升0.77%pv-ctr提升4.78%。实验效果相比有较大的提升。
备注1 group embedding是将相似emb特征分组各自lookup求和后再concat使得特征交叉在更高层进行。其设计是考虑到不同group的特征差异很大(如user和item)不应直接对位求和。
备注2 inference打分仅做pointwise排序采样虽改变数据分布但不改变偏序关系因此并未在训练上做补偿。
5. 未来工作
弹性特征已经成为蚂蚁实时强化深度学习的核心要素。它只是第一步在解决特征空间按需创建问题后它会带来一个充满想象力的底层架构众多技术都能在此基础上深挖 在工程上可继续从分钟级向秒级优化进一步提升链路实时性并实现模型增量更新 在算法上我们正在探索如样本重要性采样自动特征学习在线线性规划与DNN的结合实现优化器联合决策等技术。
由于在线学习是个复杂的系统工程我们在开发和调优时遇到了大量的困难涉及样本回流训练平台模型打分线上评估等一系列问题尤其是稳定性但基本都一一克服。为了保证线上结果稳定可信我们在观察和优化两三个月后才发布这篇文章。
本文作者为蚂蚁金服人工智能部认知计算组的基础算法团队团队涉及图像、NLP、推荐算法和知识图谱等领域带头人为国家知名算法专家褚崴拥有定损宝和理赔宝等核心业务。
原文链接 本文为云栖社区原创内容未经允许不得转载。