/images/avatar.jpg

lilfry's library

🤖 记录LLM,agent,算法与leetcode,还有一些随想。

一个小小的互联网自留地

读 Selective DPO:偏好数据为什么不是越难越好

偏好对齐里有一个很自然的直觉:只要 chosen 和 rejected 没有标错,数据越多越好;难样本甚至应该更有训练价值。

Selective DPO 挑战了这个直觉。它提出,偏好数据是否有用,不只取决于标签质量,也取决于样本难度是否落在当前模型的能力范围内。

论文的核心主张是:

偏好样本具有稳定的难度差异;过难样本会因为超过模型容量而伤害对齐,而且“过难”的阈值随模型能力变化。

为什么大模型会陷入重复:从 High Inflow 到结构性循环

大模型开始重复时,表面上像是“同一个词说了太多次”。真实故障往往更严重:生成过程失去向前推进的能力,开始不断确认最近出现的高概率模式,直到外部用 max_tokens 强行终止。

开放文本里可能是句段复述,代码里可能是无休止的 if/elif、函数壳和断言,翻译里则可能同时出现语言切换和段落循环。

把这些现象放在一起看,repetition 更像一种生成动力学退化:

模型滑入了低信息、低变化、但局部概率很高的轨道,而且后续输出不断把它送回同一轨道。

KV Cache 优化地图:从丢 Token 到跨层共享

长上下文推理最先撞到的墙,经常不是 FLOPs,而是 KV Cache。

模型每生成一个新 token,都要让当前 query 访问过去 token 的 key 和 value。为了避免把过去全部重算一遍,推理系统把这些 K、V 留在显存里。代价是缓存随上下文长度、层数和 KV head 数一起增长。

这类工作看起来很多,其实可以放进一个很清楚的坐标系:

KV Cache 优化主要是在 Token、Layer、Head 三个维度上减少需要保存的状态。

读 OPUS:数据选择为什么必须看优化器真正走的方向

训练大模型时,我们通常先把数据清洗好,再随机采样训练。这个流程隐含了一个假设:

一条数据的价值在训练开始前就能确定,而且训练到哪一步都差不多。

OPUS 质疑的正是这个假设。同一条数据对初始模型可能很有用,对已经学会相关知识的模型却可能只是在重复;更关键的是,样本的原始梯度并不等于参数最后真正走的方向。AdamW 会按坐标缩放梯度,Muon 会对矩阵梯度做更强的几何变换。若数据选择仍按原始梯度打分,评分系统和真实训练过程就没有对齐。

OPUS 的核心判断可以压成一句话:

一条样本是否值得现在训练,要看它经过当前优化器处理后,能否把模型推向目标分布需要的方向,同时又不和已经选中的样本重复。

GRPO 训练 DeepSeek-V3 的数学能力:从 rollout 到参数更新

假设模型面对一道数学题,四次生成中只有一次答对。训练系统不会把标准答案当作交叉熵标签直接喂回模型,而是把四份回答放在一起比较:答对的回答得到正的相对优势,答错的回答得到负的相对优势,再通过当前模型对这些 token 的概率计算梯度。

这就是本文要复原的核心链路:

prompt
  → 旧策略采样多份回答
  → reward 函数打分
  → 组内标准化得到 advantage
  → 当前策略重新计算 log-probability
  → ratio + clip + KL 构成 loss
  → backward() 更新 actor 参数

本文只讨论可验证最终答案的数学任务,并使用教学设定解释机制。DeepSeek-V3 的完整训练还包含预训练、SFT、代码与写作等任务,以及从 DeepSeek-R1 系列蒸馏推理能力的后训练流程;下面的数学例子不是官方训练配置的逐项复现。DeepSeek-V3 技术报告,第 5 节

坐标谱优化器:用动量学习 PSGD 坐标,再做部分 Muon 谱校正

Muon 的核心动作是对矩阵动量做谱方向校正;PSGD-Kron 的核心动作是在线学习左右预条件因子。把二者直接相加并不能说明谁贡献了什么,因此本文记录一条更具体的组合路径:用动量 \(M_t\) 拟合 PSGD 的坐标变换,在这个坐标中把原始动量与 Newton–Schulz 谱方向做等范数混合,最后映回参数空间。

在 51M 参数模型、100,663,296 个 FineWeb-Edu 训练 token 上,正式候选为“\(\alpha=0.5\)、用 \(M\) 拟合 \(Q\)、前 256 步每步拟合,之后每 8 步拟合一次”。它在三个全新 seed 上都取得低于 Muon 的全量验证 loss,平均差值为 \(-0.006636\);代价是平均 wall-clock 高约 7.7%。因此正确的结论是“在这个受控设置下,用额外计算换取稳定但有限的 loss 改善”,而不是“已经普遍超过 Muon”。

本文信息截止到 2026-09-22。文中的实验数字来自附带的第二轮算法与 FineWeb 验证记录;它们是当前研究过程中的可复现实验证据,不是已发表论文的 benchmark 结论。

397B Agent RL 到底怎么跑:从 MCP trajectory、TITO token trace 到 Fully Async GRPO

Mercor 的 headline 是:用 1,928 个专业知识工作任务做 RL 后,Qwen3.5-397B-A17B 在 APEX-Agents 上的 Pass@1 从 16.11% 提高到 27.29%,绝对提升 11.18 个百分点,相对提升约 69%。但如果只记住“397B、GRPO、提升 69%”,几乎学不到怎么实现。

真正值得拆的是下面这条链:

Harbor task directory
  → Trial.create()
  → ECR world / Modal sandbox / MCP gateway
  → ArchipelagoAgent: LLM → tool call → observation → LLM
  → TITO: token_ids + loss_mask + rollout_logprobs
  → tests/test.sh → verifier_result.rewards["reward"]
  → TITOHarborGenerator
  → 16 rollouts / prompt 的 GRPO group
  → group-relative advantage
  → DPPO token mask + prompt_mean reduction
  → Megatron 更新参数
  → NCCL 同步到 12 个 vLLM engines

本文不再复述“Agent RL 很难”这种背景,而是沿这条链逐段打开数据结构和控制流。读完后,至少应该能回答三个具体问题:某个 tool observation 为什么不能有梯度?一条旧 policy 生成的 trajectory 怎么进入当前 policy 的 loss?batch=16, samples=16, staleness=3, workers=64 合起来到底是多少条 rollout?

代码核查截止 2026-09-03,固定到 ApexAgents-SkyRL-Recipe 8e7702f、Archipelago da7cfef 与本文本地核查的 SkyRL checkout。训练任务、world image 和 rubric 没有公开,因此机制与配置可以核查,headline 训练结果还不能独立复现。

Oak Lab:从经验学习到实时智能的技术路线

Oak Lab 最近的一篇文章,标题是 Learning from experience instead of curated datasets。它表面上在比较 SGD 与 NetworkIDBD,实际上是在提出一个更大的研究议程:如果智能体面对的是未经筛选、持续到来的真实经验,学习算法本身必须知道哪些误差值得学习,哪些误差只是噪声。

这与“把更多数据喂给更大的 Transformer”是不同的问题。Oak Lab 的公开使命是让智能体在“大世界”(big worlds)中实现目标:环境持续变化、观测不完整、资源有限,系统不能把所有知识都同时精确地存下来。围绕这个目标,他们把研究集中到 OaK Architecture、batch-size-one 在线学习、事件驱动神经网络和面向规划的时间抽象上。

本文信息截止 2026-09-02。Oak Lab 尚未公开 OaK 的完整实现、训练数据配方或端到端能耗测量,因此文中会明确区分来源结论与综合判断。