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_i ∑i=1Nei 保留行为的"强度"和"数量" 累加所有Embedding,向量模长随行为增多而增大。表示"用户兴趣的总体积累"。 淘宝(Taobao)
Average Pooling 1 N ∑ i = 1 N e i \frac{1}{N} \sum_{i=1}^{N} e_i N1∑i=1Nei 保留行为的"平均兴趣倾向" 归一化后的向量,模长稳定。表示"用户通常喜欢什么类型的东西"。 YouTube
Max Pooling m 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_i ∑i=1Nαi⋅ei 根据目标物品动态调整重要性 给不同的历史商品赋予不同的权重(由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)效果更好,但计算量也更大的原因。

参考资料