Published on

The Bitter Lesson:从推荐系统的发展中品味苦涩的教训

Authors
Table of Contents

什么是苦涩的教训

强化学习之父 Richard Sutton 19 年写下的 The Bitter Lesson 如今被不断传颂,不断验证。

《苦涩的教训》是一篇简短但发人深省的文章,总结了 AI 研究领域几十年的经验教训。

Sutton 指出,在 AI 研究的历史中,一个反复出现的“苦涩教训”是,试图通过人类知识和特定领域的规则来设计 AI 系统的方法,往往不如那些依赖通用计算能力和大规模数据的方法有效。他认为,AI 的进步更多依赖于计算能力的提升(例如摩尔定律)和数据的积累,而不是人为设计的复杂规则或启发式方法

几个例子来说明这一点:

  1. 国际象棋和围棋:早期的棋类程序依赖专家设计的评估函数,但后来基于搜索和计算(如 AlphaGo 使用深度学习和蒙特卡洛树搜索)的系统远远超过了这些方法。
  2. 语音识别和图像识别:基于人工特征工程的方法逐渐被神经网络取代,后者通过大量数据和计算能力自动学习特征,取得了突破性进展。
  3. 计算机视觉领域:早期的方法将视觉理解为寻找边缘、或广义圆柱体、或基于SIFT特征。然而今天,这些方法都被舍弃了。现代深度学习神经网络仅使用卷积和某些类型的不变性概念,并且表现得更好。

通用方法(general methods),特别是那些能够利用计算规模化的方法,长期来看总是胜出,尽管它们可能短期内显得低效或不直观。人类倾向于注入自己的智慧和理解,但这种做法往往成为限制,因为它无法与计算和数据的指数级增长相匹敌。

这个教训之所以“苦涩”,是因为它挑战了研究者的自负——我们希望自己的洞察力和创造力是成功的核心,但事实证明,谦逊地依赖计算能力的扩展才是更可靠的路径。这一教训提醒 AI 研究者,应该优先发展能够随着计算能力增长而改进的方法,而不是过度依赖特定领域的知识

理解苦涩的教训

从统计学基础角度解读"苦涩的教训"还有另一种思路:构建模型时,我们往往面临权衡取舍:可以选择针对特定问题高度定制化的精准模型(高偏差),也可以选择适应性更强但可控性较低的灵活模型(高方差)。"苦涩的教训"启示我们应当选择后者。

为什么?因为随着计算能力和数据的增加,你可以使灵活的模型更加可靠。这就像在篮球中拥有更多的练习投篮(对应更多的数据和训练)——最终,即使每次投篮姿势不够一致你也能变得稳定(因为不追求每个投篮动作都很标准一致,而是更灵活的出手)。反之则不然——过于僵化的方法总会受到其内置假设的限制

作为 NBA 历史上伟大的投手之一,库里几乎能在各个位置把球投进那该死的篮筐,而且极其灵活,持球进攻, logo 三分,无球跑动,接球就投,投篮命中率还非常高且稳定,没有哪位对手敢放他投篮。

库里的投篮很准,但他的投篮动作不算是教科书般标准的投篮,现代篮球似乎也已经越来越少强调标准一致的投篮姿势,你能在 NBA 里找到各种千奇百怪的投篮姿势,现在篮球理念强调的是在各种位置找到空间更快的出手,跑位接到球后更少的调整动作从而更快的出手。

那这样投不准怎么办?

练啊。哪种动作对你来说能更快出手更准就练哪种。

球感不是虚无缥缈的东西,而是反复训练带来的肌肉记忆,有时候也不知道为什么,投篮动作完全变形,但是球就是能进。练习过程类似模型训练,不断的练习代表着不断给你的身体输入数据,以进不进球为损失函数,然后梯度下降不断优化身体动作后,最终形成肌肉记忆。

更灵活地出手胜过追求标准的投篮动作。更灵活代表着更通用,而更通用必须得更灵活。

此外,从投篮区域分布与命中率的角度讲,更通用意味着伟大的的得分手必须覆盖全场几乎 90% 以上的区域,同时保持领先的命中率,只在少数区域拥有高命中率是不太够的:

从数据分布上可以明显看出库里与诺维斯基何以出色,一位以平均 46%+ 的命中率覆盖了三分线,一位以平均 47%+ 的命中率覆盖了中距离。

“这直接对应了现在关于 AI 产品的讨论。垂直工作流和特定约束就像添加刚性规则——它们能让 AI 当前更可靠,但限制了其最终能达到的高度。相比之下,让 AI 更自由地运作或许在今天看来有风险,但随着模型进步,这种方式能让 AI 找到更优解。历史证明,押注于不灵活的策略往往会导致失败。

依赖领域知识的 AI 模型总是会被依赖算力的模型超越。当今的 AI 产品与这一规律呈现出惊人的相似性。”

在推荐系统中发现苦涩的教训

下面我们聊聊推荐系统中让我感触很深的 The Bitter Lesson。

在推荐系统中有两个主体,也就是 user 与 item,item 根据每个公司的业务不同而不同,电商公司中的 item 是打算销售给 user 的商品,内容平台中的 item 则是提供给 user 看的文章或视频。

根据《深度学习推荐系统》这本书,推荐系统的意义有两个:

  • 解决在“信息过载”的情况下,用户如何高效获得感兴趣信息的问题;
  • 解决产品能够最大限度地吸引用户、留存用户、增加用户黏性、提高用户转化率的问题,从而达到公司商业目标连续增长的目的。

为了实现上述的意义,就必须有一套算法给每位用户匹配最合适的 item。

制定推荐规则

“统计发现,男性用户买的 item 1 很多,而女性用户买的 item 2 更多,因此我们必须同时考虑到给男性用户多推荐 item 1,给女性用户多推荐 item 2。”

“要按照用户分层,根据不同用户的特征统计结果进行 item 的推荐,因此我们必须设计一套规则算法,比如根据用户的历史购买记录,分成高中低消费力的用户,然后给他们推荐对应价格的 item。”

基于业务的理解,结合统计学方法,人们可以设计出很多规则,然后基于这些规则给用户推荐。比如最经典的超市针对年轻爸爸们,把啤酒与尿布摆放到一起的案例,因为超市统计发现很多年轻爸爸买尿布时,也会买啤酒。

假如不用现代推荐系统的框架给分层用户做推荐的话,就是靠拍脑袋或统计设定多少消费金额的用户对应高中低哪一层,然后同一层的用户还可以根据性别划分,划分后依旧对应很多候选 item,这时候还得决定 item 的推荐顺序,或许又要选择新的一个特征标准来决定排序...

这就像一颗不断划分、不断生长的决策树。

最后,你会发现产品文档上写满各种各样的规则,每个人基于自己所谓的“业务理解”与“用户理解”不成体系且没有明确指标的制定规则,然后打补丁:新规则叠加旧规则,新规则影响到了旧规则,有用户不喜欢新规则,哦,那让我们再来调整下新规则,或者我们不管这些不喜欢新规则的用户,毕竟这是少数...

Google 发布的 Rule of ML 第 3 条规则建议很有启发性:

简单的启发式方法能让产品快速上线,但复杂的启发式规则难以维护。当你拥有数据并对目标有基本认知后,就应转向机器学习。与大多数软件开发工作一样,无论是启发式规则还是机器学习模型,你都需要持续迭代优化方案——而你会发现机器学习模型更易于更新和维护。

IMPORTANT

The Bitter Lesson:选择机器学习而非复杂启发式方法,大量复杂的业务规则是难以维护的

手动特征工程

在推荐系统中,特征工程指的是从原始数据中提取、转换和选择有用的特征,以便更好地训练推荐模型。

在推荐系统的早期阶段,工程师们常常依赖业务理解来选择特征,利用关联规则挖掘或相关性分析等方法,寻找特征与因变量之间的强相关性,然后将这些特征用于训练的逻辑回归模型(Logistic Regression)。这种方法将推荐问题转化为预测用户是否购买的二分类问题。最终,系统会推荐预测用户购买概率(Y=1)最大的商品。

LR 首先对输入筛选后的特征进行线性加权求和:

z=w0+w1x1+w2x2++wnxnz = w_0 + w_1x_1 + w_2x_2 + \dots + w_nx_n

其中的 xx 表示工程师人工找出来的有意义的特征,ww 表示逻辑回归模型要学习的权重。

然后用 Sigmoid 函数将线性输出 zz 映射到概率空间(0 到 1 之间),也就是预估的购买率:

P(Y=1X)=11+ezP(Y=1∣X) = \frac{1}{1 + e^{-z}}

最后,根据每个 item 的预估概率大小降序给用户推荐。

LR 强依赖于人工手动选择输入的特征,且特征之间没有进行特征交叉,在仅利用单一特征而非交叉特征进行判断的情况下,有时不仅是信息损失的问题,甚至会得出错误的结论。LR 本质上是一个线性模型,它只能学习特征的线性加权和,但在很多实际场景下,特征之间可能存在非线性交互。

于是,人们会基于各自的业务理解构造组合特征作为 LR 的输入,比如用职业与电脑类型这两个特征可以构造出“程序员_MacBook”这个新的特征,表明程序员更常用 MacBook 电脑。但是这一组合是对的吗?还是只是人们习以为常的偏见?

IMPORTANT

The Bitter Lesson:手动组合特征,再通过各种分析手段筛选特征的方法无疑是低效的。更遗憾的是,人类的经验往往有局限性,工程师的时间和精力也无法支撑其找到最优的特征组合。

隐向量特征交叉

2010 年,Rendle 提出了 FM 模型。

FM(Factorization Machines,因子分解机)相较于逻辑回归,主要的提升是使用了二阶的特征交叉,自动进行特征间的两两交叉,并学习两两组合后的每对特征的权重,帮助工程师解放了部分人工手动特征组合的工作

下述公式看不懂的话直接跳过,能感受到特征交叉这一概念就好了。

FM 模型的预测函数定义如下:

