外观
推荐与广告中的 RL
一句话定位:这一页讲清楚推荐与广告系统里 RL 的真实用法——为什么它天然是 RL 场景、业界先从 contextual bandit 起步、列表排序和实时出价如何用 RL、以及"离线评估难、在线试错贵"这个贯穿始终的工程困境。
一、为什么推荐/广告是 RL 场景
1. 三个"序列"属性
传统推荐把"给你推什么"当作独立的分类/排序问题(每个请求独立决策)。但真实业务有三个序列属性,让 RL 有了用武之地:
| 属性 | 含义 | 对建模的影响 |
|---|---|---|
| 用户状态 | 用户是会演化的状态:看了什么、点了什么改变未来行为 | 单请求决策丢失状态,MDP 天然适配 |
| 延迟反馈 | 点击 → 转化(下单/注册)往往隔几分钟到几天 | 奖励延迟,需要价值学习而非即时监督 |
| 探索-利用 | 推送未知内容才能发现新兴趣,但探索有短期收入代价 | 这是 bandit/RL 的立身之本 |
一句话:推荐/广告的问题不是"预测用户喜欢什么",而是"决策下一步推什么"。前者是监督学习(点击率预测 CTR),后者是序列决策——RL 的领域。
2. 商业指标与"奖励"的映射
text
用户(状态 s) → 平台推内容(动作 a) → 用户行为(反馈) → 商业奖励 r
s = 用户画像 + 近期行为序列 + 上下文(时间/设备)
a = 一个 item 或一个候选列表(slate)
r = 点击?转化?停留时长?GMV? — 由产品目标决定的加权和TIP
推荐/广告是"奖励工程"最好的教学现场:点击率、转化率、GMV、用户时长、多样性、新鲜度各有各的权重,权重就是产品决策。同一个用户,把"停留时长"权重调高,系统会推更"上瘾"的内容;把"GMV"调高,会推更贵的商品。奖励怎么定,行为就怎么长——详见奖励工程。
二、第一站:Contextual Bandit
1. 为什么业界从 bandit 开始
完整 RL 需要建模"状态转移",工程上贵且难验证。contextual bandit 砍掉状态转移:每个请求独立决策,立即观察奖励,目标是"在当前上下文下选最优动作"。它适合推荐的第一版 RL 化改造,因为:
- 实现简单、能在线更新、有遗憾(regret)理论保障;
- 与已有 CTR 模型兼容(把 bandit 建在 CTR 预估之上);
- 上线风险可控。
| 对比项 | Contextual Bandit | 完整 RL |
|---|---|---|
| 状态 | 有上下文,无状态转移 | 状态 + 转移 |
| 决策时长 | 单步 | 多步序列 |
| 需要价值函数/规划 | 否 | 是 |
| 工程复杂度 | 低 | 高 |
| 适用 | 冷启动、单次决策优化 | 序列推荐、长期价值 |
2. 三种核心算法
| 算法 | 思路 | 特点 |
|---|---|---|
| ε-greedy | 以概率 ε 随机探索 | 最简单,探索无目标 |
| LinUCB | 线性模型 + 置信上界:点击率预测 + c·√(xᵀA⁻¹x) | 有理论保障,工业常用 |
| Thompson Sampling | 参数后验采样,按采样值选动作 | 贝叶斯、实用效果好 |
Li et al. (2010) 在雅虎新闻推荐上比较了 LinUCB 与 ε-greedy 等,离线评估(基于历史日志的 replay)下 LinUCB 比人工挑选的内容点击率提升约 12%+。这个经典案例的完整推导见多臂老虎机页。
3. bandit 的边界
bandit 假设"本次决策不影响下次"——但推荐里推了一个视频后用户下次看到的就是全新的流,状态确实在演化。所以业界共识是:bandit 是第一站,不是终点。当需要"考虑长期回报"(如让用户养成熟客)时,要上完整 RL。
4. 冷启动:bandit 最成熟的落地场景
推荐系统里最穷的场景是冷启动:新内容没有任何点击数据、新用户没有任何行为历史。此时"均匀随机探索"性价比极低,bandit 的"不确定性感知"特性恰好发挥价值:
| 冷启动对象 | 用 bandit 做什么 | 典型配置 |
|---|---|---|
| 新内容 | 决定给多少流量、给谁 | UCB/TS,探索量随曝光衰减 |
| 新用户 | 先广泛试探再收敛兴趣 | ε 较大,随行为积累递减 |
| 新物品池 | 决定推荐池排序 | Thompson Sampling 商品打散 |
工程细节:工业实现几乎从不把 bandit 单独跑,而是嵌进 CTR 预估模型——先有一个基础预估,bandit 在"不确定性修正"层叠加。这样既保留机器学习的主体能力,又获得探索能力。这个"基础模型 + 探索层"的两段式架构,是推荐/广告里 bandit 落地的主流形态。
三、列表排序:从 pointwise 到 sequence-wise RL
1. 排序问题的三种建模
text
pointwise: 对每个 item 独立打分 → 排序
pairwise: 比较两两 item 的偏好
listwise: 把整个列表作为输入输出 → 序列决策RL 登场的关键是 listwise(列表视角):列表里的 items 有组合效应——放什么和放哪里、彼此是否重复、用户可能只点一个。用 RL 的术语:动作 = 选择整个 slate,而不是逐个 item。
2. 经典案例:YouTube 的 slate RL
YouTube(Chen et al., 2019)发表了一个"可解的组合"框架:把"选择 top-k 的列表"分解为可加和的项,并解决off-policy 评估——因为线上日志来自旧策略(行为策略),不能用"旧策略的数据直接算新策略的回报"。他们用top-k off-policy correction:每个位置的 item 根据"它被选中的概率差"重新加权,得到无偏(至少低偏)的价值估计。
关键思想:推荐日志是"旧策略"采样的,评估"新策略"必须做
重要性加权:
Û(π_new) ≈ Σ_logs [ π_new(a|x) / π_old(a|x) ] · r
但 top-k 的组合空间太大,YouTube 把它分解到逐位置,工程上可行。3. 淘宝搜索的 DQN 变体
Zhao et al. (2018) 在淘宝搜索推荐上把问题建成了 MDP,用 DQN 变体训练排序策略。其工程挑战非常有代表性:
- 动作空间巨大:一次排序要处理上千个候选 item,直接枚举动作不可行,他们用"在候选中逐个决策"的方式化解。
- 状态表示:用户行为序列(点击/购买序列)+ 候选 item 特征。
- 奖励:用户行为信号的加权(点击、加购、成交等)。
- 上线时用了"混合策略":RL 策略只决定部分位置的 item,其余位置保留原有排序,以控制风险。
4. slate 的组合爆炸与工程分解
列表排序 RL 的第一个敌人是组合爆炸:从 1000 个候选里选 10 个的排列数约 1000^10,任何"枚举所有 slate"的方法都不可行。工程上四种分解策略:
| 策略 | 做法 | 代价 |
|---|---|---|
| 逐个位置决策 | 一次决定一个位置,已选的不再选(淘宝做法) | 忽略位置间高阶交互 |
| 可加和分解 | 假设 slate 总价值≈各 item 价值之和(YouTube) | 忽略"选了A就不用B"的互补性 |
| 候选预筛 + RL 排序 | 先用轻量模型筛到几百,再用 RL 排前几名 | 预筛质量成为瓶颈 |
| 隐式顺序建模 | 把位置当序列输入,用 RNN/Transformer 建模 | 训练与推理成本高 |
关键取舍:位置间交互(重复、互补、竞争)越重要,越该用完整的序列建模;但序列建模越贵、越难评估。工业界默认从"逐个位置 + 分解"起步,只有在消融中确认"组合效应"显著时才升级——这正是评估实践页"从简单开始"的纪律。
WARNING
淘宝/YouTube 论文里的收益数字(如"转化率提升 X%")都是特定流量、特定时间段、混合策略下的 A/B 结果。它们在工程上真实,但不构成"RL 一定比现有排序好"的一般结论。读这类工业论文要看"实验设置"小节:对照组是谁、流量占比、是否只改部分位置——这正是评估与基准页说的"评估协议决定结论"。
四、实时出价(RTB):竞价中的 RL
1. 广告拍卖的机制
程序化广告中,每次广告展示都是一场实时拍卖(Real-Time Bidding, RTB):广告主(或其代理)对曝光机会出价,价高者得。于是决策变成了"看到一次曝光,出多少价":
text
状态 s:这次曝光的信息(用户画像、页面、上下文)+ 预算余额 + 剩余时间
动作 a:出价 bid(连续或离散分档)
奖励 r:若赢得拍卖 → 曝光,并按点击/转化结算;若没赢 → 0
约束:预算约束(一天花多少钱)——这是带约束的 MDP2. RL 出价策略
Cai et al. (2017) 等将出价建模为 RL,学习"出价-赢得-回报"的映射,目标是在预算约束下最大化转化。工业界(阿里妈妈、字节、腾讯广告等)的公开技术报告表明出价策略已普遍 RL 化(如 DRLB、非线性出价等变体),但细节多为内部资料。
3. 多智能体视角:拍卖本就是博弈
RTB 的关键洞察:所有广告主都在用策略出价,市场出清价是由全体参与者的行为共同决定的——这本质是多智能体强化学习里的博弈问题。独立学出价的广告主会互相"军备竞赛"推高出价。因此业界的务实做法是:把其他参与者当作"环境噪声",用 bandit/RL 学单边最优出价,而不是真的建模对手(那是 MARL 研究话题)。
4. 出价 RL 的工程要点
把出价 RL 工程化时有几个绕不开的细节:
text
1. 二价拍卖(second-price auction):赢家付第二名出价 → 出价≠支付价
RL 学习的目标是"赢下便宜的展示",出价策略要利用这一点
2. 预算约束:一天预算有限,出价要"前松后紧"还是"前紧后松"取决于目标
→ 常把预算写进状态,用"剩余预算/剩余时间"特征
3. 延迟结算:点击/转化发生在出价之后很久 → 奖励延迟,需价值估计而非即时监督
4. 出价粒度的连续性:离散分档 vs 连续出价,影响 RL 动作空间的设计这些细节和金融交易中的 RL的订单执行问题高度同构:同样是"用策略优化出价/下单,奖励延迟,约束(预算/滑点)显式"。广告出价是"有清晰模拟器"的金融 RL——这也是它能先落地的原因。
五、工程现实:离线评估难、在线小步试错
1. 为什么推荐 RL 的评估这么难
| 障碍 | 说明 |
|---|---|
| 离策略评估 | 线上日志来自旧策略,直接算新策略回报有偏差;需要反事实校正(importance weighting) |
| 反事实问题 | 日志里"没推过的内容没有反馈",无法知道如果推了会怎样 |
| 反馈延迟 | 转化隔数天,训练与评估时间窗难对齐 |
| 商业护栏 | 探索太多立刻伤收入,探索太少永远学不到 |
Bottou et al. (2013) 的 Counterfactual Reasoning and Learning Systems 是这一问题的奠基论述:"基于历史日志做 A/B" 本质是反事实推理,必须做无偏校正。这也是离线强化学习页讨论的核心困难之一。
2. 工业级的三级评估阶梯
text
第 1 级 离线(offline):日志 replay、反事实评估 → 快速筛掉明显差的策略
第 2 级 影子(shadow):新策略旁路输出、不打流量 → 看"如果上线会怎样"
第 3 级 在线 A/B:小流量(如 1%–5%)分桶 → 统计显著后才全量每一级都有坑:离线评估被日志分布欺骗、影子模式忽略"策略影响用户状态"、A/B 需要大量流量才显著。工程纪律是层层递进、任何一级都不可跳过。
DANGER
推荐/广告里最经典的"评估作弊"是用同一份历史日志反复调参,直到离线指标最好,然后宣称策略有效。这等于用测试集调超参,离线分数必然虚高。正确做法是离线数据也要划分时间窗:训练窗、验证窗、评估窗(时间上严格先后)。这就是评估与基准页反复强调的协议问题。
3. 反事实评估的实现细节
"用历史日志评估新策略"(离线策略评估,Off-Policy Evaluation)有标准的实现要点:
text
基本公式(重要性加权):
V̂(π_new) = (1/N) · Σᵢ [ π_new(aᵢ|xᵢ) / π_old(aᵢ|xᵢ) ] · rᵢ
权重 = 新策略选该动作的概率 / 旧策略选该动作的概率
三个工程修正:
1. 权重大小截断(clip):避免单个样本权重爆炸 → 有偏但方差大减
2. 自归一化(self-normalized):权重除以它们的和 → 无偏性更好
3. 仅在"旧策略覆盖"的日志上评估:新策略喜欢的动作在日志里几乎没出现时,权重方差爆炸判断一份离线评估是否可信的三问:日志来自哪个行为策略?权重是否 clip/归一?动作覆盖度够不够?——三个问题有一个答不上来,评估结论就当不了决策依据。这也是离线强化学习页"离线评估难"的核心。
六、探索成本与商业护栏
1. 探索的"钱"问题
在推荐/广告里,探索不只是学术问题,是真金白银:把 1% 的流量拿去做"未知内容"实验,若这些内容的收入只有均值的一半,每天就损失约 0.5% 的 GMV——对超大平台那是天文数字。
| 策略 | 探索占比 | 收入影响 | 适用 |
|---|---|---|---|
| ε-greedy | 固定 ε(如 1%–5%) | 直接损失约 ε×差额 | 简单、可控 |
| UCB/TS | 自适应 | 探索集中在"不确定性高"处 | 冷启动、新内容 |
| 个性化探索 | 按用户/情景调节 | 低 | 成熟平台 |
2. 商业护栏
- 保底策略:新策略线上前必须能"随时一键回滚"到旧策略。
- 探索额度控制:按天/按用户配额限制探索量,超出即切回利用。
- 新鲜度/多样性硬约束:即使 RL 说"推它",也要通过合规与多样性检查——RL 只负责排序,不负责突破产品边界。
这些护栏在常见陷阱与反模式页被总结为"安全护栏"通用原则。
七、离线 RL 在此地的角色
1. 为什么推荐是离线 RL 最大的应用现场
推荐/广告有 RL 界最稀缺的资源:海量、持续、真实的历史交互日志(每天上亿条)。这恰好命中离线 RL 的设定:"只有历史数据、不再与环境交互"。
- 安全:离线训练不碰线上流量,无探索风险。
- 成本:无需昂贵的在线实验。
- 合规:不因探索收集额外个人信息。
2. 离线 RL 在推荐的落地形态
| 形态 | 说明 | 挑战 |
|---|---|---|
| 离线预训练 + 在线微调 | 先在大日志上离线学,再小流量在线继续 | 分布偏移、价值高估 |
| 保守主义方法(CQL/IQL 思想) | 防止 OOD 动作的价值幻觉 | 调参敏感、超参多 |
| 反事实排序 | 用重要性加权评估新排序 | 方差大、需要大量日志 |
注意区分:很多号称"离线 RL"的推荐论文其实是反事实评估 + 监督重排序,并不是完整离线 RL 训练。读论文时先看"它真的学了一个策略吗,还是只在日志上评估"。方法论细节见离线强化学习页。
3. 落地路径建议:从 bandit 走到完整 RL
给想在此领域落地的团队一张升级路线图:
text
阶段 1 bandit 冷启动 + 反事实评估 → 稳定收益、低风险
阶段 2 列表局部 RL(部分位置 RL 化,混合策略)→ 验证序列价值
阶段 3 完整序列策略 + 离线 RL 预训练 → 长期回报优化
每个阶段都要先证明"比上一阶段好"才能前进,否则停在上一步。为什么必须这样走:完整 RL 的收益(长期回报)只有在工程链条全通后才能兑现,而链条每一环(环境、奖励、评估、护栏)都可能让收益归零。用阶段化方式,既控制风险,也让每一步都有可回滚的余地。这与RL 设计原则页"基线先行、小步迭代"的原则完全一致。
4. bandit 与完整 RL 的数学关系
从 bandit 到 RL 是一条连续的谱系,理解它有助于选型:
text
多臂老虎机(无上下文) :每次选一个动作,立即得奖励,无状态转移
上下文老虎机(contextual) :选择依赖上下文 x,但动作不影响未来
RL(完整 MDP) :状态演化,动作影响未来回报
区别只有一处:有没有"状态转移"。bandit 去掉了时序维度,
所以它是"退化的 RL"——这也是[多臂老虎机](/concepts/bandits)页把它定位为
"探索与利用的简化实验室"的原因。工程推论:
| 问题形态 | 用哪一层 | 原因 |
|---|---|---|
| 每次决策独立(推荐一个商品给新用户) | contextual bandit | 状态转移可忽略 |
| 决策影响后续(视频流里推了 A 影响下次) | 完整 RL | 状态演化不能忽略 |
| 介于两者之间 | bandit + 状态特征 | 用上下文近似状态 |
很多宣称"RL 排序"的工业系统,实际只在"上下文 + 单步奖励"上工作,本质是 contextual bandit。这不算坏事——bandit 简单、稳定、可回滚;但读论文和做架构时要知道自己站在谱系的哪一段,别把 bandit 的效果误记成 RL 的效果。
5. 延迟反馈与序列建模的工程细节
推荐/广告里最折磨人的是延迟反馈:用户点击了但 3 天后才下单,奖励该记给哪次推荐?工程上四个应对:
| 方案 | 做法 | 代价 |
|---|---|---|
| 等待窗口 | 决策后等 N 天才结算奖励 | 训练慢、数据滞后 |
| 即时代理奖励 | 用"点击率"当奖励代理 | 可能偏乐观(点击≠转化) |
| 衰减/概率归属 | 按时间衰减分配转化 | 需要估计归属模型 |
| 序列状态建模 | 把"上次推了什么、用户做了什么"编码进状态 | 需要完整行为序列数据 |
与 RL 的关系:延迟反馈本质上是"奖励延迟"问题——这正是价值学习页里"TD 与信用分配"要解决的问题(长期价值估计把远期奖励折现回来)。但工业实践中很少有人为它上完整 RL,更多是用"转化归因 + 点击代理奖励"做工程近似——务实,但要知道近似在哪里。
八、案例速览:公开技术路线
| 系统 | 场景 | RL 形态 | 公开资料要点 |
|---|---|---|---|
| 雅虎新闻 | 文章推荐 | LinUCB contextual bandit | 经典 bandit 实验(Li et al. 2010) |
| YouTube | 视频列表 | slate RL + off-policy correction | 组合动作的可解化分解 |
| 淘宝搜索 | 搜索排序 | DQN 变体(混合策略上线) | 大动作空间处理、用户行为序列状态 |
| 阿里妈妈(DeepLight) | 广告 CTR 预估 | (深度 CTR 工程,非 RL 本体) | 特征交互加速,展示广告工程全貌 |
| 各平台 RTB | 实时出价 | bandit/RL 出价 | 预算约束、博弈视角 |
INFO
"字节等公开技术"在 2020 年后以技术博客与论文形式公布了不少 bandit/RL 在推荐与广告的实践(如 UCB 冷启动、TS 商品打散、出价策略),但多数没有可引用的正式论文。本页只列有公开文献的案例,避免传播无法核验的说法。
延伸阅读
- 多臂老虎机 —— LinUCB 推导、Thompson Sampling、regret 的定义与直觉。
- 探索与利用 —— 探索的深度 RL 形态与商业代价的统一视角。
- 离线强化学习 —— 推荐是离线 RL 的最大应用现场,含 CQL/IQL 机制。
- 评估与基准 —— 离线评估难、反事实校正与评估协议。
- 多智能体强化学习 —— RTB 拍卖的博弈视角与 CTDE。
- RLHF 与人类反馈对齐 —— 人类偏好数据建模(Bradley-Terry)与推荐点击/转化偏好的同构性。
参考资料
- Li, L., Chu, W., Langford, J., & Schapire, R. E. (2010). A Contextual-Bandit Approach to Personalized News Article Recommendation. WWW 2010.(arXiv:1003.0146)
- Auer, P., Cesa-Bianchi, N., & Fischer, P. (2002). Finite-time Analysis of the Multiarmed Bandit Problem. Machine Learning, 47, 235–256.(UCB1)
- Thompson, W. R. (1933). On the Likelihood that One Unknown Probability Exceeds Another in View of the Evidence of Two Samples. Biometrika, 24(3–4), 285–294.
- Bottou, L., et al. (2013). Counterfactual Reasoning and Learning Systems: The Example of Computational Advertising. JMLR 14, 3207–3260.(arXiv:1209.6875)
- Zhao, J., et al. (2018). Deep Reinforcement Learning for Search Recommendation in Taobao. arXiv:1801.02057.
- Chen, M., et al. (2019). Top-K Off-Policy Correction for a REINFORCE Recommender System. WSDM 2019.(arXiv:1812.02353)
- Cai, H., et al. (2017). Real-Time Bidding by Reinforcement Learning in Display Advertising. WSDM 2017.(会议论文)
- Wang, R., et al. (2021). DeepLight: Deep-Lightweight Feature Interactions for Accelerating Inference in Ad Click Prediction. 阿里妈妈团队技术论文。