跳转到内容

DIN — 让推荐模型按你看的广告决定该激活你哪段历史

是什么

DIN(Deep Interest Network) 是阿里妈妈 2018 年的论文,提出在 CTR(点击率)预估模型里,用 attention 在用户历史行为序列上做”和当前候选广告相关的”加权——只点亮用户和这个广告有关的那一小段兴趣。

日常类比:你淘宝购物历史有 200 条——买过键盘、奶粉、跑鞋、咖啡豆。系统现在要决定要不要给你推一双”新跑鞋”。老办法是把这 200 条全部平均成一个”你”的画像向量,再判断推不推。DIN 是看到候选是跑鞋后,先只看你买过跑鞋、运动袜、护膝的那几条,把这部分加权放大,再判断。

一句话:用户兴趣不是一个固定向量,而是针对每个候选商品现场算一遍的局部激活。

为什么重要

不理解 DIN,下面这些事都没法解释:

  • 为什么 2018 之后阿里、京东、ByteDance、Meta 的推荐都从 sum/avg pooling 转向 attention pooling
  • 为什么 attention 从 NLP(Transformer 同年)跨界到了推荐——同样的 Q/K/V 思想换个场景照样work
  • 为什么 DIEN / DSIN / BST / SIM 这些后续工作都把 DIN 当起点——它把”行为序列建模”这个新方向打开了
  • 为什么阿里展示广告 CTR +10% 这件事被反复引用——它是工业级”attention 救场”的里程碑

核心要点

DIN 的核心设计可以拆成 三块

  1. 打破 fixed pooling:之前的 Embedding & MLP 范式(YouTube DNN / Wide&Deep)把用户全部行为 sum 或 avg 成一个固定向量。这个向量不管推什么广告都长一样——表达力被瓶颈死。

  2. Local Activation Unit(局部激活单元):候选广告 va 和每条历史行为 e_i 配成一对,过一个小 MLP(输入是 e_i, va, e_i*va, e_i-va),输出一个权重 w_i。然后用户向量 = Σ w_i * e_i关键是 w_i 不归一化(不做 softmax)——保留”总兴趣强度”的信息,用户买过 100 件跑鞋的权重之和就比买过 1 件大。

  3. 两个工程 trick

    • MBA 正则(Mini-batch Aware Regularization):电商特征是亿级稀疏 ID,传统 L2 算不动;MBA 只对当前 batch 出现过的特征施加正则
    • Dice 激活:PReLU 的数据自适应版,分界点跟随 batch 统计量移动,比固定 0 点更贴合 CTR 数据分布

实践案例

案例 1:候选是”跑鞋”时,attention 怎么挑历史

假设用户历史 5 条:键盘 / 奶粉 / 跑鞋 A / 咖啡豆 / 运动袜。

候选广告 = 新跑鞋 B。Activation unit 算出权重大致是:

键盘: 0.1 奶粉: 0.1 跑鞋A: 1.8 咖啡豆: 0.1 运动袜: 1.2

最终用户向量 = 0.1×键盘 + 0.1×奶粉 + 1.8×跑鞋A + 0.1×咖啡豆 + 1.2×运动袜。

跑鞋 A 和运动袜被点亮,键盘奶粉咖啡豆几乎被压成 0。这就是 “Deep Interest Network” 名字的由来——兴趣是局部的、随候选而变的。

案例 2:和 Transformer self-attention 的区别

维度DINTransformer self-attention
query 来源候选广告(外部)序列内每个位置
key/value 来源历史行为序列内每个位置
是否 softmax
是否多层堆叠一层够用通常 6-12 层
位置编码没有

DIN 是 cross-attention,Transformer 是 self-attention。DIN 不归一化是为了保留兴趣强度——softmax 会把 1 件和 100 件抹平。

案例 3:评估指标 GAUC

论文还提了一个新指标 GAUC(Group AUC):每个用户单独算 AUC,再按曝光数加权平均。

GAUC = Σ (impression_u × AUC_u) / Σ impression_u

为什么需要它:普通 AUC 把所有用户的预测分混在一起排序,但用户 A 永远比用户 B 更爱点广告——这种用户级偏置会污染指标。GAUC 只在用户内部排序,才反映真实的”个性化排序”能力。

案例 4:MBA 正则一行直觉

电商场景每个 batch 只覆盖几万个特征 ID,但全表是亿级。传统 L2 要对全表所有 embedding 都施加梯度,O(N) 太慢。

MBA 的做法:

loss_reg = λ × Σ_{i ∈ batch} ||e_i||² / freq(i)

只惩罚 batch 内出现的特征,且按出现频率倒数加权——高频特征惩罚轻、长尾特征惩罚重。这样既计算得动,也防止长尾 ID 过拟合。

踩过的坑

  1. Activation unit 不要太深:3-4 层 MLP 够用。深了梯度消失,反而退化成普通 pooling。原论文也是这个深度。

  2. 历史序列长度 L 上线吃紧:每条候选广告都要扫一遍 L 条历史,复杂度 O(L)。L 到几百就影响 QPS。后续 SIM 用两阶段检索(粗筛再精筛)解决。

  3. 同用户多样本进同 batch 会学到捷径:训练时如果一个用户的多条样本进了同一 batch,attention 容易学到”看 batch 内其他样本”。业内常按 user_id hash 分 batch 隔开。

  4. GAUC vs AUC 数字不能直接对比:学术圈常报普通 AUC,论文 +0.5 看着不大,工业界 GAUC +0.5 已是大幅提升。看推荐论文先确认指标定义。

  5. Dice 激活别照搬到所有场景:Dice 假设特征近似正态分布,CTR 数据成立;表格数据 / 图像就不一定。

  6. 不要给权重加 softmax:复现 DIN 时一个常见错误是”看到 attention 就 softmax”。原论文明确不归一化——一旦归一化,“买过 1 件跑鞋”和”买过 100 件跑鞋”的兴趣强度就被抹平了。

  7. 冷启动用户上 DIN 会降效:历史 < 5 条的用户,attention 信号噪声远大于收益。工业上常按行为长度分桶——长序列走 DIN,短序列走传统 MLP。

适用 vs 不适用场景

适用

  • 用户有显式行为序列(点击 / 购买 / 浏览)的推荐场景
  • 候选 item 数量不是太大(每个候选都要扫一遍历史)
  • 行为顺序不重要、相关性重要——电商、内容推荐
  • 工业 CTR/CVR 预估(DIN 已是事实标准的 baseline)

不适用

  • 行为顺序很重要的场景 → 用 DIEN(加 GRU)或 BST(加 Transformer)
  • 用户行为序列非常长(>1000)→ 用 SIM 两阶段检索
  • 没有用户历史的冷启动场景 → DIN 退化成普通 MLP,提升消失
  • 纯 listing 排序(没有”用户对候选”的二元关系)→ 用 LambdaMART 等 LTR 方法

历史小故事(可跳过)

  • 2016:Wide&Deep(Google)确立了 Embedding & MLP 在 CTR 的主流地位。所有人都在做 sum pooling。
  • 2017 年初:阿里展示广告团队发现 sum pooling 是天花板——用户兴趣多样,强行平均后向量信息量不足。
  • 2017 年 6 月:DIN 第一版上 arxiv(1706.06978)。同年 6 月 Transformer 论文也上 arxiv。两篇都用了 attention,但用法完全不同——这是 attention 思想第一次在两个领域同时引爆。
  • 2018:DIN 上 KDD,工业落地数据公开(CTR +10%,RPM +3.8%)。
  • 2019:DIEN 接力(加兴趣演化建模);后面三年衍生出 DSIN、BST、SIM、CAN 等一长串。

学到什么

  1. 固定向量 = 表达力上限——一个 user embedding 编码所有兴趣,必然丢信息。让向量”按候选动态算”是突破口。
  2. Attention 不只属于 NLP——任何”一个 query 对一组 key/value”的场景都能用。推荐里 query=候选、key/value=历史。
  3. 不 softmax 也是合法的 attention——softmax 会抹掉”强度”信息,DIN 故意不归一化。这是从场景需求倒推的设计选择。
  4. 工程 trick 决定能不能上线——MBA 正则、Dice、GAUC 三件套不亮眼,但少一个论文都跑不出工业数据。
  5. 同时代的论文常常分头解决同一个底层问题——DIN 和 Transformer 都是 2017 年用 attention 打破固定表示,相互独立。
  6. 工业论文的”+10% CTR”含金量——能在生产广告系统上线并跑出这个量级提升,意味着模型本身和工程链路都过关,是当时阿里整年 KPI 级的产出。

延伸阅读

关联

  • attention —— attention 机制本身的源头;DIN 是它在推荐场景的早期落地
  • wide-deep-2016 —— DIN 直接对标的范式;DIN 把 deep 侧的 pooling 换成 activation unit
  • dcn-2017 —— 同期推荐工作;DCN 关注特征交叉,DIN 关注用户行为建模——正交方向
  • transformer —— DIN 用一层 cross-attention,Transformer 用多层 self-attention,是 attention 在两个领域的两条路

反向链接

  • attention —— Attention Is All You Need
  • dcn-2017 —— DCN — 在 DNN 旁边并联一条专门学特征交叉的网络
  • sasrec-2018 —— SASRec — 用 Transformer 的 self-attention 替 RNN 做下一步推荐
  • wide-deep-2016 —— Wide & Deep — 让模型同时学会”记住”和”举一反三”