众所周知,深度学习在计算机视觉、语音识别、自然语言处理等领域最先取得突破并成为主流方法。但是,深度学习为什么是在这些领域而不是其他领域最先成功呢?我想一个原因就是图像、语音、文本数据在空间和时间上具有一定的内在关联性。比如,图像中会有大量的像素与周围的像素比较类似;文本数据中语言会受到语法规则的限制。CNN对于空间特征有很好的学习能力,正如RNN对于时序特征有强大的表示能力一样,因此CNN和RNN在上述领域各领风骚好多年。
在Web-scale的搜索、推荐和广告系统中,特征数据具有高维、稀疏、多类别的特点,一般情况下缺少类图像、语音、文本领域的时空关联性。因此,如何构建合适的网络结构以便在信息检索、推荐系统和计算广告领域取得良好的特征表示能力,进一步提升最终的业务效果成了学术界和工业界共同关注的问题。
本文在跟踪了最近主流的互联网业务中大量使用的排序模型的基础上,总结出了深度CTR、CVR预估模型发展演化的三条主线,跟大家分享。
- 第一条主脉络是以FM家族为代表的深度模型,它们的共同特点是自动学习从原始特征交叉组合新的高阶特征。
- 第二条主脉络是一类使用attention机制处理时序特征的深度模型,以DIN、DIEN等模型为代表。
- 第三条主脉络是以迁移学习、多任务学习为基础的联合训练模型或pre-train机制,以ESMM、DUPN等模型为代表。
其中前两条主脉络虽然出发点不同,但个人认为也有一些共通之处,比如attention机制是不是可以在某种程度上理解为一种特殊形式的组合特征。第三条主脉络属于流程或框架层面的创建。本文的主要目标是理清楚第一条主线中各个经典的深度模型的发展演化脉络,包括它们的优缺点和共通之处。
背景
构建好的特征对于机器学习任务来说至关重要,它关系到模型的学习难易程度及泛化性能。好的特征是相互独立的有区分性且易于理解的特征,具体地可以参考《何为优秀的机器学习特征》。
交叉组合原始特征构成新的特征是一种常用且有效的特征构建方法。哪些特征需要被交叉组合以便生成新的有效特征?需要多少阶的交叉组合?这些问题在深度学习流行之前需要算法工程师依靠经验来解决。人工构建组合特征特别耗时耗力,在样本数据生成的速度和数量巨大的互联网时代,依靠人的经验和技能识别出所有潜在有效的特征组合模式几乎是不可能的。一些有效的组合特征甚至没有在样本数据中出现过。
那么,能否自动构建有效的交叉组合特征?答案是肯定的。在深度学习之前,一些有益的尝试是把特征组合的任务交给子模型来学习,最经典的方法就是Facebook在2014年的论文中介绍的通过GBDT(Gradient Boost Decision Tree)模型解决LR模型的特征组合问题。该方法思路很简单,特征工程分为两部分,一部分特征用于训练一个GBDT模型,把GBDT模型每颗树的叶子节点编号作为新的特征,加入到原始特征集中,再训练最终的LR模型。详细介绍可以查看我之前的一篇博文:《主流CTR预估模型的演化及对比》。此类解决方案在特征工程阶段就引入了机器学习模型,虽然可以部分解决问题,但还是过于麻烦,不够灵活。
要避免上述麻烦,自然而然就是要引入端到端学习的思路,即用一个统一的模型同时完成特征组合和目标拟合的任务。因子分解机(Factorization Machines, FM)模型是第一个从原始特征出发,端到端学习的例子。然而,FM毕竟还是一个浅层模型,经典的FM模型只能做二阶的特征交叉,模型学习复杂组合特征的能力偏弱。尽管如此,FM提出了一种很好的自动学习交叉组合特征的思路,随后融入FM模型思路的深度学习模型便如雨后春笋般应运而生,典型的代表有FNN、PNN、DeepFM、DCN、xDeepFM等。关于这些模型的介绍和对比,在我之前的两篇博文中也有详细介绍,感兴趣的读者可以查阅《主流CTR预估模型的演化及对比》、《玩转企业级Deep&Cross Network模型你只差一步》。
本文的其余内容将会对这些模型做一个详细的复盘,同时对该主线的集大成者xDeepFM模型做一个详细的介绍,其中包括一些自己对模型的理解,实际的使用心得,以及某些模型实现时的一些trick。文章的最后还会提供某些模型的源代码链接。
特征组合的演化路线
从FM模型说起,FM通过特征对之间的隐变量内积来提取特征组合,其函数形式如下: