概述
在推荐/广告系统中,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)效果更好,但计算量也更大的原因。