一、写在前面
关于标题所承载的话题,一直有计划写个总结,没料到各种耽搁,从17年底拖到了19年的今天。不过这也带来了一点额外的收获,18年呈现的新挑战让我对技术的发展脉络和关键点有了更深刻的认知。因此在这个时间点,在深度学习(Deep Learning,下文简称DL)落地互联网、驱动业界技术的轮子旋转了差不多第一圈的时候,系统地把我们的实践经验做个梳理和盘点,跟大伙聊聊,对业界、对不少还在这条路上折腾的同行们,权当一个可做粗浅参考的路标。此外,既然踩在了第二圈即将转动的交叉点附近,也斗胆对下一阶段技术的发展抛些板砖,谈谈我们看到的挑战和趋势。
能力有限, 本文主要以点击率(Click-Through Rate, CTR)预估技术这个战场来展开叙述: 1) 这是我熟悉的主场,下文叙述也主要以我负责的阿里定向广告点击率预估技术发展过程为蓝本; 2) 我常把CTR预估技术类比为数学领域的黎曼猜想,它是镶嵌在互联网应用技术上的一颗闪亮的明珠,它的技术前进既是业界技术的真实写照、很多时候也是引领和驱动互联网应用技术发展的原力(广告领域的性价比因素)。当然资深的从业者们应该都清楚,互联网一大批核心技术都跟CTR预估有著千丝万缕的联系,因此这里技术的探讨足够典型。
为了不引起误解,提前交代一下,本文主要是基于我们团队公开发表的论文,探讨技术为主,不宜披露的数字都隐去了。这些技术绝大部分都已经在实际生产系统中落地、服务著阿里典型业务(如定向广告、信息流广告等)的主流量,且取得了显著的收益。一个可以公开的数字是,基于DL的CTR技术迭代已经带来了超过百亿人民币规模的直接广告收入增长。目前在国内,阿里妈妈的广告市场份额是无可争议的第一。因此读者可以放心,这些技术不是华而不实的炫技,而是真正经受过工业级规模洗礼的实战利器。此外,本文不是详细地给大家解读paper,而是跳出结果、回归技术思考,探讨DL驱动这个领域技术发展的过往、现在和未来。
倡导:技术的封闭性在open-source时代已经不堪一击。业界顶尖团队的领先优势最多保持半年到一年,拥抱开放、共同推进行业技术的发展是不可阻挡的洪流,也是我们行为背后的驱动力。
二、深度学习驱动的CTR预估技术演化
0. 浅层模型时代:以MLR为例
2005-2015这十年间,大规模机器学习模型(特指浅层模型)一度统治著CTR预估领域,以G/B两家为代表的」大规模离散特征+特征工程+分散式线性LR模型」解法几乎成为了那个时代的标准解。相关的工作相信读者们耳熟能详,甚至据我所知今天业界的不少团队依然采用这样的技术。
阿里在2011-2012年左右由@盖坤同学创新性地提出了MLR(Mixed Logistic Regression)模型并实际部署到线上系统,同时期也有如FM模型等工作出现。这些模型试图打破线性LR模型的局限性,向非线性方向推进了一大步。
我在2014年加入阿里定向广告团队,不久负责了Ranking方向,推进CTR技术的持续迭代是我工作的主航道之一。作为MLR模型的诞生团队,显然我们对它有著强烈的偏爱。最初MLR模型的主要使用方式是」低维统计反馈特征+MLR」,这是受阿里技术发展初期的轨道限制,读者不用太惊讶。我们做的第一个工作,就是试图将MLR模型推向大规模离散特征体系,核心思考是细粒度的特征刻画携带的信息量要远比统计平均特征的解析度高,这种特征体系至今在整个业界都是最先进的。要完成这样一个升级,背后有巨大的挑战(在DL时代启动初期,我们也遇到了类似的挑战),具体包括:
- 从数百维统计特征到数十亿离散特征,训练程序要做重大升级,从数据并行模式要升级到模型并行方式,且非线性模型复杂度高,需要充分利用数据的结构化特点进行加速;
- 」大规模离散特征+分散式非线性MLR模型」解法直接从原始离散特征端到端地进行数据模式学习,至少在初期时我们没有做任何的特征组合,完全依赖模型的非线性能力。在这种互联网尺度(百亿参数&样本)的数据上,模型能不能学习到兼具拟合能力与泛化能力的范式?
- 这种超大规模数据上的非凸优化(MLR加入正则后进一步变成非光滑)学术界鲜有先例。它的收敛性是一个巨大的问号。
当然,结果是我们成功了。15年初的时候成为了新的技术架构,在定向广告的所有场景都生产化落地,取得了巨大的成功。但是我们不得不承认,」大规模离散特征+分散式非线性MLR模型」的解法在业界并没有大规模地被采纳,有多种原因,技术上来讲MLR模型的实现细节我们直到17年才正式地写了一篇论文挂在了arxiv上,代码也没有开源,大家想要快速尝试MLR也不太方便;其次LR+特征工程的解法深深影响了很多技术团队的思考方式和组织结构,我们后面会谈到,这种对特征工程的依赖直到DL时代还大量保留著,一个重要的因素也是因为特征工程比较符合人的直观认知,可以靠快速试错并行迭代,MLR这类非线性端到端的解法需要比较强的模型信仰和建模能力。
大约从14年到16年,我们在基础MLR架构上做了大量的优化,后来以MLR的论文公布为契机,我在阿里技术官微里面写了一篇介绍文章,里面披露了大量的改进细节,大家有兴趣可以翻阅翻阅,算是致敬MLR时代:MLR深度优化细节
1. 技术拐点:端到端深度学习网路的突破
15年的时候,基于MLR的演算法迭代进入瓶颈。当时认识到,要想进一步发挥MLR模型的非线性能力,需要提高模型的分片数——模型的参数相应地会线性增长,需要的训练样本量同样要大幅度增加,这不太现实。期间我们做了些妥协,从特征的角度进行优化,比如设计了一些直观的复合特征,典型的如」hit类特征」:用户历史浏览过商品A/B/C,要预估的广告是商品C,通过集合的」与」操作获得」用户历史上浏览过广告商品」这个特征。细心的读者应该很容易联想到后来我们进一步发展出来的DIN模型,通过类似attention的技巧拓展了这一方法。后来进一步引入一些高阶泛化特征,如user-item的PLSA分解向量、w2v embedding等。但这些特征引入的代价大、收益低、工程架构复杂。
15年底16年初的时候我们开始认真地思考突破MLR演算法架构的限制,向DL方向迈进。这个时间在业界不算最早的,原因如前所述,MLR是DL之前我们对大规模非线性建模思路的一个可行解,它助力了业务巨大的腾飞,因此当时够用了——能解决实际问题就是好武器,这很重要。在那个时间点,业界已经有了一些零散的DL建模思路出现,最典型的是B家早期的两阶段建模解法——先用LR/FM等把高维离散特征投影为数千规模的稠密向量,然后再训练一个MLP模型。我们最初也做过类似的尝试如w2v+MLR/DNN,但是效果不太显著,看不到打败MLR的希望(不少团队从LR发展过来,这种两阶段建模打败LR应该是可行的)。这里面关键点我们认为是端到端的建模范式。