y^(x)=w0+i=1nwixi+i=1nj=i+1nvi,vjxixj\hat{y}(x) = w_0 + \sum_{i=1}^{n} w_i x_i + \sum_{i=1}^{n} \sum_{j=i+1}^{n} \langle v_i, v_j \rangle x_i x_j
  • 线性项 i=1nwixi\sum_{i=1}^n w_i x_iwiw_i 是特征 xix_i 的权重,捕捉每个特征的独立贡献;
  • 二阶部分 i=1nj=i+1nvi,vjxixj\sum_{i=1}^{n} \sum_{j=i+1}^{n} \langle v_i, v_j \rangle x_i x_j 表示输入特征之间的两两交叉。

具体地说,FM 为每个特征学习了一个隐权重向量 (latent vector)。在特征交叉时,使用两个特征隐向量的内积作为交叉特征的权重。如果两个特征的隐向量内积较大,那么模型就认为这两个特征之间存在较强的关联。

FM 之后又提出了 FFM(Field-aware Factorization Machines,域感知因子分解机),它是基于 FM 的一个扩展,它在处理特征交互方面提供了进一步的细化。相比 FM 模型,FFM 模型引入了特征域感知( field-aware ) 这一概念,认为不同场的特征交互应该使用不同的隐向量,使模型的表达能力更强。

简单地讲,​“域”代表特征域,域内的特征一般是采用 one-hot 编码形成的一段 one-hot 特征向量。比如说用户的性别(域),男和女分别就是来自同一个域的不同特征。例如,用户的性别分为男、女、未知三类,那么对一个女性用户来说,采用 one-hot 方式编码的特征向量为[0,1,0]​,这个三维的特征向量就是一个“性别”特征域。将所有特征域连接起来,就组成了样本的整体特征向量。

FFM 模型的预测函数定义如下:

y^(x)=w0+i=1nwixi+FFM(w,x)\hat{y}(x) = w_0 + \sum_{i=1}^{n} w_i x_i + \emptyset \mathrm{FFM}(\boldsymbol{w}, \boldsymbol{x})

FFM 的数学形式的二阶部分:

FFM(w,x)=i=1nj=i+1nvi,fj,vj,fixixj\emptyset \mathrm{FFM}(\boldsymbol{w}, \boldsymbol{x})=\sum_{i=1}^{n} \sum_{j=i+1}^{n} \langle v_{i,f_j}, v_{j,f_i} \rangle x_i x_j
  • xix_i ​:第 𝑖𝑖 个特征的值。
  • vi,fjv_{i,f_j}:表示第 𝑖𝑖 个特征针对与之交互的第 𝑗𝑗 个特征所在的域 fjf_j 的隐向量。
  • vj,fiv_{j, f_i}:表示第 jj 个特征针对与之交互的第 ii 个特征所在的域 fif_i ​ 的隐向量。
  • vi,fj,vj,fi\langle v_{i,f_j}, v_{j,f_i} \rangle:表示第 ii 个特征与第 jj 个特征之间的隐向量内积,考虑到它们各自的域。

假设我们有 nn 个特征,隐向量的维度为 kk,那么 FM 模型的参数数量则为 n×kn \times k;而 FFM 模型每个特征 xix_i 属于一个特定的 field fif_i。对于每个特征 xix_i,FFM 模型不是只学习一个隐向量,而是学习 m1m-1 个隐向量,其中 mm 是 field 的数量。每个隐向量 vi,fj\mathbf{v}_{i,f_j} 用于与其他 field fjf_j 中的特征进行交互,因此,FFM 模型的总参数量是 n×(m1)×kn \times (m-1) \times k

FFM 模型相比 FM 模型,参数量增加了 m1m-1 倍,这是因为 FFM 模型需要为每个特征学习多个隐向量,每个隐向量对应一个 field。这使得 FFM 模型能够更好地捕捉特征之间的复杂关系,但也增加了模型的复杂度和训练难度。

IMPORTANT

The Bitter Lesson:抛弃人工手动选择特征与手动组合特征,FM 这一类模型对二阶特征进行自动交叉,加上计算的力量,取得了比 LR 更好的表现。

特征工程模型化

FM 与 FFM 模型停留在了二阶特征交叉,理论上可以引申到三阶特征交叉的,甚至更高维的阶段。但由于组合爆炸问题的限制,三阶 FM 无论是权重数量还是训练复杂度都过高,难以在实际工程中实现。

2014 年,Facebook 提出了基于 GBDT+LR 组合模型的解决方案。利用 GBDT(Gradient Boosting Decision Tree) 自动进行特征筛选和组合,进而生成新的离散特征向量,再把该特征向量当作 LR 模型输入。

NOTE

GBDT (Gradient Boosting Decision Tree) 是一种集成学习算法,通过迭代训练多棵决策树来提升预测精度。每棵树都基于先前树的预测误差进行学习,逐步减小残差。最终的预测结果是所有树的预测结果的加权和。

GBDT+LR 组合模型不算是端到端的模型训练, 用 GBDT 构建特征工程,利用 LR 预估 CTR 这两步是独立训练的

gbdt+lr.png

决策树的深度决定了特征交叉的阶数。如果决策树的深度为 4,则通过 3 次节点分裂,最终的叶节点实际上是进行三阶特征组合后的结果,如此强的特征组合能力显然是 FM 系的模型不具备的。具体模型效果因场景与数据不同而不同,需要根据具体情况选择适合的模型。

