ILRec:推荐里的 preference learning,不一定只看序列级 rejected,也可以从中间层直接抽 token 级 self-hard negatives

背景

补完 S-DPOSPRecRosePONAPOReRe 之后,站里已经能分清:

  1. negative 是谁提供的
  2. multiple negatives 在 loss 里怎样耦合
  3. negative 怎样高效扩容
  4. 不同 value axis 是否该配不同 rejected
  5. on-policy sampling 之前是否要先把 valid item space 约束住

但这一轮继续沿 recommendation + intermediate hard negatives + preference learning 做候选筛选时,我发现这里还缺一个更靠近模型内部、也更容易被忽略的位:

negative 不一定来自外部 sampled items,也可以直接从模型中间层 logits 里长出来。

如果这层不单独拆出来,后面很容易继续把下面几类方法粗写成同一种“推荐里的 DPO / preference optimization 变体”:

  1. S-DPO 重点解决的是 multi-negative 的竞争几何
  2. SPRec 重点解决的是 negative sample owner
  3. NAPO 重点解决的是 negative coverage efficiency
  4. RosePO 重点解决的是 value-axis-specific rejected sampling
  5. ILRec 则重点解决 negative extraction locus

还有一个很实际的命名陷阱也要先拆开:

ILRec 不是站里之前写过的 IL-Rec

前者说的是:

从中间层抽 self-hard negatives 做 preference fine-tuning

后者说的是:

让 LLM 先当 demonstration teacher,再退场给 RL student

这一轮我直接回到一手材料做核验,最终锁定:

  1. Improving LLM-based Recommendation with Self-Hard Negatives from Intermediate Layers
  2. 2602.17410 arXiv HTML
  3. 2602.17410 PDF
  4. GitHub 仓库搜索:"Improving LLM-based Recommendation with Self-Hard Negatives from Intermediate Layers"

核完之后,我更愿意把它记成:

推荐里的 preference learning,不一定非要先构造序列级 rejected,也可以直接在中间层里抽 token 级 self-hard negatives。

核心判断

这条线真正新增的,不是 another DPO trick,而是 negative extraction locus

现有 preference optimization 方法,默认都会先构造某种 item-level 或 sequence-level rejected:

  1. 随机负样本
  2. self-play 生成结果
  3. batch 内共享出来的 negative items
  4. value-axis-specific rejected sampling

ILRec 追问的则更靠前:

为什么 negative 一定要先长成完整 item sequence,不能直接从当前模型内部的 token 分布里取?

论文摘要、Section 1-2Figure 1-3 的回答很明确:

  1. 推荐任务的 negative item space 很大,sequence-level negatives 往往过粗
  2. 离线采好的 negatives 会随着训练发生 distribution shift,越来越不 informative
  3. 中间层本身就是“比 final layer 弱、但又有足够预测能力的 non-expert models”
  4. 因而可以直接把中间层里高概率、但非 ground-truth 的 token 抽出来,当作 self-hard negative signals

这会逼着 Story Lab 以后在 DPO / preference alignment 观察表里单独补一列:

negative extraction locus

否则 SPRec / NAPO / RosePO / ILRec 还是会继续被写成同一种“只是 negative 来路不同”。

CPO + CPD + CRR 让这条线不只是“抽内部 logits”,而是形成了一条完整训练契约

ILRec 不是只在中间层拿几个高概率 token 出来惩罚一下。

它把整条链路拆成三段:

  1. CPO:把 self-hard negative token 作为 penalty coefficient 注入最终层的交叉熵
  2. CPD:让 final output layer 反过来蒸馏 intermediate layers,保证这些 negatives 不是噪声
  3. CRR:再用一个轻量 CF 模型给 token 分配 reward,缓解 false negatives 被过度惩罚

正文 2.3-2.4 和附录 A.1 还把实现边界写得很清楚:

  1. backbone 用的是 Llama3.1-8B
  2. CRR 里选的是 SASRec
  3. 训练跑在 8A100 40GB

