DeepFM 的“前世今生”与核心机理

35 阅读6分钟

【推荐系统】万字长文,带你彻底搞懂 DeepFM 的“前世今生”与核心机理

在计算广告和推荐系统领域,CTR(点击率)预估永远是皇冠上的明珠。从早期的逻辑回归(LR),到因子分解机(FM),再到如今百花齐放的深度学习模型,我们一直在追求同一个目标:如何更精准地捕捉特征之间的复杂关系?

今天,我们不谈枯燥的代码实现,而是从底层数学原理直观逻辑出发,彻底拆解一代经典模型 —— DeepFM

无论你是刚入门的算法小白,还是在这个领域摸爬滚打的老兵,这篇文章都能帮你重新梳理 DeepFM 的核心脉络。本文将重点回答以下几个直击灵魂的问题:

  1. FM 到底有没有用 Embedding?
  2. 为什么说 DeepFM 是“显式”与“隐式”的完美结合?
  3. DNN 究竟是如何凭空变出“高阶特征交叉”的?
  4. 它比 Wide&Deep 到底强在哪里?

一、 为什么我们需要特征交叉?🍺

做推荐,最怕的就是特征“单兵作战”。

举个经典的例子: “深夜”“下雨”“用户偏好健康”“炸鸡”

  • 单看“用户偏好健康”,预测结果应该是“不推荐炸鸡”。
  • 单看“深夜”,预测结果可能是“推荐夜宵”。

但如果把它们交叉在一起:

场景:一个平时健身的人(偏好健康),在深夜下雨的时候(意志力薄弱+情绪低落),点炸鸡的概率可能会瞬间飙升。

这就是特征交叉(Feature Interaction)的魔力。普通的线性模型(LR)很难捕捉这种关系,除非你人工把它们拼成一个新特征。而我们想要的,是模型能自动学会这些。


二、 FM (Factorization Machine):二阶交互的艺术 🎨

在 DeepFM 出现之前,FM 是处理稀疏数据特征交叉的王者。

1. 误区纠正:FM 用了 Embedding 吗?

很多人认为 FM 只是简单的 One-hot 编码运算,这是一个巨大的误解。

结论放在前面:FM 不仅用了,而且是 Embedding 技术的鼻祖之一。

FM 的核心公式如下:

yFM=w,x+i=1nj=i+1nVi,Vjxixjy_{FM} = \langle w, x \rangle + \sum_{i=1}^{n} \sum_{j=i+1}^{n} \langle V_i, V_j \rangle x_i \cdot x_j

这里的 ViV_i,在传统机器学习里叫“隐向量(Latent Vector)”,在深度学习里,它就是 Embedding

  • 当输入 xix_i 是 One-hot 时,模型去矩阵里查表拿出来的那个向量 ViV_i,就是特征 ii 的 Embedding。
  • FM 通过计算两个向量的内积 Vi,Vj\langle V_i, V_j \rangle,来衡量特征 ii 和特征 jj 的匹配程度(比如“啤酒”向量和“尿布”向量夹角很小,内积很大)。

2. FM 的局限性

FM 虽然解决了二阶(两两)交互,但它有两个瓶颈:

  1. 无法自动捕捉高阶特征:比如“时间+地点+人物”的三阶关系,FM 的公式里没有这一项。
  2. 算力爆炸:如果强行把公式扩展到 3 阶、4 阶,计算复杂度会呈指数级爆炸。

三、 DeepFM:左手画圆,右手画方 ☯️

为了解决 FM 捕捉不到高阶特征的问题,DeepFM 横空出世。它的核心思想非常朴素:并行结构(Parallel Structure)

如图所示,DeepFM 由左右两部分组成:

1. 左路:FM Component(负责“显式”记忆)

这部分保持了原汁原味的 FM 结构。

  • 任务:提取 一阶(Linear)二阶(2nd-order Interaction) 特征。
  • 特点显式计算。我们清楚地知道模型在计算 Vi,Vj\langle V_i, V_j \rangle,这是可解释的物理规则。它保证了那些“显而易见”的规律(如啤酒配尿布)绝对不会被漏掉。