IMPORTANT

The Bitter Lesson:GBDT+LR 组合模型大大推进了特征工程模型化这一重要趋势,意味着特征工程可以完全交由一个独立的模型来完成,模型的输入可以是原始的特征向量,不必在特征工程上投入过多的人工筛选和模型设计的精力

广义上讲,深度学习模型通过各类网络结构、Embedding 层等方法完成特征工程的自动化,都是 GBDT+LR 开启的特征工程模型化这一趋势的延续。

深度学习给推荐系统带来了什么

2012 年 AlexNet 将深度学习带到人们面前,之后 CNN(Convolutional Neural Network,卷积神经网络) 在计算机视觉领域大放异彩,RNN(Recurrent Neural Network,循环神经网络) 也在自然语言处理领域崭露头角。研究者们开始尝试将这些深度学习模型应用到推荐系统领域,以期解决传统推荐算法难以捕捉复杂用户行为模式和物品关联的问题。

深度学习主要给推荐系统带来:

  1. 更强的特征表达能力: 深度学习模型能够自动学习和提取高阶、非线性的特征,无需过多的人工特征工程。这使得模型能够更好地理解用户和物品的内在属性,以及它们之间的复杂关系;
  2. Embedding:即嵌入或向量化,在整个深度学习框架中,特别是以推荐、广告、搜索为核心的互联网领域,Embedding 技术的应用非常广泛,是深度学习的“基础核心操作”。不仅特征可以嵌入进行多特征融合后输入神经网络进行学习,Item2Vec 和 Graph Embedding 可以对 user 和 item 进行嵌入,分别得到 user 与 item 的向量后,通过计算两者之间的相似度可以直接对 item 进行召回;
  3. 序列建模:RNN 和 Transformer 等模型能够有效地捕捉用户的序列行为模式,从而更好地预测用户的未来行为。这对于理解用户的长期兴趣和意图至关重要。

基于以上 3 点,推荐系统在深度学习的框架下变得无比灵活:模型端到端训练,抛弃人工特征工程,轻松地融合各种模态的数据,并且能够更好地捕捉用户行为的动态变化。这使得推荐系统能够更加精准地理解用户意图,提供更加个性化和多样化的推荐结果,从而显著提升用户体验和平台价值。

Deep Crossing

Deep Crossing 模型是微软于 2016 年提出的一种深度学习推荐模型,旨在解决推荐系统中特征交叉和大规模稀疏特征处理的问题。

Deep Crossing.PNG

它的结构可以分为以下几个关键部分:

  • 输入层:输入层接收原始特征数据,这些特征通常包括离散特征(如用户ID、物品ID、类别等)和连续特征(如评分、时间等)。离散特征通常是高维稀疏的,比如用户ID可能有数百万个取值;
  • 嵌入层(Embedding):将稀疏的类别特征转换为稠密向量表示,例如,一个用户ID从 one-hot 编码(维度可能是百万级)映射到几十维的嵌入向量;
  • 堆叠层(Stacking):把不同的 Embedding 特征和数值型特征拼接在一起,形成新的包含全部特征的特征向量,该层通常也被称为连接 (concatenate) 层,由多个全连接层组成,负责特征的自动交叉组合;
  • 残差连接(Multiple Residual Units):引入了残差网络的结构,缓解了深度网络训练中的梯度消失问题;
  • 输出层:最终输出点击或转化的概率预测。在推荐系统中,输出可能是点击率(CTR)的概率值,通常使用 sigmoid 激活函数。

在 Deep Crossing 之前,推荐系统主要依赖浅层模型,如协同过滤、矩阵分解(MF)、逻辑回归(LR)和因子分解机(FM)。这些模型虽然有效,但对特征交叉的建模能力有限。Deep Crossing 标志着推荐系统进入深度学习时代,开启了利用深层神经网络处理大规模稀疏数据的趋势。

IMPORTANT

The Bitter Lesson:Deep Crossing 的提出推动了推荐系统中特征工程的自动化。在此之前,特征交叉通常需要人工设计,或者只限于二阶交叉,Deep Crossing 模型可以通过调整神经网络的深度进行特征之间的“深度交叉”​。Deep Crossing 证明了深度神经网络可以替代人工规则,自动学习复杂的特征关系,为后续模型(如 Wide & Deep、DeepFM)奠定了基础。

Wide & Deep

同一年,谷歌应用商店 (Google Play) 推荐团队推出了 Wide & Deep 模型,它的核心思想是结合线性模型的记忆能力(memorization)和深度神经网络的泛化能力(generalization),既能够捕捉显式的特征交互,又可以学习隐含的输入到输出映射。

wide&deep.png

Wide 部分是一个广义线性模型,通常使用 one-hot 编码的特征和交叉特征。它的优点是能够直接学习到用户行为和物品之间的关联,具有很强的记忆能力,能够记住历史数据中频繁出现的模式,产生类似于“如果点击过 A,就推荐 B”这类规则式的推荐

