第 33 题:DeepFM的共享Embedding设计,Wide侧和Deep侧的学习冲突?
题目
DeepFM的共享Embedding设计,Wide侧和Deep侧的学习冲突?
完整讲解
一、共享 Embedding 设计
DeepFM 由 Wide 侧(FM 部分)和 Deep 侧(DNN)组成,两者共用同一套特征 Embedding。具体来说:每个特征 $i$ 对应一个隐向量 $\boldsymbol{v}_i \in \mathbb{R}^k$;FM 的二阶项用 $\langle \boldsymbol{v}_i, \boldsymbol{v}_j \rangle$ 计算,DNN 则把所有特征的 $\boldsymbol{v}_i x_i$(或仅非零对应的 $\boldsymbol{v}_i$)拼成一个大向量后过多层全连接。这样做的优点有三:(1) 只存一份 embedding,参数与显存更省;(2) FM 显式学二阶、DNN 学高阶,信息在同一表示空间里互补;(3) 端到端训练,无需人工宽特征。
二、Wide 侧与 Deep 侧在学什么
- Wide(FM):拟合「二阶特征交叉」的线性组合,梯度主要来自 FM 的损失分量,倾向于把共现频繁的 $(i,j)$ 用 $\boldsymbol{v}_i^\top \boldsymbol{v}_j$ 拟合好,embedding 会往「可分解的、逐对内积有意义」的方向走。
- Deep(DNN):拟合高阶、非线性组合,梯度来自 DNN 的损失分量,倾向于把 embedding 变成「堆叠后经非线性能预测目标」的表示,可能更强调全局模式、冗余或平滑。
两边的目标函数是同一个(如 CTR 的 BCE),但对同一组 $\boldsymbol{v}_i$ 的梯度方向可能不一致:FM 希望两两内积有用,DNN 希望拼接后整体有用,有时会「抢」embedding 的维度,导致某一侧学得不够好。
三、学习冲突的典型表现与缓解
表现:训练时 FM loss 与 DNN loss 下降不均衡;或验证集上单独 ablate 掉 FM/Deep 某一侧时,发现共享 embedding 时某一侧明显弱于「该侧单独一套 embedding」的版本,说明存在冲突。
常见缓解:
- 损失加权:给 Wide 和 Deep 的 loss 加不同权重(如 $\alpha \mathcal{L}{FM} + (1-\alpha)\mathcal{L}{DNN}$),让一侧不要过度主导梯度。
- 梯度裁剪 / 归一化:对两路梯度分别做 scale 或 clip,避免某一侧梯度远大于另一侧。
- 分阶段或渐进训练:先主要训 FM(或先训 DNN)若干 epoch,再联合微调,减轻早期「抢参数」。
- 结构上适度解耦:例如 DNN 不用全部 embedding 维度,或给 DNN 单独加一层从 embedding 到「Deep 专用」的线性映射(相当于给 Deep 一点专用容量),再与 FM 共享底层 embedding,冲突会小一些。
面试要点
- 能说清 DeepFM 的共享 Embedding:FM 与 DNN 共用同一 $\boldsymbol{v}_i$,FM 用内积、DNN 用拼接后 MLP。
- 能解释「学习冲突」:同一组参数要同时满足 FM 的二阶内积目标和 DNN 的高阶非线性目标,梯度方向可能不一致,导致一侧被压制。
- 能列举 1~2 种缓解方式:损失加权、梯度 scale、分阶段训练、或结构上给 Deep 一点专用容量。
记忆要点
- DeepFM:Wide(FM) + Deep(DNN) 共享一套 embedding;省参数、端到端。
- 冲突:FM 要两两内积好、DNN 要整体表示好,梯度可能抢 embedding。
- 缓解:loss 加权、梯度归一/裁剪、分阶段训、或 DNN 侧少量专用层。