DIN
DIN
- 场景:精排CTR预测
- 数据:Amazon-Electronics
- DIN(Deep Interest Network)模型,是阿里提出的经典推荐模型,核心解决了传统 CTR 模型(如 DeepFM)无法捕捉用户动态兴趣的问题。
- DeepFM:把用户的所有历史行为(比如点击过的商品)当成 “静态特征”(拼接成固定长度的向量),无法区分哪些历史行为和当前推荐商品相关
- DIN:针对 “用户兴趣多样性” 问题,提出注意力机制,对用户历史行为做 “加权聚合”—— 和当前商品相关的历史行为权重高,无关的权重低,从而精准捕捉用户的即时兴趣。
1 | 用户历史行为:点击过 “篮球鞋”、“连衣裙”、“篮球”、“口红”; |
- 这就是 DIN 的核心:基于注意力的兴趣激活(Interest Activation)。
1 | 输入特征 → 嵌入层 → 分模块处理: |
算法原理
1. 嵌入层
- 离散特征通过嵌入层转为低维稠密向量。
- 向量:
- 是待推荐的嵌入向量(维度 d)
- 是用户第 i 次历史行为商品的嵌入向量(维度 d)
- 是历史行为序列,形状
[n, d],n是历史行为数量。
2. 兴趣激活层
- 核心是 “动态计算历史行为的权重”,而非简单的平均 / 求和。
- 注意力权重的计算逻辑
DIN 的注意力权重不是简单的向量内积,而是通过一个小型神经网络计算,能捕捉更复杂的相关性
- 其中 是哈达玛积(对应元素相乘), f() 是小型DNN通常两层全连接,输入就是上述三个的直接拼接(维度3d),输出是单个标量(权重)。
- 最终权重需要经过sigmoid 保证所有权重和为1。
- 用户兴趣向量的聚合
得到每个历史行为的权重后,对历史行为向量做加权求和,得到用户的激活兴趣向量:
传统模型相当于是直接平均化,,所有历史行为权重相同。
3. 深层 DNN 与输出层
- 拼接特征:将(用户激活兴趣)、(当前商品)、用户静态特征、上下文特征的嵌入向量拼接,得到最终的输入向量;
- 深层 DNN:通过多层全连接网络学习高阶特征交互;
- 输出层:Sigmoid 函数将得分映射到 0~1,得到预估 CTR。
4. DIN 的关键优化
- 阿里在 DIN 中还提出了两个工程优化,进一步提升效果:
Mini-batch Aware Regularization:解决小批次训练时的正则化偏差,让正则化更稳定;Activation Regularization:对注意力权重做正则化,避免过拟合。
这两个是工程细节,核心还是注意力机制,新手先聚焦注意力层即可。
代码实现
直接调包
1 | # 检查torch的安装以及gpu的使用 |
自定义模型
1 | import torch |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 isSeymour!
评论