交叉积变换层是实现特征交叉组合的核心机制,基本思想是:将不同的特征进行交叉组合,创建新的组合特征,以捕捉特征之间的交互关系。

假设我们有特征 x1,x2,...,xdx_1, x_2, ..., x_d ,交叉积变换可以表示为:

ϕk(x)=i=1dxickicki{0,1}\phi_k(x) = \prod_{i=1}^{d} x_i^{c_{ki}} \quad c_{ki} \in \{0,1\}
  • ϕk(x)\phi_k(x) 是第 kk 个交叉特征;
  • ckic_{ki} 表示特征 xix_i 是否参与到第 kk 个交叉特征的构建中;

简单来说,交叉积变换是将选定的原始特征相乘,得到新的组合特征。

假设我们有以下原始特征:

  • 用户年龄段:["18-24", "25-34", "35-44", "45+"]
  • 用户性别:["男", "女"]
  • 电影类型:["动作", "喜剧", "爱情", "科幻"]
  • 观影时间:["工作日", "周末"]

交叉积变换可能会创建如下组合特征:

  • "18-24_男_动作":表示 18-24 岁男性对动作片的偏好
  • "25-34_女_爱情_周末":表示 25-34 岁女性在周末观看爱情片的偏好

Deep 部分是一个深度神经网络,我理解就是类似于上述的 Deep Crossing 那样,通常由多层全连接层组成。它的优点是能够学习到复杂的、非线性的特征组合,具有很强的泛化能力,能够推广到未见过的用户或物品。

Wide & Deep 模型将 Wide 部分和 Deep 部分的输出进行加权求和,然后通过一个 sigmoid 函数进行预测。

Wide & Deep 论文中使用的模型结构如下:

700

可以看到 Wide 部分(Cross Product Transformation)只选了用户已安装的 APP 与曝光过的 APP,这是出于推荐团队对业务场景的深刻理解而做出的选择,其实这里还是依赖人工选择特征了,尽管这个选择已经大大简化了特征工程的工作量,但仍然需要领域知识和经验。

Deep & Cross

我们一直在说特征工程模型化与自动化,也就是说 Wide 这部分是可以交给模型的,于是 Deep & Cross(DCN)模型被提出来了。Deep & Cross 模型最主要的改进是将原来 Wide & Deep 中需要手动设计的特征交叉部分,替换为可以自动学习特征交叉的 Cross Network(交叉网络)

整体的模型结构如下图,主要关注替换后的 Cross layer:

Deep & Cross Network.png

Cross Network 的核心是一种特殊的层结构,它通过以下公式进行特征交叉:

xl+1=x0xlTwl+bl+xlx_{l+1} = x_0 x_l^T w_l + b_l + x_l
  • xlx_l 是第 ll 层的输出
  • x0x_0 是原始输入特征
  • wlw_lblb_l 是可学习的参数
  • x0xlTx_0 x_l^T 表示输入特征与当前层特征的外积

Visualization of a cross layer..png

