生成式推荐的三阶段训练流程——SFT 建立基础生成能力,Value-Aware FT 注入商业价值信号,RL 探索历史日志之外的高价值路径——已经是跨团队的工业共识。GPR、GR4AD、UniVA 三篇论文独立收敛到了这个结构。但如果仔细看这三个阶段各自的成熟度,差距非常明显:SFT 有十年的推荐系统监督学习积累,Value FT 本质上是加权采样的变体,只有 RL 阶段还在摸索期。
为什么 RL 最难?因为推荐系统的 RL 面对的环境和 NLP 完全不同,但大家一直在照搬 NLP 的优化器。PPO 在 ChatGPT 的 RLHF 里跑得很好,GRPO 在 DeepSeek-R1 的数学推理里跑得很好——然后工程师们把它原封不动地搬到推荐系统里,发现效果远不如预期。
小红书团队的 SAGE(Sequence-level Adaptive Gradient Evolution)指出了一个被忽视的根因:PPO 的对称 clipping 假设,和推荐系统的数据分布有根本性冲突。 对称 clipping 意味着正向更新和负向更新被限制在同样大小的边界内。这在 NLP 里是合理的——生成一个好答案和避免一个差答案的重要性大致对称。但在推荐系统里,正反馈和负反馈的信息价值是高度不对称的。
SAGE 的方案是:打破对称,让正向更新(特别是冷启动物品的成功推荐)获得超线性激励,同时让负向更新根据推荐列表的多样性动态调整惩罚力度——同质化的失败被严惩,探索性的失败被宽容。在三个 Amazon 数据集上,冷启动召回率提升 43-63%,推荐多样性提升 5.9-10.4%。
这篇文章拆解 SAGE 的技术方案,分析它和现有工业系统(GPR、GR4AD)的 RL 阶段的异同,以及它最大的未解问题——没有线上 A/B 结果。
对称 clipping 为什么在推荐里失效
PPO 的核心机制回顾
PPO 的目标函数里有一个 clip 操作,把策略更新比值 r = pi_new / pi_old 限制在 [1-epsilon, 1+epsilon] 范围内。直觉上,这是一个信任域约束:每次更新不要跑太远,避免策略崩溃。
关键假设是 epsilon 的上下界是对称的。这意味着:
- 正向更新(好的生成结果被强化)最多把概率提升 epsilon 倍
- 负向更新(差的生成结果被抑制)最多把概率降低 epsilon 倍
在 NLP 的 RLHF 里,这个对称性大致成立。一个好答案和一个差答案对训练信号的贡献大小差不多。但推荐系统的数据分布有两个 NLP 不具备的特征,让对称假设从根本上失效。
推荐特有的不对称性
正反馈稀疏且价值不均匀。 在推荐系统里,绝大多数物品的正反馈极度稀疏——冷启动物品可能只有个位数的正反馈。一个冷门物品被成功推荐的信息价值远高于一个热门物品被成功推荐。但对称 clipping 给两者同样的梯度上界 1+epsilon。这意味着冷启动物品即使偶尔获得正反馈,策略更新也被截断在和热门物品同样的幅度内——它永远无法突破初始的低概率状态。
负反馈高度同质化。 推荐系统的负反馈大量来自于同质化推荐——用户看到一堆几乎一样的商品,对所有的都没有正反馈。但对称 clipping 对所有负反馈施加同样的惩罚力度。它无法区分两种本质不同的失败:模型尝试推荐了一个新品类但用户不感兴趣(探索性失败),和模型懒洋洋地推了十个同类商品用户全部忽略(同质化失败)。前者应该被宽容甚至鼓励,后者应该被严惩。对称惩罚会错误地抑制探索性行为,加剧信息茧房。
graph LR
subgraph symmetric["对称 Clipping (PPO/GBPO)"]
direction TB
SP["正反馈: 上界 1+epsilon"]
SN["负反馈: 下界 1-epsilon"]
SP --- SN
SR["冷启动成功 = 热门成功 = 同一上界"]
SF["探索失败 = 同质化失败 = 同一下界"]
SR -.-> COLD1["冷启动物品无法突破"]
SF -.-> DIV1["多样性持续坍塌"]
end
subgraph asymmetric["非对称 Clipping (SAGE)"]
direction TB
AP["正反馈: 上界 1+epsilon+boost"]
AN["负反馈: 下界随熵值动态调整"]
AP --- AN
AR["冷启动成功 获得超线性激励"]
AF["低熵失败 严惩 / 高熵失败 宽容"]
AR -.-> COLD2["冷启动物品突破曝光阈值"]
AF -.-> DIV2["多样性持续改善"]
end
style SP fill:#f8f9fa,stroke:#868e96,stroke-width:1px
style SN fill:#f8f9fa,stroke:#868e96,stroke-width:1px
style SR fill:#ffe3e3,stroke:#c92a2a,stroke-width:1px
style SF fill:#ffe3e3,stroke:#c92a2a,stroke-width:1px
style COLD1 fill:#ffe3e3,stroke:#c92a2a,stroke-width:1px
style DIV1 fill:#ffe3e3,stroke:#c92a2a,stroke-width:1px
style AP fill:#d3f9d8,stroke:#2f9e44,stroke-width:2px
style AN fill:#e5dbff,stroke:#5f3dc4,stroke-width:2px
style AR fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
style AF fill:#e5dbff,stroke:#5f3dc4,stroke-width:1px
style COLD2 fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
style DIV2 fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
和现有广告 GR 系统的 RL 方案对比
在之前的文章里分析过三篇广告 GR 论文的 RL 方案:GPR 的 HEPO 解决层级信用分配,GR4AD 的 RSPO 做列表级目标对齐,UniVA 的 MCTS-PPO 改善探索覆盖。这三个方案都在 clipping 之上做文章——改奖励信号的计算方式、改探索策略——但没有质疑 clipping 本身的对称性。
SAGE 的切入点更底层:它认为问题出在 PPO 的核心机制上,不是奖励信号不够好,而是梯度约束的形状就是错的。这是一个更激进的判断,但消融实验支持了它——光把 clipping 从对称改成非对称,冷启动召回率就跳了 49-63%。
SAGE 的三个技术模块
模块一:序列级概率比值
传统 PPO 在 token 级别计算重要性采样比值 r_t。但在推荐系统中,奖励是给整个推荐列表(slate)的,不是给单个 token 的。Token 级比值直接用于 slate 级奖励,会引入巨大的方差。
SAGE 用几何平均把 token 级比值聚合到序列级:
r_slate = (r_1 x r_2 x … x r_T) ^ (1/T)
几何平均相比算术平均的优势:对异常值鲁棒(单个 token 的比值极端时不会主导整体),保持了概率链式法则的乘法结构,而且天然消除序列长度差异——不管推荐列表对应的 token 序列是 50 个还是 200 个 token,r_slate 的量级是可比的。
这个设计不复杂,但很实用。GPR 的 HEPO 也面对同样的 token-level vs slate-level 的粒度不匹配问题,但选择了不同的路径(过程奖励而非序列级比值)。两种方案理论上正交,可以组合。
模块二:多目标信号解耦
推荐系统通常有多个优化目标——点击率、完播率、评论率、转化率,各目标的权重由业务方设定。最直接的做法是加权求和后做 group normalization。SAGE 指出这会导致”奖励坍塌”:不同行为模式的奖励被归一化到同一个尺度后,区分度消失。
SAGE 的方案是”先解耦后聚合”:对每个目标独立做 group normalization(保留各自的分布特征),再用业务权重加权求和,最后做一次 batch normalization。这样每个目标的优势信号在标准化阶段保持了独立性,不会被其他目标的分布特征稀释。
这个问题在广告系统里特别严重——eCPM = pCTR x pCVR x Bid 涉及至少三个目标,加上用户体验指标可能有五六个。GPR 在 Value-Aware FT 阶段用行为类型加权来处理多目标,但在 RL 阶段没有明确的多目标解耦机制。SAGE 的 decouple-then-aggregate 更系统。
模块三:非对称自适应边界——核心创新
这是 SAGE 最关键的部分,分两个 case。
graph TB
subgraph sage_flow["SAGE 优化流程"]
direction TB
INPUT["模型生成推荐列表 Slate"] --> REWARD["多目标奖励计算"]
REWARD --> DECOUPLE["信号解耦: 各目标独立标准化"]
DECOUPLE --> ADVANTAGE["聚合优势值 A_SAGE"]
ADVANTAGE --> CHECK{"A_SAGE > 0 ?"}
CHECK -->|Yes| BOOST["正向 Boost"]
CHECK -->|No| ENTROPY["计算列表熵 H"]
BOOST --> UPDATE["策略更新"]
ENTROPY --> PENALTY["熵感知惩罚"]
PENALTY --> UPDATE
end
subgraph boost_detail["Case A: 正向冷启动助推"]
direction TB
B1["上界从 1+epsilon 扩展到 1+epsilon+boost"]
B2["冷启动成功推荐获得超线性激励"]
B3["突破初始低概率状态"]
B1 --> B2 --> B3
end
subgraph penalty_detail["Case B: 熵感知多样性惩罚"]
direction TB
E1["H 低: 同质化推荐 严厉惩罚"]
E2["H 高: 探索性推荐 温和惩罚"]
E1 --- E2
end
style INPUT fill:#d3f9d8,stroke:#2f9e44,stroke-width:2px
style REWARD fill:#ffe8cc,stroke:#d9480f,stroke-width:2px
style DECOUPLE fill:#e5dbff,stroke:#5f3dc4,stroke-width:2px
style ADVANTAGE fill:#e5dbff,stroke:#5f3dc4,stroke-width:2px
style CHECK fill:#ffe3e3,stroke:#c92a2a,stroke-width:2px
style BOOST fill:#d3f9d8,stroke:#2f9e44,stroke-width:2px
style ENTROPY fill:#ffe8cc,stroke:#d9480f,stroke-width:2px
style PENALTY fill:#ffe3e3,stroke:#c92a2a,stroke-width:2px
style UPDATE fill:#c5f6fa,stroke:#0c8599,stroke-width:2px
style B1 fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
style B2 fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
style B3 fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
style E1 fill:#ffe3e3,stroke:#c92a2a,stroke-width:1px
style E2 fill:#d3f9d8,stroke:#2f9e44,stroke-width:1px
Case A:正向冷启动助推。 当 A_SAGE > 0(推荐列表获得正反馈)时,SAGE 引入一个 boost factor,把 clipping 上界从 1+epsilon 扩展到 1+epsilon+boost。效果是:如果模型成功推荐了一个冷启动物品(导致 r_slate 较高),策略更新不会在 1+epsilon 处被截断,而是可以持续到 1+epsilon+boost。这给了冷启动物品突破初始低概率状态的动量——用论文的话说,“超线性激励”。
消融实验直接量化了这个效果:去掉 boost factor,冷启动召回率暴跌 50%。这不是边际改善,是核心功能的开关。
Case B:熵感知多样性惩罚。 当 A_SAGE < 0(推荐列表获得负反馈)时,SAGE 不是用固定的下界 1-epsilon 做惩罚,而是先计算推荐列表的信息熵 H(S)。如果 H(S) 低(列表中物品高度同质化),说明模型在”信息茧房”里重复推荐相似内容,此时动态扩大负向边界,施加更强的惩罚。如果 H(S) 高(列表多样性好),说明是”诚实的探索失败”——模型尝试了多样的推荐但用户不买账,此时保持温和的惩罚。
这个设计的精妙之处在于:它让优化器具备了区分”为什么失败”的能力,而不是一刀切地惩罚所有失败。
原生文本 vs Semantic ID:一个更激进的选择
SAGE 论文的另一个重要立场是废弃 Semantic ID,直接用物品的原生文本描述(标题、标签等)作为生成目标。这和 GPR、GR4AD、UniVA 的路线完全相反——后三者都在 Semantic ID 框架内做优化。
SAGE 给出的理由是:Semantic ID 在工业规模下有三个灾难性问题——碰撞冲突(多个物品被编码为同一 ID)、词表维护成本(每天新增上亿内容时不可控)、语义断裂(量化过程丢失 LLM 能理解的语义信息)。用原生文本可以直接利用 LLM 预训练获得的语义知识。
但这个选择有明显的 tradeoff:
| 维度 | Semantic ID (GPR/GR4AD) | 原生文本 (SAGE) |
|---|---|---|
| 生成效率 | 3-5 个 token 确定一个物品 | 几十到上百 token |
| 语义利用 | 弱(量化后语义损失) | 强(直接用 LLM 预训练知识) |
| 碰撞问题 | 存在(GR4AD: 85.44%) | 不存在 |
| 词表维护 | 需要持续更新 | 无额外维护 |
| 线上延迟 | 低(3 步 beam search) | 高(长序列生成) |
| 生产验证 | 有(GPR GMV +5%, GR4AD 收入 +4.2%) | 无线上 A/B |
GPR 和 GR4AD 选择 Semantic ID 不是因为不知道原生文本的优势,而是因为广告系统的 100ms 延迟预算下,长文本生成的 serving 成本不可接受。SAGE 论文没有讨论 serving 延迟——这是离线评估论文的典型盲区。
两条路线不一定互斥。SAGE 的非对称优化器设计和动作空间的选择是正交的——论文自己也做了验证:把 SAGE 优化器插到 OneRec 的 Semantic ID 框架里(OneRec-SAGE),同样拿到了冷启动和多样性的显著提升。这说明 SAGE 的核心贡献是优化器本身,不是废弃 Semantic ID。
实验数据:亮点与缺口
冷启动和多样性的提升幅度
SAGE 在三个 Amazon 数据集上的核心指标:
| 对比维度 | SAGE vs GBPO |
|---|---|
| 冷启动召回率 | +49% (Beauty) / +63% (Sports) / +43% (Toys) |
| 推荐多样性 (Entropy@10) | +5.9% / +10.4% / +7.4% |
| Top-K 准确率 (Recall@5) | 全面优于所有 baseline |
冷启动 +49-63% 的幅度在推荐系统文献里非常罕见。消融实验也干净——去掉 boost factor 冷启动直接腰斩,去掉熵感知惩罚多样性下降 22%,去掉信号解耦各指标均有下滑。三个模块缺一不可。
在工业级 RecIF-Bench(1.2 亿次真实交互)上,SAGE 同样保持了优势。特别是在指令遵循(Instruction-conditioned)子任务中,原生文本方案的优势被放大——这支持了 LLM 语义知识被 Semantic ID 阻断的判断。
最大的缺口:没有线上 A/B
把 SAGE 和已有工业论文放在一起比较时,一个关键差距非常明显:
| 论文 | 线上 A/B 结果 | 部署规模 |
|---|---|---|
| GPR (微信视频号) | GMV 累计 +5% | 亿级用户全量 |
| GR4AD (快手) | 广告收入 +4.2% | 亿级用户全量 |
| UniVA (腾讯广告) | GMV +1.5% | 亿级用户全量 |
| OneTrans (字节) | Per-user GMV +5.68% | 全量部署 |
| SAGE (小红书) | 无 | 离线评估 |
离线指标和线上指标之间有巨大的鸿沟。离线评估用的是固定的历史日志,模型的推荐结果不会影响后续的用户行为。但线上系统是一个动态的闭环——今天推荐了什么影响明天的用户行为,进而影响后天的训练数据。SAGE 的 boost factor 在线上会不会导致冷启动物品的过度曝光?熵感知惩罚的超参数在流量波动时是否稳定?这些问题只有线上实验能回答。
这不是否定 SAGE 的价值——它提出的问题(PPO 对称 clipping 在推荐系统里失效)是真实的,给出的方案(非对称自适应边界)在消融实验里得到了干净的验证。但从”有意思的学术想法”到”经过工业验证的生产方案”之间,还有 serving 延迟、系统稳定性、长期效果评估这些关键环节没有走完。
对从业者的启示
推荐 RL 不能照搬 NLP——这个判断已经足够确凿
把 SAGE 和 GPR/GR4AD 的 RL 方案放在一起看,一个跨论文的共识非常清晰:推荐系统的 RL 阶段需要针对推荐场景做根本性的改造,不是调超参数的问题。
GPR 的 HEPO 改的是奖励信号(层级过程奖励),GR4AD 的 RSPO 改的是优化目标(列表级 NDCG),UniVA 的 MCTS-PPO 改的是探索策略(树搜索),SAGE 改的是梯度约束的形状(非对称 clipping)。四篇论文从四个不同的角度到达了同一个结论:PPO 原版在推荐系统里不够用。
| RL 方案 | 改的是什么 | 解决的推荐特有问题 |
|---|---|---|
| HEPO (GPR) | 奖励信号 | 层级信用分配 |
| RSPO (GR4AD) | 优化目标 | 列表级排序对齐 |
| MCTS-PPO (UniVA) | 探索策略 | 低概率分支覆盖 |
| SAGE (小红书) | 梯度约束形状 | 冷启动压制 + 多样性坍塌 |
四者理论上正交,可以组合。如果你正在搭建生成式推荐系统的 RL 阶段,最务实的起点是 HEPO(实现成本最低:一个稀疏计数表),然后看冷启动和多样性是否是你系统的瓶颈——如果是,SAGE 的非对称 clipping 值得尝试。
Text vs Semantic ID 的选择取决于 serving 预算
SAGE 废弃 Semantic ID 的选择在学术评估里优势明显,但在工业部署里要看你的延迟预算。如果你的系统要求 100ms 内返回结果(广告系统的典型要求),长文本生成的 serving 成本可能不可接受。如果你的场景对延迟不那么敏感(比如 feed 流推荐的预加载),原生文本方案值得认真评估——它消除了 Semantic ID 的碰撞问题和维护成本,同时释放了 LLM 的语义理解能力。
不过 SAGE 最有价值的贡献不在于 Text vs SID 的选择,而在于非对称优化器本身。论文验证了 SAGE 优化器可以即插即用到 Semantic ID 框架里(OneRec-SAGE),效果同样显著。优化器和动作空间的选择是独立的两个维度。
回到最开始的问题:生成式推荐的 RL 阶段为什么是最不成熟的?因为推荐系统和 NLP 在数据分布上有根本性差异——正反馈的稀疏性和不均匀性、负反馈的同质化、多目标的奖励混淆——而社区一直在用为 NLP 设计的优化器来做推荐。SAGE 不一定是最终答案,但它指出了正确的问题方向。下一步需要的是线上验证:非对称 clipping 在真实流量中的长期效果,以及 boost factor 和熵感知惩罚的超参数在不同场景下的鲁棒性。
References:
- SAGE: Sequence-level Adaptive Gradient Evolution for Generative Recommendation - 小红书 (2026.1)
- GPR: Towards a Generative Pre-trained One-Model Paradigm for Large-Scale Advertising Recommendation - 微信视频号 (2025.11)
- GR4AD: Generative Recommendation for Large-Scale Advertising - 快手 (2026.2)
- UniVA: Unified Value Alignment for Generative Recommendation in Industrial Advertising - 腾讯广告 (2026.5)
- OneRec: End-to-End Generative Recommendation - 快手 (2025)