DNN Baseline模型

📅 2026/7/18 13:34:00 👁️ 阅读次数 📝 编程学习
DNN Baseline模型

概述

在推荐/广告系统中,Baseline模型指的是最基础、最标准的深度神经网络框架。

它通常是指“Embedding + MLP(多层感知机)”的范式(即经典的Deep Neural Network,如Youtube 2016年的DNN论文所提出的结构)。

它的作用:

  • 衡量标准:学术界或工业界在提出新模型(如DeepFM、DIN、DIEN)时,必须证明新模型比这个简单的Baseline效果好,否则新模型就没有意义。
  • 最低配置:任何复杂的模型都是在它的基础上“加东西”(如加Attention、加Cross层)。

Baseline模型的“内在结构”及各部分作用

Input Layer(输入层)

接收原始特征。

包括用户ID(稀疏)、物品ID(稀疏)、用户统计特征(年龄/性别)、物品统计特征(价格/类目)、以及用户的历史行为序列(如点击过的商品ID列表)。

Embedding Layer(嵌入层)

将高维、稀疏的One-hot向量映射为低维、稠密的浮点数向量(比如从100万维映射到128维)。

这是深度学习处理离散特征的核心步骤。

Pooling Layer(池化层)

用户的历史行为序列(如点击过的10个商品)是一组不定长的Embedding向量列表。

但DNN(全连接层)要求输入必须是固定长度的向量。

Pooling层负责将这个[batch_size, 序列长度, embedding_dim]的三维张量,压缩为[batch_size, embedding_dim]的二维张量。

Concat Layer(拼接层)

将所有处理好的特征向量(用户侧向量、物品侧向量、统计特征向量)拼接成一个长向量。

MLP(全连接隐藏层)

学习高阶的非线性特征交叉。通常结构为512 -> 256 -> 128,激活函数常用 ReLU 或 Dice。

Output Layer(输出层)

通过一个 Sigmoid 函数输出一个 0~1 之间的概率值,即CTR(点击率)

Pooling策略详解(Sum / Average / Max / Weighted)

在推荐系统中,Pooling层特指对用户历史行为序列的处理。

假设用户历史行为中有N个商品(Goods1, Goods2, …, GoodsN),每个商品的Embedding向量为e_i,维度为d

Pooling策略数学公式核心作用保留了什么信息工业界典例
Sum Pooling∑ i = 1 N e i \sum_{i=1}^{N} e_ii=1Nei保留行为的“强度”和“数量”累加所有Embedding,向量模长随行为增多而增大。表示“用户兴趣的总体积累”。淘宝(Taobao)
Average Pooling1 N ∑ i = 1 N e i \frac{1}{N} \sum_{i=1}^{N} e_iN1i=1Nei保留行为的“平均兴趣倾向”归一化后的向量,模长稳定。表示“用户通常喜欢什么类型的东西”。YouTube
Max Poolingm a x ( e 1 ​ , e 2 ​ , . . . , e N ​ ) max(e1​,e2​,...,eN​)max(e1​,e2​,...,eN)保留最强烈的信号选取序列中数值最大的那一维。表示“用户最在乎的特性/最极端的兴趣”。较少单独用于序列推荐,多用于CNN
Weighted Pooling∑ i = 1 N α i ⋅ e i \sum_{i=1}^{N} \alpha_i \cdot e_ii=1Nαiei根据目标物品动态调整重要性给不同的历史商品赋予不同的权重(由Attention机制计算)。表示“哪些历史行为对预测当前物品最有参考价值”。DIN(阿里)

为什么淘宝用Sum Pooling,YouTube用Average?

淘宝(Sum Pooling):电商场景下,用户行为强度极度重要。买了2次手机壳的用户肯定比买1次的更喜欢手机壳。使用Sum Pooling,用户多次购买同一品类会导致Embedding模长变大,模型能够感知到这种强度的累加。如果换用Average,强度信息会完全丢失。

YouTube(Average Pooling):视频推荐场景下,用户的长期兴趣画像是关键。用户可能看了10个搞笑视频和2个科技视频,模型希望知道用户心里更偏向搞笑。使用Average Pooling可以消除“爱看视频的总时长”带来的噪声,更好地表征用户的基线兴趣倾向,防止长序列向量的模长爆炸(数值不稳定)。

完整案例举例:从商品序列到预测分数