这个公式的关键在于 x0xlTx_0 x_l^T 操作,它能够:

  • 创建原始特征和当前层特征之间的所有可能交叉组合
  • 通过堆叠多层 Cross Network,实现高阶特征交叉(比如 xi×xj×xkx_i \times x_j \times x_k
  • 保持特征向量的原始维度,不会导致特征空间爆炸

通过堆叠多层 Cross Network,Deep & Cross 模型可以自动学习高阶特征交叉:

  • 第 1 层:学习二阶交叉(两个特征的组合)
  • 第 2 层:学习三阶交叉(三个特征的组合)
  • 第 L 层:学习 L+1 阶交叉

这种多层结构使模型能够捕捉更复杂的特征交互模式,而不需要显式地定义这些组合。

IMPORTANT

The Bitter Lesson:并不是说人工选择特征一定没必要,在某些场景下它仍旧有意义,但是它不够通用灵活,且效率不高。现实世界有无数个因素会共同影响一件事,人类的大脑在面对维度爆炸的时候也会显得力不从心,依靠领域知识无法有效扩展,应该考虑借助计算的力量进行扩展

DeepFM

Wide&Deep 模型的 Wide 部分还能改。

2017 年由哈尔滨工业大学和华为公司联合提出的 DeepFM(Deep Factorization Machine),用前面讲到的 FM 替代 Wide 部分。

DeepFM 的结构主要由两部分组成:FM 部分DNN 部分,旨在同时捕捉低阶特征交互(如一阶和二阶)和高阶特征交互。输入共享相同的输入特征嵌入,输出将 FM 部分的输出和 DNN 部分的输出相加,然后通过激活函数(如 sigmoid,用于二分类问题)得到最终预测。

FM 前面讲过,Deep 部分就像 Deep Crossing 那样,因此这里就不再过多赘述。

DeepFM 与 Deep&Cross 对原本 Wide&Deep 模型的 Wide 部分改造动机一样,唯一的不同就在于 Deep&Cross 模型利用多层 Cross 网络进行特征组合,而 DeepFM 模型利用 FM 进行特征组合。当然,具体的应用效果还需要通过实验进行比较。

xDeepFM

xDeepFM(eXtreme Deep Factorization Machine)是由微软亚洲研究院于 2018 年提出的模型。它在 DeepFM 的基础上进一步改进了高阶特征交互的学习,引入了 Compressed Interaction Network(CIN)显式建模高阶特征交互,从而提升模型的表达能力。

虽然 DeepFM 能够学习高阶特征交互,但其深度部分依赖于 DNN 全连接层,这种结构在捕捉某些明确的特征交叉模式时可能并不高效,这种学习是隐式的,并且发生在元素级别 (bit-wise),使得模型难以直接理解特定的交叉模式。这意味着:

  • 隐式学习:因为我们前面强调特征工程应该交给模型自己学习,导致我们无法明确知道网络学到了哪些阶数的交互,以及这些交互的具体形式;
  • 元素级别 (Bit-wise): DNN 中的交互发生在嵌入向量的各个元素之间。例如,一个特征 A 的嵌入向量的第 i 个元素可能与特征 B 的嵌入向量的第 j 个元素发生交互。这种交互可能缺乏明确的物理意义,并且对于学习有意义的特征组合来说可能效率不高。

xDeepFM 认为,有意义的特征交互应该发生在特征向量之间 (vector-wise),而不是向量内的元素之间。例如,用户 ID 特征的整个嵌入向量应该与物品 ID 特征的整个嵌入向量进行交互,以产生更有意义的组合信息。

虽说神经网络的隐式特征交互我们不可见,但是 xDeepFM 也并未抛弃 DNN,而是新引入了显式的特征交叉机制,用来学习更明确的特征交互模式,xDeepFM 的整体架构如下图:

xDeepFM.png

xDeepFM 包含三个主要组件:Linear 组件、CIN 组件和 DNN 组件,最终将线性部分、CIN 部分和 DNN 部分的输出相加,通过激活函数得到最终预测:

y^=σ(ylinear+yCIN+yDNN)\hat{y} = \sigma(y_{\text{linear}} + y_{\text{CIN}} + y_{\text{DNN}})

CIN 组件结构类似于卷积神经网络(CNN),但作用于特征维度,细节展开有点复杂,本文就不多介绍了。

虽然 xDeepFM 在理论上有更强的表达能力,但在工业场景中,模型的线上性能、延迟和资源消耗等工程因素往往比纯粹的离线指标提升更为重要。很多公司会选择在 DeepFM 基础上进行定制化改进,而非直接采用更复杂的 xDeepFM。而从论文的引用量和开发者社区的普及程度来看,DeepFM 也比 xDeepFM 更受欢迎。

IMPORTANT

在许多实际场景中,高阶特征交互的增益有限,尤其是在数据量充足的情况下,DNN 的隐式建模已经能捕捉大部分模式,CIN 的显式高阶建模带来的收益会逐渐递减,不能仅仅考虑离线指标的提升,还要综合考虑工程的实现与实时性的要求。

DIN

DIN(Deep Interest Network)是阿里巴巴在 2018 年推出的一个深度学习推荐模型,主要应用于电商场景中的商品推荐。

在电商推荐场景中,用户的历史行为数据(例如浏览、点击、购买记录)蕴含了丰富的兴趣信息。然而,传统推荐模型在处理这些数据时存在以下问题:

  1. 兴趣的多样性:用户的兴趣通常是多样的。例如,一个用户可能既对电子产品感兴趣,也对服装或书籍感兴趣。传统模型往往将用户兴趣简单聚合(如平均池化或求和池化),无法有效捕捉这种多样性。
  2. 局部激活:用户的历史行为中,只有部分行为与当前推荐的候选商品直接相关。例如,用户可能因为最近浏览了手机而对手机广告更感兴趣,而几周前购买的衣服对当前推荐的影响较小。传统模型缺乏对这种局部相关性的建模能力。
  3. 动态性:用户兴趣会随时间和上下文变化,静态的兴趣表示无法适应这种动态性。

DIN 将 NLP 领域中广泛应用的注意力机制引入推荐系统,用于衡量用户历史行为与当前候选商品之间的相关性。具体来说:

  • 对于每个候选商品(广告),DIN 会根据用户的历史行为序列(如点击过的商品),计算每个行为与候选商品的相关性权重。
  • 这些权重通过注意力网络(Attention Network)生成,最终形成一个加权的用户兴趣表示。

模型的整体结构如下图,依然是包括输入层、必不可少的嵌入层、核心的注意力层(Activation Unit)、聚合层,还有最后的输出层。

假设用户历史行为序列为 {e1,e2,...,eH}\{e_1, e_2, ..., e_H\} ,候选物品为 eae_a ,注意力权重计算公式为:

wi=f(ei,ea)w_i = f(e_i, e_a)

其中 ff 是注意力函数,可以使用 MLP(多层感知机)实现。

最终的用户兴趣表示为:

vU=i=1Hwieiv_U = \sum_{i=1}^{H} w_i \cdot e_i

那注意力函数 ff 具体是什么样的?

这里的注意力函数实际上是一个前馈神经网络(FFNN,Feedforward Neural Network),也就是上图中的 Activation Unit。由于 MLP 具备拟合任意函数的能力,因此可以直接通过训练 MLP,以用户的历史行为嵌入序列和候选物品嵌入作为输入,学习如何计算注意力权重,进而生成加权聚合的用户兴趣表示。

注意力机制本质上就是加权和,但是加权的这个机制(或者说公式)怎么设计是重点,是交给专家设计一个公式,选择某几个变量,进行 log 或者平方或者开方等等的计算得出权重?或者,直接交给 MLP,通过大量的数据训练得到最终的注意力函数 ff让模型自己去学习如何计算这些权重,而不是人为设计固定的公式

在本文的语境中,两种方式孰优孰劣不言而喻。

这不禁让我想到了最近 LLM 领域的 MoE 架构的模型。MoE 即 Mixture of Experts,专家混合(MoE)是一种在 Transformer 的基础上使用许多不同的子模型(或“专家”)的模型架构,比如 DeepSeek 就是 MoE 架构的模型。

MoE 模型有一个关键的组件——Router(路由器),负责决定将输入数据的哪些 token 分配给哪些专家进行处理,而这个路由器也被设计成一个 FFNN。

500

IMPORTANT

The Bitter Lesson:与其费尽心思设计一个固定的公式,不如交给神经网络去“学”一个最优的 ff。这种思路在现代深度学习中非常常见,因为数据量足够大时,神经网络的表现通常优于人工规则,而且足够灵活

DIEN

前面已经讲了很多特征工程的模型化和自动化了,对这方面的改进倒不是说已经山穷水尽了,但是收益已经开始大幅递减了。从这里开始,推荐系统将借鉴深度学习在 NLP 的进展,引入另一个提升的关键思路:序列建模。

早先的 CTR 模型更多关注静态特征的交叉学习,忽视了用户兴趣的动态性和时序性。而电商场景中,用户兴趣受到外部环境(如季节、促销)和内部认知(如个人偏好变化)的影响,会随时间不断演化。例如,用户可能在某段时间关注电子产品,之后转向服装,这种兴趣的漂移和多样性需要被有效建模。

如果放弃序列信息,则模型学习时间和趋势这类信息的能力就不会那么强,推荐模型就仍然是基于用户所有购买历史的综合推荐,而不是针对“下一次购买”推荐。显然,从业务的角度看,后者才是推荐系统正确的推荐目标。

DIN 的提出已经迈出了重要一步,它通过注意力机制捕捉用户历史行为中与目标项相关的兴趣分布,但它仍有两个局限:

  • 缺乏兴趣的显式建模:DIN 直接将用户行为嵌入视为兴趣表示,未深入挖掘行为背后潜在的兴趣。
  • 忽略兴趣的时序演化:DIN 未考虑用户兴趣随时间的变化趋势,也就是未建模用户行为序列中的顺序信息。

为了解决上述问题,阿里巴巴在 2019 年提出了 DIEN(Deep Interest Evolution Network),该模型特别关注了用户兴趣的动态演化过程。

DIEN 的核心思想是:用户兴趣是一个抽象概念,行为是兴趣的具现化体现,用户兴趣会随时间动态演化。为此,DIEN 提出了两个关键模块:

  • 兴趣抽取层(Interest Extractor Layer):从用户历史行为序列中提取潜在的,随时间变化的兴趣状态序列。
  • 兴趣演化层(Interest Evolving Layer):基于目标项建模与当前推荐相关的兴趣演化过程。

整个模型的结构如上图所示。

输入层主要输入按时间顺序排列的用户历史行为序列(如浏览、点击的商品 ID,通常转化为 Embedding 表示),还有目标广告、用户画像和上下文特征等等。

兴趣抽取层使采用 GRU(Gated Recurrent Unit) 来建模行为序列的时序依赖性。它按时间顺序处理用户的行为 Embedding 序列(比如 [item_1_emb, item_2_emb, ..., item_T_emb]),并输出每个时间步 t 的隐藏状态 hth_t。这个 hth_t 就代表了用户在时间点 t 时的兴趣状态。

NOTE

GRU 是一种改进的 RNN(循环神经网络),它通过“门控机制”来控制信息的保留和遗忘,让模型记得重要的信息,忘掉不重要的,从而更好地处理长序列数据。在早期的 NLP 领域中发挥着重要的作用。

具体来说,GRU 主要包含以下几个关键部分:

  • 更新门 (Update Gate): 控制有多少信息从之前的隐藏状态传递到当前隐藏状态。
  • 重置门 (Reset Gate): 控制有多少信息从之前的隐藏状态被遗忘。

通过这两个门,GRU 可以动态地调整信息的保留和遗忘,从而更好地适应不同的序列模式。与 LSTM 相比,GRU的参数数量更少,缓解了梯度消失的问题,训练收敛速度更快,因此成了DIEN序列模型的选择。

值得注意的是,GRU 的隐状态(Hidden State)直接作为兴趣表示可能不够准确,因为隐状态更多反映序列的整体模式,而非具体兴趣。为提升兴趣表示的准确性,DIEN 引入了一个辅助损失函数来监督兴趣抽取的训练:用当前时刻的兴趣状态预测下一时刻的行为

对每个用户行为序列,结合正样本(实际点击行为)和负样本(随机采样的未点击行为)计算辅助损失,约束兴趣表示与实际行为的关联性。

对于用户 ii 在时刻 tt 的兴趣状态 htih_t^i,下一时刻的行为嵌入 ebi[t+1]e_b^i[t+1] 和负采样行为嵌入 e^bi[t+1]\hat{e}_b^i[t+1],辅助损失为:

Laux=1Ni=1Nt=1T1[logσ(htiebi[t+1])+log(1σ(htie^bi[t+1]))]L_{aux} = -\frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T-1} \left[ \log \sigma(h_t^i \cdot e_b^i[t+1]) + \log(1 - \sigma(h_t^i \cdot \hat{e}_b^i[t+1])) \right]

