首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

算法工程师的技术成长之路

本文根据网易广告算法总监曾祥林老师在DataFun AI Talk中分享的《大数据时代-算法工程师的技术成长之路》编辑整理而成。

今天分享的内容分为以下几个部分,首先Beta阶段可以认为是研究生阶段和算法工程师实习生阶段,接下来是特征调研、在线应用、模型训练。这四个部分是我在算法领域的技术成长中不同阶段的相关工作总结。最后一部分是深度学习,深度学习模型虽是众多模型中的一种,由于最近比较火所以特意专门分享一下。

1. Beta阶段

Beta阶段就是在研究所做研究或者去公司实习做模型调研性质工作,主要偏学术,与工业界存在一定差距。这个阶段的一个主要工作是尝试不同的模型。学术界可以尝试使用和改进很多复杂的模型而工业界换模型比较困难,原因有:

1.学术界实验数据一般是固定的,如参加比赛数据是现成的,可以直接使用训练工具或平台训练出模型;工业界面临的问题就是机器有限,数据足够多,很多时候一个简单的模型用足够多的训练数据训练出来的效果不一定比复杂的模型差。还有一个就是时间成本,一般越简单的模型训练时间越短。学术界可能训练一个模型可以用几天,但是工业界很难接受。工业界的问题对模型时效性都有要求。

2.学术界比如比赛过程中评估的标准和模型的目标非常一致,而工业界把模型应用到一个系统中,系统收益的评估标准和模型目标不一定很一致。以广告系统的CTR预估为例。整个广告系统是非常复杂,CTR预估只是其中的一部分。一个简单的广告系统CTR预估越准确,点击率和收入提升也越明显。但是实际系统中CTR预估后有很多后续处理,假设有一些业务对预估CTR的稳定性要求很高可能对CTR预估结果分段处理,CTR预估精度提升并不能带来点击率和收入的明显提升。

3.实际系统中线上换模型,实现是有成本的,因此工业界换模型比较慎重。

Beta阶段的工作除了尝试不同的模型外,一个重要的工作就是调参,主要是需要人工设置的超参。超参有模型结构的参数,如LR模型的正则化系数,GBDT模型树的深度和个数;还有优化算法的参数,如学习率、步长等。Beta阶段工作的模型评估的特点是:主要是离线指标,一般不涉及线上应用。实际上离线指标与线上指标差异比较大,离线评估的好,线上不一定好。总结一下:Beta阶段的工作重点是尝试不同的模型和调参,而实际上工业界的算法工程师的重点并不在这一块,而是数据和特征工程。

2. 特征调研

当前是一个大数据时代,数据是承载信息的载体,大数据特点是数据量大、维度多。大数据常见的处理方式是分布式处理,经常使用的平台有Hadoop、Spark,也可能用到Hive,避免直接写MapReduce。大数据分布式处理是一个算法工程师基本的工作技能,模型训练是有监督的,需要有样本,样本要包含label,要得到label涉及到的基本操作有拼接,有时候也需要将不同维度的数据拼接到一起。高级处理有去噪、采样、SA算法,因为实际业务数据可能含有大量噪声和具有不平衡的特点。

有了大数据处理能力,接下来就是特征调研。这一阶段就是通过增加特征提高模型精度,这一阶段的特点就是要高效,只有为了性能问题才会去删减特征,正常的都是增加特征。加特征要考虑便捷性问题,能改配置文件的尽量别改代码,如果需要改代码要考虑是不是可以简单实现,还有就是代码改动后能够很快的跑出特征,但是现在数据海量,模型训练数据时间周期长,有可能是半月或几个月,所以特征抽取的性能很关键。因此为了方便加特征,一般都会开发一些通用的特征抽取框架,目的就是为了加特征变的很方便。为了高效跑出模型,特征抽取的性能很关键,除了优化特征抽取框架本身的性能和特征抽取过程的性能外,还有一些技巧比如只抽取新增加的特征,然后与基线做一个拼接,这样的好处第一个是快,第二个是避免多次抽取基线特征。多次抽取基线特征会有两个问题:

1.多次抽取不一定抽取的都对,存在一些连续值特征的时候可能不小心特征会抽错;

2.一个团队如果好多人同时做特征调研,每个人都跑出所有的特征,这是对计算资源和存储资源的一种很大的浪费。

接下来介绍下特征调研的一些事情,主要是特征设计和特征分类。特征设计没有通用的方法论,特征的设计依赖于对产品的理解。如果不想在特征设计上花费太多时间,简单的方法就是引入更多的数据,还有就是利用端到端的深度学习去学习进行特征设计,但是它不能完全取代特征设计,有时还是需要人工进行特征组合。

特征分类有连续值和离散值,大数据中大部分数据(比如IP、操作系统、机型)是离散的,因此离散模型在工业界较多,如LR模型、FM等。特征分类也可以分成单边特征和组合特征,单边特征就是一些原始字段,组合特征就是多个维度去组合。刚开始做特征调研由于特征较少不会去做特征选择,但是随着特征增多必然会删减特征。特征选择分为两类,一种是删掉一些特征类;第二种就是特征值的选择,就是特征类不变,删除无用的特征值:有两种方法,一种是模型的正则化,这类方法坏处就是训练完才知道特征无用,还有一种方法是训练前,如Fea-G算法,以及基于新特征过滤的方法。

3. 在线应用

训练出模型后应用到线上,如果算法工程师生成一个模型后不管了,生成的是一些模型文件,这对算法工程师成长是不利的,算法工程师对整个系统的影响也是无法控制的。模型优化没有带来产品指标的提升不一定是模型的问题,有可能是应用出问题。