2. 右路:Deep Component(负责“隐式”推理)

这部分是一个多层的 DNN(深度神经网络)。

  • 任务:提取 高阶(High-order Interaction) 特征。
  • 特点隐式计算。这里没有显式的乘法公式,全是黑盒。

四、 灵魂拷问:DNN 凭什么捕捉高阶特征?🧠

这是很多同学最困惑的地方: “DNN 里明明只有加法(Wx+bWx+b)和激活函数,它是怎么模拟出乘法(特征交叉)的?”

1. 微观视角:激活函数是“开关”

我们可以把神经元看作一个带门槛的逻辑开关。

假设我们有两个特征 A 和 B,神经元公式为 y=ReLU(wAA+wBB+b)y = \text{ReLU}(w_A \cdot A + w_B \cdot B + b)

模型通过训练,自动学会了把偏置 bb 设得很低(比如 -10),把权重 ww 设得很高。

  • 只有当 A 和 B 同时出现 时,总分才能冲过 -10 的门槛,激活输出。
  • 这在逻辑上等价于:IF (A AND B) THEN 1。
  • 数学上,这就是隐式的乘法

2. 宏观视角:层级堆叠(Layer Stacking)

DNN 的“深”体现在层层递进的抽象能力:

  • Layer 1:把 Embedding 混合,捕捉简单的 2阶 组合(如“周末+啤酒”)。
  • Layer 2:把 Layer 1 的输出作为输入,捕捉 4阶 组合(如“(周末+啤酒) AND (熬夜+球赛)”)。
  • Layer N:捕捉极其抽象的 N阶 模式。

就像做冰沙,第一层搅碎,第二层混合,第三层再融合。最终的输出包含了原始特征极其复杂的交互信息,这就是 DNN 的魔力。


五、 DeepFM vs Wide&Deep:核心差异在哪里?⚔️

DeepFM 经常被拿来和 Google 的 Wide&Deep (W&D) 做对比。这也是面试必考题。

1. 告别“人工特征工程”

  • Wide&Deep:它的 Wide 部分通常是线性模型(LR)。LR 无法自动学习特征交叉,必须依赖人工根据业务经验写公式(比如 CrossProduct(User_ID, Item_ID))。这非常耗时耗力。
  • DeepFM:用 FM 替换了 LR。FM 能够自动学习所有特征的二阶交叉,实现了真正的端到端(End-to-End)训练,不再需要任何人工特征工程

2. 最强必杀技:Shared Embedding(参数共享)

这是 DeepFM 设计最精妙的地方。

  • W&D:Wide 部分和 Deep 部分通常接收不同的输入(Wide 吃离散特征,Deep 吃 Embedding)。
  • DeepFM:FM 部分和 DNN 部分共享同一个 Embedding 矩阵

这意味着什么?

同一个特征向量 ViV_i(比如“用户小明”),既要接受左边 FM 的训练(让它和“喜欢篮球”的向量内积变大),又要接受右边 DNN 的训练(让它能通过多层网络预测准点击率)。

  • 信息互补:Embedding 同时编码了低阶几何信息高阶语义信息
  • 训练加速:参数量大幅减少,反向传播效率更高。

六、 总结 📝

DeepFM 之所以经典,是因为它做到了**“中庸之道”**的完美平衡:

  1. 低阶与高阶的平衡:左手 FM 抓记忆(直觉),右手 DNN 抓泛化(推理),最后 concat 在一起,保证了信息的完备性
  2. 显式与隐式的平衡:既有数学可解释的内积公式,又有拟合能力无限的黑盒网络。
  3. 效率与效果的平衡:共享 Embedding 机制,在不增加过多计算量的前提下,大幅提升了模型的表达能力。

如果你在面试中被问到 DeepFM,请记住这句口诀:

“FM 做宽,DNN 做深;Embedding 共享是灵魂,端到端训练更迷人。”