其中,σ\sigma 是 Sigmoid 函数,NN 是样本数,TT 是序列长度。

最后,CTR 的全局损失函数为原来的损失函数加上上述的辅助损失函数。

DIEN 兴趣演化层相比兴趣抽取层最大的特点是加入了注意力机制。兴趣演化层注意力得分的生成过程与 DIN 完全一致,都是当前状态向量与目标广告向量进行互作用的结果。也就是说,DIEN 在模拟兴趣进化的过程中,需要考虑与目标广告的相关性。

兴趣演化层完成注意力机制的引入是通过 AUGRU(GRU with Attentional Update gate,基于注意力更新门的 GRU)结构,AUGRU 在原 GRU 的更新门 (update gate) 的结构上加入了注意力得分。这一设计使得注意力权重可以控制更新门的强度,相关性高的历史兴趣对当前状态的贡献更大。

总而言之,DIEN 是深度学习在推荐系统领域,特别是用户行为序列建模方面的一个重要进展。它通过巧妙设计的兴趣提取层、辅助损失以及核心的兴趣演化层(注意力机制 + AUGRU),成功地捕捉了用户兴趣的动态演变过程,并关注与目标相关的兴趣,从而显著提升了 CTR 预估的准确性。

IMPORTANT

The Bitter Lesson:在推荐系统中,基于特定用户数据的固定算法可能对某些群体效果良好,但难以适应多样化人群。而从更广泛模式中学习、具备灵活性的模型,随着数据积累能够持续优化,最终能提供更精准的推荐。