假设我们要预测用户是否点击“MacBook Pro”

设定

Embedding维度为2(为了手算方便)。

用户历史序列包含3个商品:

  • Goods1(iPhone):[1.0, 2.0]
  • Goods2(蓝牙耳机):[0.0, 1.0]
  • Goods3(游戏鼠标):[1.0, 1.0]

MacBook Pro 的 Target Embedding 假设为:[0.5, 1.5]

假设MLP后续我们简化:只看 Pooling 后的向量与 Target 的内积(相似度)高低。

场景 A:使用 Average Pooling(YouTube风格)

AvgVec = ( 1.0 + 0.0 + 1.0 ) 3 , ( 2.0 + 1.0 + 1.0 ) 3 = [ 0.667 , 1.333 ] \text{AvgVec} = \frac{(1.0 + 0.0 + 1.0)}{3}, \frac{(2.0 + 1.0 + 1.0)}{3} = [0.667, 1.333]AvgVec=3(1.0+0.0+1.0),3(2.0+1.0+1.0)=[0.667,1.333]

与Target相似度:0.5×0.667+1.5×1.333=0.333+2.0=2.330.5×0.667+1.5×1.333=0.333+2.0=2.33

模型认为用户的“平均兴趣向量”是[0.667, 1.333],和MacBook Pro偏向高端3C的方向([0.5, 1.5])比较接近,倾向于推荐。

场景 B:使用 Sum Pooling(淘宝风格)

S u m V e c = [ 1.0 + 0.0 + 1.0 , 2.0 + 1.0 + 1.0 ] = [ 2.0 , 4.0 ] SumVec=[1.0+0.0+1.0,2.0+1.0+1.0]=[2.0,4.0]SumVec=[1.0+0.0+1.0,2.0+1.0+1.0]=[2.0,4.0]

与Target相似度:0.5×2.0+1.5×4.0=1.0+6.0=7.00.5×2.0+1.5×4.0=1.0+6.0=7.0

模型不仅看到了用户的喜好方向,还注意到了用户买过3件高相关度的商品,因此给出的得分(强度)远高于Average,模型更相信这个用户一定会买MacBook Pro。

场景 C:使用 Weighted Pooling(Attention / DIN风格)

假设Attention机制(通过MacBook Pro向量与历史商品向量做点积计算权重)得出:

  • iPhone(都是苹果生态,极其相关)权重 =0.8
  • 耳机(关联性一般)权重 =0.15
  • 鼠标(关联较弱)权重 =0.05

W e i g h t e d V e c = 0.8 × [ 1.0 , 2.0 ] + 0.15 × [ 0.0 , 1.0 ] + 0.05 × [ 1.0 , 1.0 ] = [ 0.85 , 1.8 ] WeightedVec=0.8×[1.0,2.0]+0.15×[0.0,1.0]+0.05×[1.0,1.0]=[0.85,1.8]WeightedVec=0.8×[1.0,2.0]+0.15×[0.0,1.0]+0.05×[1.0,1.0]=[0.85,1.8]

与Target相似度:0.5×0.85+1.5×1.8=0.425+2.7=3.1250.5×0.85+1.5×1.8=0.425+2.7=3.125

模型发现“因为历史中有iPhone,所以这次推荐MacBook特别合适”,模型自动将iPhone的权重拉高到极致。这比Average和Sum都更精准地捕捉了短期的高相关行为。

总结

策略数学表达适合场景
Sum Pooling向量相加对行为强度/频次敏感的场景(电商、广告)
Average Pooling向量求平均稳定兴趣画像敏感的场景(视频、音乐、新闻)。
Max Poolin按维度取最大提取最显著的特征信号(通常配合CNN用于图像或文本,少部分序列推荐会用)。
Weighted Poolin加权求和捕捉目标导向的局部激活,需要模型动态判断“以前买的哪个东西跟现在最像”。

完整链路:

用户行为序列 -> [Embedding表] -> Pooling操作(压缩) -> Concat其他特征 -> MLP多层计算 -> Sigmoid输出CTR

如果使用Weighted Pooling,模型会引入额外的Attention网络去计算每个历史商品的权重

这也就是为什么它比单纯的Baseline(Avg/Sum)效果更好,但计算量也更大的原因。

参考资料

  • DIN、DIEN、DSIN间的区别和联系:各种Pooling策略解读
  • DIN模型与DIEN模型总结