sgr-interview-300

第 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 侧在学什么

两边的目标函数是同一个(如 CTR 的 BCE),但对同一组 $\boldsymbol{v}_i$ 的梯度方向可能不一致:FM 希望两两内积有用,DNN 希望拼接后整体有用,有时会「抢」embedding 的维度,导致某一侧学得不够好。

三、学习冲突的典型表现与缓解

表现:训练时 FM loss 与 DNN loss 下降不均衡;或验证集上单独 ablate 掉 FM/Deep 某一侧时,发现共享 embedding 时某一侧明显弱于「该侧单独一套 embedding」的版本,说明存在冲突。

常见缓解

  1. 损失加权:给 Wide 和 Deep 的 loss 加不同权重(如 $\alpha \mathcal{L}{FM} + (1-\alpha)\mathcal{L}{DNN}$),让一侧不要过度主导梯度。
  2. 梯度裁剪 / 归一化:对两路梯度分别做 scale 或 clip,避免某一侧梯度远大于另一侧。
  3. 分阶段或渐进训练:先主要训 FM(或先训 DNN)若干 epoch,再联合微调,减轻早期「抢参数」。
  4. 结构上适度解耦:例如 DNN 不用全部 embedding 维度,或给 DNN 单独加一层从 embedding 到「Deep 专用」的线性映射(相当于给 Deep 一点专用容量),再与 FM 共享底层 embedding,冲突会小一些。

面试要点


记忆要点

返回模块 返回总览