统计学与现代 AI 的范式分野

曾经有人跟我说,统计学能解决 90% 的问题,而机器学习解决剩下的 10%。

在我看来这个观点是过时且苦涩的,一是把统计学与机器学习割裂开了,二是低估了飞速发展的机器学习(AI)的能力,三就是苦涩的教训。我觉得应该是统计学能解决 90% 的问题,而机器学习(尤其是以深度学习为代表的 AI)能解决 1000%+ 的问题。机器学习解决的不仅仅是统计学剩下的问题,还包括统计学无法很好解决的问题,而机器学习能够解决的问题,只占到问题宇宙的一点点,但我相信机器学习能解决的问题会越来越多。

吴恩达的 Newletter:"机器学习之所以能够取得成功,其中一个原因是它广泛接纳了来自各个领域的研究成果。早在 19 世纪初,数学家勒让德(Legendre)和高斯(Gauss)就提出并应用了最小二乘损失函数进行线性回归——这比计算机的发明还要早得多。而如今,机器学习不仅继承了这些经典算法,还将其作为入门课程的重要内容。

相比之下,大约 20 年前,许多大学的统计学系在看到机器学习的发展后表示:这不是真正的统计。这就是为什么机器学习在计算机科学领域比在统计领域发展得更快的原因之一。(幸运的是,从那以后,大多数统计部门对机器学习的态度变得更加开放了。)"

在推荐系统、语音识别、计算机视觉、自然语言处理(尤其是现在的 LLM)和蛋白质结构设计等领域,仅靠传统统计学习是无法达到现在的成果的。

早期机器学习中的许多基础算法(如线性回归、逻辑回归、线性判别分析等)源于统计学,在进入深度学习时代后,统计学习与机器学习(特别是深度学习)之间的关系发生了显著变化,同时范式也随之发生了以下转变:

  • 从特征工程到端到端学习;
  • 从模型驱动到数据驱动;
  • 从解释性到预测性;
  • 理论基础的扩展。

深度学习模型通常参数量巨大、结构复杂、高度非线性,其训练依赖大规模数据和算力,并且其内部工作机制往往难以解释(“黑箱”问题更突出)。这与传统统计学习强调模型简洁性、可解释性、有明确假设和理论保证的风格形成了鲜明对比,两者在实践层面开始拉开距离,而且深度学习在泛化能力上的成功,打破了传统统计学习对过拟合的直觉理解

这不仅是范式上的变化,似乎更是一种科学哲学上的转型:我们不再强求试图解释整个世界,而是学会用数据与计算去建构对世界最有效的表征。

当问题规模可控、解释性优先时,统计学的严谨性仍具优势;而当数据洪流不可阻挡、模式复杂远超人工设计时,机器学习的自适应能力(泛化能力)与强预测性便成为必然选择。


欢迎关注微信公众号👏 300
欢迎微信扫码加入我的付费知识星球👏 300