所以它补出的不只是内部负样本,而是一整条此前站里没单独记开的位:

  1. intermediate-layer teacher-student loop
  2. false-negative guard
  3. token-level reward regularization

这和 NAPO 那种外部辅助模型决定 dynamic γ 的路数不同,也和 SPRec 的 self-play negative owner 不同。

Table 1 说明 internal token negatives 在 full ranking 下已经能系统性赢过现有 sequence-level baselines

这篇 paper 最值得留下来的第一层,是它不是只在单一数据集上碰巧有效。

Table 1 给出的主结果非常整齐。

BIGRec 范式下:

  1. InstrumentHit@10 / NDCG@100.1004 / 0.0799 提到 0.1091 / 0.0856
  2. Art0.0979 / 0.0768 提到 0.1045 / 0.0852
  3. Game0.0677 / 0.0481 提到 0.0709 / 0.0511

LC-Rec 范式下:

  1. Instrument0.1062 / 0.0832 提到 0.1143 / 0.0889
  2. Art0.1045 / 0.0778 提到 0.1118 / 0.0821
  3. Game0.0984 / 0.0561 提到 0.1075 / 0.0600

更关键的是,同表里已经放着 RosePO / SDPO / SPRec

也就是说,这不是“比传统 SFT 稍微好一点”,而是:

在 full-ranking sequential recommendation 设定里,internal token-level negatives 已经能稳定压过几条更典型的 sequence-level preference baselines。

所以这条线最值得长期记住的,不是“中间层也能用”,而是:

negative extraction locus 这件事本身,已经足以改变最终 ranking quality。

Table 3 和附录说明,真正值钱的不是任何 logits,而是 intermediate layers 这一层

如果只是“从模型内部抽 negative”,那 final layer 自己的 logits 也能做这件事。

ILRec 的 ablation 恰好把这层拆开了。

Table 3BIGRec / Instrument 上给出:

  1. 完整 ILRecHit@10 = 0.1091
  2. 去掉 CPO:降到 0.1068
  3. 去掉 CPD:降到 0.1051
  4. 去掉 CRR:降到 0.1078
  5. 同时去掉 CPO + CPD:进一步掉到 0.0996
  6. 去掉 cross-layer negative signals:0.1059
  7. 只用 final layer negative + CPO0.1029
  8. 只用 intermediate layer negative + CPO0.1048

这组结果把几个点写得很清楚:

  1. CPO / CPD / CRR 都不是配角
  2. 真正值钱的不是“任意层的 logits”,而是 intermediate-layer negatives
  3. final layer 自己直接拿来做 negative extraction,反而更弱

附录 Table 8 还继续把这层拆细:

  1. 最优的是靠近 final layer 的连续深层
  2. non-consecutive layers、medium layers 和 shallow layers 都更差

所以这条线真正新增的,不只是 token-level negatives,还包括一个更细的观察位:

negative extraction depth

它补出的还有一条很少被单独写开的结论:stay-in-SFT 可能比单独 preference / rollout stage 更合算

这篇 paper 另一个很值得长期记住的地方,是它没有把自己写成“更复杂的新阶段”,而是反过来把 preference learning 收回到了 SFT 内部。

Table 5 的效率对照非常直白。

Instrument 上:

  1. S-DPO7.25h
  2. RosePO6.6h
  3. SPRec7.8h
  4. ILRec4.2h

Art 上:

  1. S-DPO10.25h
  2. RosePO9.53h
  3. SPRec11.5h
  4. ILRec7.46h

原因也写得很明确:

  1. 它不需要额外 preference alignment stage
  2. 不需要 rollout 采样
  3. 不需要为每个 negative 做额外 forward

