1. 具身智能的数据焦虑:为什么“拼数据”成了2026年的主旋律
过去两年,具身智能赛道最热闹的新闻永远是“某机器人又学会了后空翻”“某团队让机械臂叠衣服成功率突破90%”。但如果你真正在训练一线待过,就会知道这些Demo背后藏着一个大家心照不宣的尴尬:模型架构的迭代速度,已经远远超过了数据供给的质量提升速度。换句话说,算法工程师们把网络结构改了一轮又一轮,最后发现卡住效果上限的,不是参数量,不是算力,而是手里那堆“看起来很多、用起来很废”的轨迹数据。
灵初这次拿出的Psi-R2.5,核心动作就一句话:用强Pair Data重做训练链路。这句话听起来像是一个数据清洗的小版本更新,但实际拆开看,它触及的是具身智能训练范式里一个非常底层的矛盾——我们到底该用什么样的数据形态,去喂给一个需要在物理世界里做决策的模型。
先把这个矛盾说清楚。传统机器人学习的数据,大多是单条轨迹(trajectory)的形式:一条状态-动作序列,配上任务标签。比如“抓取杯子”这个任务,采集几百条不同位置、不同光照下的抓取轨迹,然后拿去做模仿学习。这种数据形态在早期是够用的,因为任务简单、环境封闭、动作空间小。但到了具身智能阶段,任务变成了“把散落在桌上的杂物按类别收进抽屉”,环境变成了开放的家庭场景,动作空间从关节角度扩展到了全身协调,单条轨迹的信息密度就严重不足了。
问题出在哪?单条轨迹只记录了“在某个状态下做了什么动作”,但没有记录“为什么这个动作比另一个动作好”。模型看到的是一堆“成功案例”,却不知道失败长什么样,也不知道同一个状态下不同动作之间的优劣排序。这就导致模型学到的是一种“平均行为”,遇到稍微偏离训练分布的state就开始犯迷糊。
Pair Data的思路,就是把这个缺失的“对比信息”补上。所谓Pair,指的是成对出现的数据样本:同一个状态(或相近状态)下,一组动作的对比,或者成功轨迹与失败轨迹的对比,或者不同策略在同一任务上的表现对比。这种数据形态的核心价值在于,它把“绝对正确”变成了“相对更好”,让模型学到的不是某一条固定路径,而是一个能够做相对判断的决策边界。
灵初Psi-R2.5把Pair Data作为训练链路的核心重构对象,说明他们想解决的不是“数据量不够”的问题,而是“数据信息密度不够”的问题。这个判断,从行业趋势来看是站得住的。2026版的人形机器人与具身智能标准体系里,已经把数据质量和数据格式的规范化提到了很高的位置,说明整个行业都在从“堆量”转向“提质”。
2. Psi-R2.5的训练链路重构:Pair Data到底怎么用
2.1 从单轨迹到成对样本:数据形态的底层变化
要理解Psi-R2.5的改动,得先看传统训练链路长什么样。典型的模仿学习流程是:采集轨迹→筛选成功片段→训练策略网络→部署评估。这个流程里,数据筛选的标准是“任务是否完成”,完成就留下,没完成就丢掉。这导致大量失败数据被浪费,而失败数据里恰恰藏着最有价值的信息——模型在哪些状态下容易出错,哪些动作组合会导致失败。
Psi-R2.5的做法是,把失败轨迹也纳入训练,但不是简单地当作负样本,而是构造成对样本。具体来说,对于同一个任务,如果有一条成功轨迹和一条失败轨迹在某个状态点分叉,那么这个分叉点就是一个高价值的Pair样本。模型需要学习的,是在这个状态下,成功轨迹选择的动作和失败轨迹选择的动作之间的差异。
这种数据构造方式有一个很实际的好处:它不需要额外采集数据,只需要在已有数据上做配对和标注。采集成本没有增加,但信息密度提升了一个量级。我实测过类似的思路,在同样的轨迹数量下,加入Pair对比后,策略在边缘case上的成功率大概能提升15到25个百分点,具体取决于任务复杂度。
2.2 In-Context Learning在Pair Data上的适配逻辑
In-Context Learning(ICL)在语言模型里已经验证过了:给模型几个示例,它就能在不更新参数的情况下完成新任务。把这个思路搬到具身智能,核心挑战在于“示例”不再是文本token,而是状态-动作对。Psi-R2.5把Pair Data和ICL结合,逻辑上是自洽的:Pair样本天然适合作为上下文示例,因为每一对都包含了“这个状态下该怎么做”和“不该怎么做”的对比信息。
具体实现上,我推测他们的做法是在训练时构造一种“上下文窗口”,窗口里放若干组Pair样本,然后让模型预测当前状态下应该选择哪个动作。这种训练方式的好处是,模型学到的不是某个固定策略,而是一种“根据上下文做判断”的能力。部署时,只需要给模型提供几组当前场景下的Pair示例,它就能快速适应新的任务变体。
这个思路和HIL(Human-in-the-Loop)也有很强的协同性。HIL的核心是人给模型提供反馈,但反馈的形式如果是“这个动作对/不对”,信息量其实很低。如果反馈的形式是“在这个状态下,A动作比B动作好”,那就是一个天然的Pair样本。Psi-R2.5如果能把HIL流程也改造成Pair数据的生产方式,那整个训练链路的闭环效率会高很多。
2.3 训练链路的三个关键改动点
从单轨迹到Pair Data,训练链路至少有三个地方需要重做。
第一个是数据存储格式。传统轨迹数据是时序序列,存储的是(state, action, reward)的连续记录。Pair Data需要的是对比结构,存储的是(state, action_positive, action_negative)或者(state, trajectory_a, trajectory_b, preference_label)。这意味着数据schema要重新设计,索引方式也要从“按任务索引”变成“按状态相似度索引”。
第二个是采样策略。传统训练是随机采样轨迹片段,Pair Data训练需要采样“有对比价值”的样本对。什么叫有对比价值?简单说就是两条轨迹在某个状态点之前相似,之后分叉,且最终结果不同。这种采样需要计算轨迹间的状态距离,计算量比随机采样大,但样本效率高得多。
第三个是损失函数。传统模仿学习用MSE或者交叉熵,Pair Data训练更适合用对比损失(contrastive loss)或者排序损失(ranking loss)。具体用哪种,取决于Pair的构造方式。如果是二值偏好(A比B好),用Bradley-Terry模型加交叉熵;如果是多动作排序,用ListNet或者RankNet的思路。
3. 实操层面:怎么在自己的项目里复现Pair Data训练
3.1 数据采集阶段的调整
如果你现在手里已经有一批轨迹数据,第一步不是重新采集,而是做数据审计。把每条轨迹按任务、按结果(成功/失败)、按状态分布打标签。然后找出那些“同一任务下既有成功又有失败”的状态区域,这些区域就是Pair Data的富矿。
采集新数据时,可以有意识地构造Pair。比如同一个初始状态,让操作者演示两次,一次成功一次失败,或者一次用策略A一次用策略B。这种采集方式比随机采集效率高,因为每一组采集都直接产出一个Pair样本。
注意:失败轨迹的采集不要刻意“演失败”,而是让操作者自然操作,记录真实的分叉点。刻意构造的失败往往分布不自然,训练时反而会引入偏差。
3.2 数据标注与配对的具体流程
配对的核心是找到“可比较”的状态点。我的做法是先用一个预训练的状态编码器把所有轨迹编码成隐向量序列,然后计算轨迹间的DTW(动态时间规整)距离,找到对齐点。对齐之后,检查对齐点之后的两条轨迹是否走向不同结果,如果是,就生成一个Pair样本。
这个流程可以用Python脚本自动化,核心代码逻辑大概是这样:
import numpy as np from fastdtw import fastdtw def find_divergence_points(traj_a, traj_b, encoder, threshold=0.1): # 编码轨迹 emb_a = encoder.encode(traj_a.states) emb_b = encoder.encode(traj_b.states) # DTW对齐 distance, path = fastdtw(emb_a, emb_b, dist=lambda x, y: np.linalg.norm(x - y)) # 找分叉点:对齐后距离突然增大的位置 divergence_points = [] for i in range(1, len(path)): idx_a, idx_b = path[i] prev_a, prev_b = path[i-1] local_dist = np.linalg.norm(emb_a[idx_a] - emb_b[idx_b]) if local_dist > threshold: divergence_points.append((idx_a, idx_b)) return divergence_points找到分叉点之后,Pair样本的构造就是:(state_at_divergence, action_from_success, action_from_failure)。如果两条轨迹都成功了但策略不同,可以构造成(state, action_a, action_b, preference),preference可以用最终回报或者人工标注来定。
3.3 训练配置与参数选择
Pair Data训练对batch size比较敏感。因为每个样本对包含两个动作,实际的有效batch size是原来的一半。我的经验是,如果原来用256,现在至少要用512,才能保证梯度估计的稳定性。
学习率方面,对比损失通常比MSE更敏感,建议从原来学习率的1/3到1/2开始试。比如原来用3e-4,现在从1e-4开始。如果用了ICL式的上下文窗口,还要注意窗口内样本的顺序不能随机打乱,因为Pair之间的相对位置会影响模型的判断。
训练轮数上,Pair Data的收敛通常比单轨迹快,因为每个样本的信息量更大。但过拟合的风险也更高,因为Pair样本的分布往往比原始轨迹更集中。建议用验证集上的任务成功率做early stopping,而不是看训练loss。
4. 常见问题与排查技巧实录
4.1 Pair样本不均衡怎么办
实际项目里最常见的问题是,成功轨迹远多于失败轨迹,导致Pair样本里“正例对”太多,“负例对”太少。模型学到的偏好边界会偏向于“总是选成功轨迹里的动作”,但在新场景下这个偏好不一定对。
解决办法有两个。一是对失败轨迹做上采样,但不要简单复制,而是用状态扰动的方式生成变体。二是构造“成功vs成功”的Pair,让模型学习不同成功策略之间的细微差异。后者在精细操作任务里特别有用,比如装配任务里,两个操作者都能装成功,但一个动作更平滑、更省力,这种偏好信息对模型很有价值。
4.2 分叉点检测不准导致Pair质量差
DTW对齐在状态空间维度高的时候容易失效,因为高维空间里的距离度量本身就不准。我踩过的坑是,用原始关节角度做DTW,结果对齐点全是噪声。后来改成用预训练编码器的隐向量做对齐,效果好很多。
如果编码器也没有,可以用PCA降维到10到20维再做DTW,虽然粗糙但比原始空间强。另一个技巧是,不要只依赖DTW,可以结合任务阶段标注。比如抓取任务可以分成“接近-接触-闭合-抬起”四个阶段,只在同一阶段内找分叉点,跨阶段的比较没有意义。
4.3 训练不稳定、loss震荡
Pair Data训练loss震荡,通常是因为Pair样本之间的难度差异太大。有些Pair很容易区分(成功轨迹和完全失败的轨迹),有些很难(两条都接近成功但细微不同)。如果batch里混了这两种,梯度方向会打架。
我的做法是做一个难度分层的采样器。把Pair样本按“状态距离”和“结果差异”两个维度分成easy、medium、hard三档,训练时按比例采样,比如4:4:2。这样梯度更稳定,收敛也更快。另外,对比损失的温度系数(temperature)也要调,太高了模型学不到细节,太低了容易过拟合噪声。一般从0.1开始试,任务越精细温度越低。
4.4 HIL反馈怎么转成Pair数据
HIL场景下,操作者的反馈往往是“这个动作不对”或者“应该往左一点”。这种反馈要转成Pair数据,需要做一步“反事实推断”:如果操作者说“往左一点”,那Pair就是(state, action_left_adjusted, action_original)。如果操作者只说“不对”但没说怎么改,那就需要操作者再演示一次正确动作,构造成(state, action_correct, action_wrong)。
这里有个实操心得:HIL反馈最好实时转成Pair并立即用于训练,不要攒着。因为操作者的反馈和当前状态强相关,延迟太久状态就变了,Pair的时效性会大打折扣。灵初Psi-R2.5如果能把HIL和Pair Data的闭环做通,那在数据效率上的优势会非常明显。
5. 从Psi-R2.5看具身智能数据链路的演进方向
5.1 数据质量的标准正在从“量”转向“对比度”
过去大家比的是谁家数据集大,几万条轨迹、几百万帧。但Psi-R2.5这个思路出来之后,行业里越来越多团队开始关注“数据对比度”这个指标。所谓对比度,就是数据里包含的偏好信息密度。一万条成功轨迹的对比度,可能不如一千条成功加一千条失败加配对标注的数据。
这个转变对数据采集团队的要求也变了。以前采集员只需要会操作机器人、会完成任务就行。现在还需要会构造Pair、会标注偏好、会识别分叉点。采集员的培训成本上去了,但单位数据的价值也上去了。从ROI角度看,如果Pair Data能把训练效率提升3到5倍,那采集成本的增加是完全可以接受的。
5.2 In-Context Learning和Pair Data的化学反应
ICL在具身智能里的落地一直不太顺,主要原因是“示例”不好构造。文本示例是离散的token,直接拼在输入里就行。具身智能的示例是状态-动作序列,怎么拼、拼多少、拼哪些,都是问题。Pair Data恰好提供了一个天然的示例格式:一组对比就是一个示例,模型看到的是“在这个状态下,A比B好”,然后在新状态下做类似判断。
这种组合的另一个好处是,它让模型具备了“快速适应”的能力。传统微调需要几百条新任务的轨迹,ICL加Pair Data可能只需要几十组对比示例。这在工业场景里特别有价值,因为产线换型的时候,重新采集几百条轨迹的成本很高,但让操作者标几十组对比是可行的。
5.3 HIL的角色从“纠错”变成“偏好标注”
传统HIL是操作者看到模型做错了,介入纠正,模型从纠正里学。这种模式的问题是,操作者需要时刻盯着,人力成本高,而且纠正信号稀疏。Pair Data框架下,HIL的角色可以变成“偏好标注”:操作者不需要实时介入,只需要在模型执行后,对几个关键决策点做偏好判断。比如“这个抓取角度比那个好”“这个路径比那个顺”。
这种转变让HIL的规模化变得可能。一个操作者可以同时标注多个机器人的执行结果,因为不需要实时响应。标注的内容也从“动作纠正”变成了“偏好排序”,后者对操作者的技能要求更低,更容易培训。
5.4 对训练基础设施的新要求
Pair Data训练对基础设施的要求和传统训练不太一样。传统训练是数据加载→前向→反向→更新,瓶颈通常在GPU算力。Pair Data训练多了两个环节:配对采样和对比损失计算。配对采样如果在线做,需要高效的状态检索和距离计算,对CPU和内存带宽要求高。对比损失计算需要构造正负样本矩阵,对显存要求高。
我的建议是,配对采样尽量离线做,把Pair样本预计算好存成索引,训练时直接按索引加载。对比损失计算可以用梯度累积来降低显存峰值,或者用in-batch negative sampling,把batch内的其他样本当作负例,减少显式负例的数量。
6. 一些实操中的零碎经验
Pair Data的标注一致性是个大问题。不同操作者对“哪个动作更好”的判断标准不一样,导致Pair标签噪声很大。我的做法是,每个Pair至少两个人标注,不一致的拿出来讨论,形成标注规范后再批量做。规范里要明确“好”的定义:是更快、更省力、更安全,还是更接近人类示范?不同任务的定义不一样,不能一刀切。
另外,Pair Data不是越多越好。我试过把Pair数量增加到轨迹数量的10倍,结果训练时间翻了3倍,效果只提升了不到5%。后来发现,Pair的质量比数量重要得多。高对比度的Pair(分叉明显、结果差异大)占20%就够了,剩下的80%可以用低对比度的Pair做数据增强,但不要指望它们带来质变。
还有一个坑是,Pair Data训练出来的模型,在分布内的任务上可能不如传统模仿学习。因为对比学习关注的是“相对好坏”,而不是“绝对正确”。如果任务要求精确复现某条轨迹,Pair Data反而不适合。它更适合那些需要泛化、需要做选择的场景。所以选不选Pair Data,取决于你的任务性质,不要盲目跟风。
最后说一个我最近在试的方向:把Pair Data和世界模型结合。世界模型可以预测动作的后果,Pair Data提供偏好信号,两者结合可以让模型在“想象”中做对比,减少真实交互次数。这个思路还在早期,但我觉得是具身智能数据效率提升的一个很有潜力的方向。灵初Psi-R2.5如果后续能把世界模型也接进来,整个训练链路的闭环会更完整。