OneRec-V2 Technical Report¶
1. 研究动机与背景¶
OneRec-V1 (Zhou et al., 2025, arXiv:2506.13695) 将推荐重构为端到端的自回归生成任务,在快手大规模部署中取得了显著成效。然而 V1 存在两个核心瓶颈:
-
Encoder-Decoder 架构的计算分配不均:在 OneRec-V1 的 Encoder-Decoder 框架中,encoder 处理用户历史交互序列,decoder 通过 cross-attention 利用编码结果。当上下文长度 $N=512$ 时,context encoding 消耗了总 FLOPs 的 97.66%,而真正与生成任务相关的 target decoding 仅占 2.34%。这种失衡严重限制了模型向更大规模扩展的能力。
-
基于 Reward Model 的强化学习的局限性:(a) 采样效率低——reward model 需要额外的计算资源进行在线生成和打分,只能对小部分用户进行 on-policy rollout(仅 1%);(b) 存在 reward hacking 风险——policy 可能学会利用 reward model 的偏差而非真正提升推荐质量。
OneRec-V2 针对这两个问题分别提出了 Lazy Decoder-Only 架构 和 基于用户真实反馈信号的偏好对齐 方案。
2. Lazy Decoder-Only 架构¶
2.1 设计原则¶
论文首先分析了三种架构下计算资源用于 loss 相关的 target decoding 的比例(Table 1, 1B 参数模型):
| 架构 | Context Length N | Total GFLOPs | Context Encoding GFLOPs | Target Decoding GFLOPs | Target 占比 |
|---|---|---|---|---|---|
| Enc:Dec (0.5B:0.5B) | 512 | 346 | 338 | 8.1 | 2.34% |
| Enc:Dec (0.5B:0.5B) | 3000 | 1988 | 1980 | 8.1 | 0.41% |
| Naive Dec-Only (1B) | 512 | 632 | 614 | 18 | 2.85% |
| Naive Dec-Only (1B) | 3000 | 3618 | 3600 | 18 | 0.49% |
| Lazy Dec-Only (1B) | 512 | 18 | - | 18 | ~100% |
| Lazy Dec-Only (1B) | 3000 | 18 | - | 18 | ~100% |
核心观察:无论是 Encoder-Decoder 还是 Naive Decoder-Only,绝大部分计算都花在了 context encoding 上,这些计算并不直接贡献于 loss。Lazy Decoder-Only 将计算 完全集中在目标 item 的 semantic token 上,从而实现高效扩展。
2.2 数据组织:New Impression Only Organization¶
论文提出了一种新的训练数据组织方式(Figure 3c):按时间顺序排列 impressions,但训练 loss 仅施加在每个 impression 中最新的 item 上,历史 item 在 next token prediction 中被排除(灰色标注)。这避免了 naive impression organization 的冗余训练和 user-centric organization 的时序泄露问题。
2.3 整体架构¶
Context Processor¶
将异构的用户特征(user profile、短期行为、长期行为)通过不同的 linear 层映射并拼接为统一的 context 序列。每个 context token 被处理为相同维度:
$$d_{\text{context}} = S_{\text{kv}} \cdot L_{\text{kv}} \cdot G_{\text{kv}} \cdot d_{\text{head}}$$
其中 $d_{\text{head}}$ 为 attention head dimension,$G_{\text{kv}}$ 为 KV head group 数,$S_{\text{kv}}$ 为 key-value split coefficient,$L_{\text{kv}}$ 为 key-value layer 数。
Context tensor 被沿特征维度切分为 $L_{\text{kv}}$ 组 KV 对:
$$\text{Context} = [\mathbf{C}_0, \mathbf{C}_1, \ldots, \mathbf{C}_{S_{\text{kv}} \cdot L_{\text{kv}} - 1}]$$
对每一层 $l \in \{0, 1, \ldots, L_{\text{kv}}-1\}$,计算归一化的 KV 对:
$$\mathbf{k}_l = \text{RMSNorm}_{k,l}(\mathbf{C}_{l \cdot S_{\text{kv}}})$$
$$\mathbf{v}_l = \begin{cases} \text{RMSNorm}_{v,l}(\mathbf{C}_{l \cdot S_{\text{kv}}+1}), & \text{if } S_{\text{kv}} = 2 \\ \mathbf{k}_l, & \text{if } S_{\text{kv}} = 1 \end{cases}$$
Lazy Decoder Block¶
Tokenizer:每个目标 item 使用 semantic tokenizer 生成 3 个 semantic IDs。训练时取前 2 个 ID,加上 BOS token 组成输入序列:
$$\mathbf{h}^{(0)} = \text{Embed}([\text{BOS}, s^1, s^2]) \in \mathbb{R}^{3 \times d_{\text{model}}}$$
每个 Lazy Decoder Block 包含三个模块,第 $l$ 层的变换为:
$$\mathbf{h}_{\text{cross}}^{(l)} = \mathbf{h}^{(l-1)} + \text{CrossAttn}\left(\text{RMSNorm}(\mathbf{h}^{(l-1)}), \mathbf{k}_{l_{\text{kv}}}, \mathbf{v}_{l_{\text{kv}}}\right)$$
$$\mathbf{h}_{\text{self}}^{(l)} = \mathbf{h}_{\text{cross}}^{(l)} + \text{SelfAttn}\left(\text{RMSNorm}(\mathbf{h}_{\text{cross}}^{(l)})\right)$$
$$\mathbf{h}^{(l)} = \mathbf{h}_{\text{self}}^{(l)} + \text{FFN}^{(l)}\left(\text{RMSNorm}(\mathbf{h}_{\text{self}}^{(l)})\right)$$
关键创新——Lazy Cross-Attention:cross-attention 中 不使用 $W_k$, $W_v$ 投影矩阵,KV 对直接来自 Context Processor 的输出。仅保留 Q linear 投影。结合 Grouped Query Attention (GQA),大幅降低内存占用。
KV-Sharing:多个连续的 lazy decoder block 共享同一组 KV 对,第 $l$ 层使用的 KV 索引为:
$$l_{\text{kv}} = \left\lfloor \frac{l \cdot L_{\text{kv}}}{N_{\text{layer}}} \right\rfloor$$
MoE 混合架构:在较深层将 dense FFN 替换为 Mixture-of-Experts (MoE),采用 DeepSeek-V3 的 auxiliary-loss-free load balancing 策略。MoE 配置:53 routed experts + 1 shared expert,top-3 routing,MoE intermediate size 1408。
Output Layer:最后一层的 hidden representation 经过 position-specific RMSNorm 和 Linear 层,预测各位置的 semantic ID。
2.4 实验结果¶
2.4.1 架构对比¶
实验使用快手 2025 年 8 月 10-14 日的 streaming impression 数据训练。
Table 2: 不同架构在不同规模下的对比
| Architecture | Parameters | GFLOPs | Activations | Convergence Loss |
|---|---|---|---|---|
| Enc:Dec=1:1 | 0.1B | 25.64 | 4.21B | 3.59 |
| Enc:Dec=1:2 | 0.1B | 17.72 | 2.92B | 3.55 |
| Naive Dec-Only | 0.1B | 63.78 | 7.52B | 3.54 |
| Lazy Dec-Only | 0.1B | 1.98 | 0.31B | 3.57 |
| Enc:Dec=1:1 | 0.5B | 142.73 | 10.79B | 3.35 |
| Enc:Dec=1:2 | 0.5B | 104.73 | 7.94B | 3.32 |
| Lazy Dec-Only | 0.5B | 9.55 | 0.77B | 3.33 |
| Enc:Dec=1:1 | 1B | 296.36 | 17.63B | 3.28 |
| Enc:Dec=1:2 | 1B | 204.21 | 12.20B | 3.26 |
| Naive Dec-Only | 1B | 634.83 | 31.53B | * |
| Lazy Dec-Only | 1B | 18.89 | 1.24B | 3.27 |
结论:Lazy Dec-Only 在 FLOPs 减少约 94%、activation memory 减少约 90% 的情况下,达到了与传统架构相当的收敛 loss。
生成损失定义为:
$$\mathcal{L}_{\text{Gen}} = -\frac{1}{3}\sum_{i=1}^{3}\log p(s^i|\text{BOS}, s^{\lt i}, \text{Context})$$
2.4.2 Key-Value Sharing 消融¶
Table 3: KV sharing 策略的影响(1B dense model, $N_{\text{layer}}=18$)
| $L_{\text{kv}}$ | $S_{\text{kv}}$ | GFLOPs | Activations | Convergence Loss |
|---|---|---|---|---|
| 1 | 1 | 18.89 | 1.24B | 3.27 |
| 1 | 2 | 19.19 | 1.33B | 3.27 |
| 3 | 1 | 19.49 | 1.42B | 3.27 |
| 9 | 1 | 21.27 | 1.99B | 3.27 |
| 18 | 1 | 23.95 | 2.83B | 3.27 |
结论:极端的 KV sharing($L_{\text{kv}}=1, S_{\text{kv}}=1$,即所有层共享同一组 KV 且 K=V)不会损害收敛 loss,验证了高效 context 处理策略的有效性。
2.4.3 Grouped Query Attention¶
Table 4: GQA 的影响(1B dense model, 14 attention heads)
| $G_{\text{kv}}$ | GFLOPs | Activations | KV Size | Convergence Loss |
|---|---|---|---|---|
| 14 | 18.89 | 1.24B | 94M | 3.27 |
| 7 | 18.74 | 1.19B | 47M | 3.28 |
| 2 | 18.64 | 1.16B | 13M | 3.28 |
| 1 | 18.62 | 1.15B | 7M | 3.27 |
结论:GQA 将 KV Size 从 94M 降至 7M(13.4x 压缩),loss 几乎无变化。
2.4.4 Scaling Law¶
Table 5: Dense 模型的超参数配置和收敛 loss
| Model | Parameters | d_model | n_layers | n_heads | embed_dim | LR | Convergence Loss |
|---|---|---|---|---|---|---|---|
| Dense | 0.1B | 640 | 12 | 10 | 32 | 5.00e-4 | 3.57 |
| Dense | 0.2B | 896 | 12 | 14 | 45 | 3.54e-4 | 3.46 |
| Dense | 0.5B | 1408 | 14 | 11 | 70 | 2.24e-4 | 3.33 |
| Dense | 1B | 1792 | 18 | 14 | 90 | 1.58e-4 | 3.27 |
| Dense | 2B | 2304 | 22 | 18 | 115 | 1.12e-4 | 3.23 |
| Dense | 4B | 2944 | 26 | 23 | 147 | 7.91e-5 | 3.20 |
| Dense | 8B | 3584 | 34 | 28 | 179 | 5.59e-5 | 3.19 |
| MoE | 4B (0.5B active) | 1408 | 14 | 11 | 70 | 2.24e-4 | 3.22 |
Scaling law 拟合结果(Figure 6):
$$\hat{L}(N) \doteq E + \frac{A}{N^\alpha}$$
其中 $E = 3.13$,$A = 3660$,$\alpha = 0.489$。收敛 loss 从 0.1B 的 3.57 平滑下降到 8B 的 3.19,与 Chinchilla scaling law (Hoffmann et al., 2022) 高度吻合。
MoE 结果:4B 总参数(0.5B activated)的 MoE 模型达到 3.22 的收敛 loss,超过了 2B dense 模型(3.23),同时计算量与 0.5B dense 模型相当。相比 0.5B dense(3.33),loss 降低了 0.11。
3. 基于用户真实反馈的偏好对齐¶
3.1 Supervised Fine-Tuning¶
SFT 阶段与 OneRec-V1 相同,使用 streaming exposure 数据在线训练 $\mathcal{L}_{\text{Gen}}$ loss,目的是捕捉用户实时兴趣变化并防止模型偏离预训练模型太远。
3.2 Duration-Aware Reward Shaping¶
在短视频推荐场景中,播放时长是最密集的反馈信号,与 App Stay Time 和 LT7(7 天留存)高度相关。但原始播放时长天然受视频时长偏置影响。
对数分桶函数:将视频时长映射到离散桶:
$$\mathcal{F}(d) = \lfloor \log_\beta(d + \epsilon) \rfloor$$
其中 $\beta$ 为对数基底控制桶粒度,$\epsilon$ 为小常数(如 $10^{-6}$)防止极短视频的数值不稳定。
Duration-normalized engagement score:对于目标视频 $i$(时长 $d_i$,播放时长 $p_i$),先定位到桶 $b = \mathcal{F}(d_i)$,然后计算 $p_i$ 在用户 $u$ 该桶历史播放时长分布 $P_{u,b}$ 中的百分位排名:
$$q_i = \frac{|\{p_j \in P_{u,b} \mid p_j \le p_i\}|}{|P_{u,b}|}$$
Advantage 定义:
$$A_i = \begin{cases} +1, & q_i \gt \tau_B \text{ and } neg_i = 0 \\ -1, & neg_i = 1 \\ 0, & \text{otherwise} \end{cases}$$
其中 $\tau_B$ 为 batch 内 $q_i$ 降序排列后的 25% 分位数(即 top 25% 为正样本),$neg_i=1$ 表示显式负反馈(如"不喜欢")。
3.3 Gradient-Bounded Policy Optimization (GBPO)¶
论文提出新的强化学习方法 GBPO,目标函数:
$$\mathcal{J}_{\text{GBPO}}(\theta) = -\mathbb{E}_{u \sim P(U), \{o_i\}_{i=1}^G \sim \pi_{\theta_{\text{old}}}} \left[\frac{1}{G}\sum_{i=1}^{G} \frac{\pi_\theta(o_i|u)}{\pi'_{\theta_{\text{old}}}(o_i|u)} \cdot A_i \right]$$
其中 dynamic bound $\pi'_{\theta_{\text{old}}}(o_i|u)$ 定义为:
$$\pi'_{\theta_{\text{old}}}(o_i|u) = \begin{cases} \max(\pi_{\theta_{\text{old}}}, sg(\pi_\theta)), & A_i \ge 0 \\ \max(\pi_{\theta_{\text{old}}}, 1 - sg(\pi_\theta)), & A_i \lt 0 \end{cases}$$
GBPO 相比 GRPO/PPO/ECPO 的两个核心优势: 1. Full Sample Utilization:保留所有样本的梯度,不丢弃任何样本,鼓励更多探索 2. Bounded Gradient Stabilization:用 BCE loss 的梯度形式约束 RL 梯度,确保负样本不会导致梯度爆炸
梯度分析:传统 ratio-clipping 方法(ECPO/GRPO)在 ratio=1 时不做截断,但负样本在此时仍可能导致梯度爆炸(Figure 9)。ECPO 的梯度为:
$$\frac{\partial \mathcal{J}_{\text{ECPO}}^i(\theta)}{\partial \theta} = -A_i \cdot \frac{1}{\pi_\theta} \frac{\partial \pi_\theta}{\partial \theta}$$
当 $\pi_\theta$ 很小时,$1/\pi_\theta$ 会导致梯度爆炸。GBPO 通过引入 dynamic bound 将比值限制在 BCE loss 的梯度范围内,显著提升训练稳定性。
3.4 RL 实验结果¶
实验设置:0.5B 模型,context length 512,baseline 为 OneRec-V1。设计两组实验对比是否包含 OneRec 自身生成的样本(on-policy)。
Table 6: 用户反馈信号 RL 的线上 A/B 测试(相对 OneRec-V1 baseline 的提升)
| 场景 | 指标 | w/o OneRec Samples | w/ OneRec Samples |
|---|---|---|---|
| Kuaishou | App Stay Time | +0.165% | +0.227% |
| Watch Time | +1.054% | +0.648% | |
| Video View | -0.901% | +0.716% | |
| Like | -0.186% | +2.897% | |
| Follow | +2.274% | +3.661% | |
| Comment | -4.982% | +6.392% | |
| Collect | -0.817% | +1.232% | |
| Forward | -2.162% | +3.426% | |
| Kuaishou Lite | App Stay Time | +0.159% | +0.353% |
| Watch Time | +0.396% | +0.104% | |
| Video View | -2.231% | +0.575% | |
| Like | -0.534% | +4.956% | |
| Follow | +1.809% | +4.800% | |
| Comment | -4.860% | +5.067% | |
| Collect | -0.377% | +2.701% | |
| Forward | +0.775% | +5.783% |
结论:仅用传统管线样本时,时长指标提升但交互指标下降(跷跷板效应)。引入 OneRec 自身样本后(on-policy),几乎所有指标全面提升,实现了自我迭代优化。
3.5 User Feedback Signals vs. Reward Model¶
Table 7: 三种 RL 策略的线上对比(相对 OneRec-V1)
| 场景 | 指标 | Reward Model | User Feedback Signals | Hybrid |
|---|---|---|---|---|
| Kuaishou | App Stay Time | +0.269% | +0.299% | +0.283% |
| Watch Time | +0.537% | +0.610% | +0.118% | |
| Video View | +0.505% | +0.647% | +0.647% | |
| Like | +6.552% | +2.435% | +7.010% | |
| Follow | +7.265% | +2.007% | +8.458% | |
| Comment | +15.472% | +0.944% | +8.763% | |
| Collect | +1.856% | +1.401% | +9.739% | |
| Forward | +12.024% | +0.803% | +5.270% | |
| Kuaishou Lite | App Stay Time | +0.163% | +0.213% | +0.207% |
| Watch Time | +0.503% | +0.172% | -0.398% | |
| Video View | +0.457% | +0.056% | +0.083% | |
| Like | +7.798% | +4.008% | +6.267% | |
| Follow | +12.242% | +4.421% | +11.705% | |
| Comment | +11.284% | +3.958% | +7.002% | |
| Collect | +4.468% | +1.731% | +3.495% | |
| Forward | +15.919% | +7.704% | +6.670% |
结论:
- Reward Model 倾向于提升交互类指标(Like/Follow/Comment/Forward),因为 reward model 本身融合了多目标
- User Feedback Signals 倾向于提升 App Stay Time,因为 reward 主要基于播放时长
- Hybrid 方案虽非两者简单叠加,但能更好地平衡 App Stay Time 和交互指标
4. 线上 A/B 测试¶
部署环境:快手主站和快手极速版,4 亿日活用户,5% 流量实验组,观测周期一周。模型使用 1B 参数版本,context length 3000,beam size 512,L20 GPU 推理,延迟 36ms,MFU 62%。仅使用 User Feedback Signals(不含 Reward Model)。
Table 8: OneRec-V2 vs OneRec-V1 最终线上效果
| 场景 | 指标 | OneRec-V2 |
|---|---|---|
| Kuaishou | App Stay Time | +0.467% |
| LT7 | +0.069% | |
| Watch Time | +1.367% | |
| Video View | +0.331% | |
| Like | +3.924% | |
| Follow | +4.730% | |
| Comment | +5.394% | |
| Collect | +2.112% | |
| Forward | +3.183% | |
| Kuaishou Lite | App Stay Time | +0.741% |
| LT7 | +0.034% | |
| Watch Time | +0.762% | |
| Video View | +0.259% | |
| Like | +5.393% | |
| Follow | +5.627% | |
| Comment | +5.013% | |
| Collect | +3.202% | |
| Forward | +7.958% |
OneRec-V2 在两个平台上全面超越 V1,App Stay Time 分别提升 0.467% 和 0.741%,所有交互指标均有显著正向提升(3-8%),且无跷跷板效应。
5. 禁用缓存实验(Appendix D)¶
在独立 1% 流量实验组中,所有请求均由 OneRec-V2 处理(非混合流量),结果更为显著:
Table 9: 全量 OneRec-V2 请求下的效果
| 场景 | 指标 | OneRec-V2 |
|---|---|---|
| Kuaishou | App Stay Time | +0.405% |
| Like | +15.024% | |
| Follow | +15.755% | |
| Comment | +29.249% | |
| Forward | +24.741% | |
| Cold-Start Video View | -44.704% | |
| Cluster Density | +11.692% | |
| Kuaishou Lite | App Stay Time | +0.958% |
| Like | +12.783% | |
| Follow | +21.376% | |
| Comment | +16.975% | |
| Forward | +30.957% | |
| Cold-Start Video View | -36.730% | |
| Cluster Density | +7.933% |
交互指标大幅提升(9.6%-29.2%),但暴露了生态问题:冷启动视频曝光显著下降(-44.7%/-36.7%),聚类密度上升(+11.7%/+7.9%),这是未来需要解决的关键挑战。
6. 结论与未来方向¶
- Scaling:Lazy Decoder-Only 从 0.1B 到 8B 的 scaling law 验证成功($\alpha=0.489$),后续可进一步扩大规模
- Reward System:当前基于播放时长的 reward 建立了短期与长期回报的关联规则,未来目标是让模型直接优化长期价值,实现 self-reinforcement
- 生态平衡:全量部署时冷启动内容曝光下降和内容聚集度上升是核心待解决问题