而附录 Table 7 又给出一个更值得记住的对照:

  1. ILRecHit@10 / NDCG@10 = 0.1091 / 0.0856,训练 4.1h
  2. RLVR0.1054 / 0.0817,训练 6.5h
  3. RLVR-reasoning0.1062 / 0.0835,训练 10.6h

这说明在当前这类 full-ranking sequential recommendation 场景里,一个非常值得单独沉淀的判断是:

在真的上 rollout 之前,internal negative extraction 仍然是一条又便宜又强的中间路线。

这会逼着 Story Lab 后续再补一个新列:

stay-in-SFT efficiency

否则 ILRecS-DPOSPRec 和简单 RLVR 之间的训练边界会继续被混写成“反正都在做 preference optimization”。

公开边界要写准:这是人大 + 美团的 paper-first 路线,repo 和中文传播层都还弱

这篇 paper 的工业信号并不弱。

作者表直接写了:

  1. Renmin University of China
  2. Meituan

arXiv 摘要页显示提交日期是 2026-02-19

但公开边界目前仍要写得保守。

我这轮按:

  1. 论文全标题
  2. ILRec recommendation intermediate layers
  3. arXiv id 2602.17410

去做 GitHub API 精确和模糊检索,截至 2026-03-25 都没有看到稳定官方 repo。

中文传播层也明显偏弱。

继续补做:

  1. 论文全标题中文检索
  2. 2602.17410 中文
  3. site:zhihu.com 2602.17410
  4. site:weixin.qq.com 2602.17410
  5. site:xiaohongshu.com 2602.17410
  6. xhslink 2602.17410

稳定结果仍主要停留在 arXiv 原文、镜像页和弱聚合页,没有拿到稳定高价值中文机制稿或可复用小红书线索。

因此当前更准确的定位是:

paper-first intermediate-layer negative-extraction route

证据与来源

  • 一手论文入口:Improving LLM-based Recommendation with Self-Hard Negatives from Intermediate LayersarXiv HTMLPDF
  • 发表时间与作者边界:arXiv 摘要页可直接核到提交日期 2026-02-19;PDF 首页可核到作者来自 Renmin University of ChinaMeituan
  • 关键机制:Section 2Figure 1-3 明确写出 intermediate-layer self-hard negatives -> CPO -> CPD -> CRR 这条主链,CRR 还明确依赖轻量 CF 模型缓解 false negatives
  • 关键结果:Table 1 给出 BIGRec / LC-RecInstrument / Art / Game 三个数据集上的 full-ranking 指标;Table 3 给出 CPO / CPD / CRR / CNS 的 ablation;Table 5 给出与 S-DPO / RosePO / SPRec 的训练时间对比;Table 7 给出与 RLVR / RLVR-reasoning 的性能-时间对比
  • 实现边界:PDF 附录 A.1 明确写出 backbone 为 Llama3.1-8BCRR 中使用 SASRec、训练跑在 8A100 40GB
  • repo 检索:GitHub 精确标题搜索当前仍未回出稳定官方仓,可作为“截至 2026-03-25 仍无稳定 repo”的辅助证据
  • 中文传播层:截至 2026-03-25,继续补做中文题名、site:zhihu.com / site:weixin.qq.com / site:xiaohongshu.comxhslink 检索后,仍未拿到稳定高价值中文机制稿或可复用小红书线索

下一步

  • ILRec / S-DPO / SPRec / NAPO / RosePO / ReRe / DPO4Rec 压到同一张 DPO / preference alignment 观察表里,新增 negative extraction locus / sequence-vs-token comparison unit / false-negative guard / intermediate-layer teacher-student loop / stay-in-SFT efficiency 五列
  • ILRecIL-Rec 这对名字相近但系统位完全不同的方法单独拆开,避免后续在 LLM-RL 主线里把 intermediate negativesdemonstration teacher 混成一类
  • 继续追中文传播层和公开仓;如果后续出现作者解读、代码仓或稳定 xhslink,再回头修正公开边界