常见的问题第一个就是一致性问题,最严格的就是打分一致性。但是有时并不一定能完全实现,比如预测的时候只能用请求的时间,可能训练的时候用的是曝光的时间;还有就是位置,预测的时候还不知道位置。特征一致性就是模型训练的特征和在线打分的特征要一致,正常情况下绝大部分特征是要做到离线和在线一致的。还有一种一致性就是离线和在线的AUC的一致性。解决特征一致性最根本的解决方法是在线预测的时候把特征打印出来,离线不再抽取特征,实际中要解决在线打印特征的性能问题。

第二个就是关注应用场景,分两点介绍,第一个就是对系统影响有多大,比如CTR预估,从N条素材中选一条,N有多大决定选择的空间。第二个就是预测出的打分如何被使用,如果打分高的排在后面,这种预测越精准效果越差。不同产品要求不同,比如话语权较高的广告商的广告位置变化不能太大,但是CTR预估是不能保证这一点的,这就需要在后续做一些处理。

还有一个快速迭代实验也是比较关键的,模型训练上线,要做多个实验,这样能够提高效率,依据你的流量大小看同时能做多少组A/Btest。第一个就是一个业务有很多环节,多个环节是否能并行做实验,因此不能所有的实验都平分百分之百的流量,这样就要分层进行实验。第二个就是要关注上线的实验效率,最好的模式是模型训练后直接修改配置文件就可以上线。第三点就是实验数据的置信度,虽然系统运行能支持并行,效率也很高,但是实验要观察多少时间,数据可不可信。一种简单有效的方法是可以做AA实验,看策略上相同的实验需要观察多长时间数据效果一样。最后就是线上性能问题,第一点就是在线打分性能情况,面临的是一个超时问题,超时一般发生在候选队列很长,竞争激烈,这样意味着都是商业价值高的请求,这种对线上的损失比较严重,因为最有商业价值的流量减少。第二点是模型大部分是单机存储,要关注模型的加载方式。第三点就是模型的更新方式,一个是更新频率,另一个是全量更新还是增量更新。

4. 模型训练

模型训练的数据处理能力和训练速度很重要。海量数据一般是采用分布式训练的方式,实现方法要保证数据量增加了通过增加机器仍然可以训练出模型。第二个就是提高训练速度,以及提高收敛的速度,优化算法有GD、LBFGS等,除了优化算法实际过程中还有一些经验。如模型训练初始权重不要设为0或者随机,基线特征权重不要设为0,利用老的模型能够加快收敛速度和使用更少的历史数据。另外一种方法就是增量训练,只用最新一天的数据,同时注意老数据的衰减。

在线训练一定程度降低了资源需求,可以提高模型更新的频率,在实际应用中对模型的时效性都是有要求;简单模型如果更新频率较快也不比复杂模型效果差。学习算法典型的就是FTRL,SOA算法。算法工程师对模型训练工具的开发必须具备定制需求升级能力,你并不需要重新开发一个工具或平台,但在实际应用都需要一些定制需求。

5. 深度学习

深度学习火热的一个原因就是它解决了特征学习的问题,特征挖掘方面比较典型的就有DANOVA算法。深度学习除了可以做各种预估,还可以生成一些向量化的东西,隐层输出可以是User/Ad/Doc/Image的矢量化vector,这个可以用到召回阶段,还可以做聚类。如果映射的vector在空间都可比,应用场景会更广。在实际应用中DNN也会遇到各种问题,常见的就是在线打分性能问题,在线预测可以看成是一个矩阵运算;还有一个就是其收益不一定很大,DNN模型复杂,但是需要足够的数据量,数据量不够不一定能体现DNN优势。第三个就是参数很多,需不需要花费大量精力去调参,还有一个就是稳定性,DNN对数据不一致性、数据噪声更敏感。

DNN也可以和其他模型进行融合,如可以和宽度模型结合。实际的广告系统中除了CTR预估,还有就是机制、预算控制、自动调价等,对线上影响更为直接,这样的场景更适合用强化学习。最后就是深度学习与强化学习如何结合的问题。

作者介绍:

曾祥林,2009年硕士毕业于中科院自动化研究所模式识别国家重点实验室,先后在百度凤巢、搜狗搜索广告、猎豹移动商业部门从事广告算法技术工作,目前任职于网易广告算法总监

注:关注文章底部公众号,回复【成长之路】,可下载祥林老师分享PPT。

——END——

内推信息:

如下方向:广告工程方向c/c++开发实习生,CTR/CVR预估工程leader广告算法工程师深度学习高级工程师,广告算法实习生,计算机视觉高级工程师,计算机视觉实习工程师。Base北京,想加入祥林老师团队的同学,欢迎投递简历。

更多干货文章:

DataFun定位于最“实用”的数据科学社区,主要形式为线下的深度沙龙、线上的内容整理。希望将工业界专家在各自场景下的实践经验,通过DataFun的平台传播和扩散,对即将或已经开始相关尝试的同学有启发和借鉴。DataFun的愿景是:为大数据、人工智能从业者和爱好者打造一个分享、交流、学习、成长的平台,让数据科学领域的知识和经验更好的传播和落地产生价值。

DataFun社区成立至今,已经成功在全国范围内举办数十场线下技术沙龙,有超过一百位的业内专家参与分享,聚集了万余大数据、算法相关领域从业者。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181024G1J9ES00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券