1. 从近300篇工作调研里翻出来的WAM训练门道
WAM这个词,放在不同圈子里指的东西完全不一样。做机器人控制的会想到World Action Model,做音频的会想到Waveform Audio Model,做自动驾驶的会想到World-Aware Model。但不管哪个方向,只要名字里带“World”或者“Action”,本质上都在干同一件事:让模型学会在一个有结构的世界里做预测和决策。我前后翻了将近300篇工作调研,从预训练到后训练,从数据配比到损失函数设计,踩过的坑和捡到的宝都攒了不少。这篇就把WAM模型训练策略里最核心的三块——数据、预训练、后训练——拆开揉碎讲清楚。
如果你正在训一个带世界模型性质的网络,或者你手头有一个中等规模的任务想用预训练+微调的范式来解,那这篇内容基本可以当操作手册用。我不打算堆公式,而是把每一步“为什么这么选”讲透,让你看完能直接对着自己的项目改配置。
2. WAM模型训练的整体设计思路
2.1 为什么WAM的训练策略和普通模型不一样
普通监督学习模型的训练逻辑很直白:给输入、给标签、算loss、反向传播。但WAM类模型的核心在于它要同时建模“状态”和“动作”之间的关系,甚至要预测未来若干步的状态演化。这就导致它的训练目标天然是多任务的:既有重建损失,又有预测损失,还可能有一致性约束。
我调研的这批工作里,超过七成采用了“预训练打底+后训练对齐”的两阶段范式。原因很简单:WAM需要大量无标注或弱标注的数据来学习世界的动态规律,这部分用自监督预训练最划算;而真正决定下游任务表现的,是后训练阶段怎么把预训练学到的表征对齐到具体任务上。
注意:不要一上来就端到端训WAM。我试过在小数据集上直接从头训,loss震荡得根本压不住,最后收敛到一个毫无泛化能力的解。预训练阶段哪怕只用少量数据做自监督,也能给后训练提供一个稳定得多的初始化。
2.2 三阶段拆解:数据准备、预训练、后训练
把整个训练流程拆成三块来看会更清晰:
- 数据准备阶段:核心是确定数据来源、做质量过滤、设计采样策略。WAM对数据的时间连续性和状态覆盖度要求很高,不是随便堆数据就行。
- 预训练阶段:用自监督目标让模型学会表征。常见的目标包括掩码重建、对比学习、下一状态预测。
- 后训练阶段:用任务相关的监督信号做微调,可能还涉及强化学习式的对齐。
这三个阶段的配比和顺序,直接决定了最终模型的上限。我见过太多人把精力全花在调网络结构上,结果数据配比一塌糊涂,最后效果还不如一个结构简单但数据干净的baseline。
2.3 方案选型背后的取舍逻辑
为什么是“预训练+后训练”而不是“联合训练”?因为联合训练对数据的要求太苛刻了——你需要同时有大量无标注数据和高质量标注数据,而且两者的分布要足够接近。现实中很难满足。分阶段训练的好处是每个阶段可以独立调优,预训练阶段可以用海量弱数据,后训练阶段再聚焦到小规模高质量数据上。
另一个关键取舍是:预训练用多大的模型?我的经验是,预训练阶段的模型容量可以比后训练阶段大20%到50%。因为预训练学的是通用表征,容量大一点能装下更多模式;后训练阶段反而要适当压缩,避免过拟合到小规模任务数据上。
3. 数据策略:WAM训练的命根子
3.1 数据来源与采集的实操要点
WAM的训练数据通常来自三类源:仿真环境生成的数据、真实传感器采集的数据、以及公开数据集。这三类的配比很讲究。我调研的工作里,效果最好的几个方案基本遵循“仿真为主、真实为辅、公开数据做补充”的原则。
仿真数据的优势是标注精确、覆盖度高,但存在sim-to-real gap。真实数据能弥补这个gap,但标注成本高、噪声大。公开数据集则用来增加多样性。具体配比上,我见过一个比较稳的方案是:仿真数据占60%,真实数据占30%,公开数据占10%。当然这不是铁律,要根据你的任务和传感器类型调整。
采集环节有几个容易忽略的点:
- 时间同步:多传感器数据必须做硬同步,不能靠软件时间戳对齐。我踩过这个坑,不同步的数据训出来的模型在预测未来状态时会有系统性偏差。
- 采样频率:不要盲目追求高频。WAM关心的是状态演化的规律,过高的采样频率只会引入冗余噪声。一般任务下,10Hz到30Hz足够了。
- 异常值处理:传感器跳变、丢帧、重复帧必须在采集阶段就标记出来,不要留到训练时再处理。
3.2 数据清洗与质量过滤的硬标准
数据清洗这块,我总结了一个“三层过滤”的流程:
第一层是物理合理性过滤。比如关节角度超出机械限位、速度超过物理极限、传感器读数在量程外,这些直接丢掉。第二层是统计过滤。计算每个维度的均值和方差,把超过3倍标准差的样本标记为异常。第三层是时序一致性过滤。检查相邻帧之间的变化率,突变超过阈值的片段要么修正要么丢弃。
提示:清洗日志一定要保留。我习惯把每一步过滤掉的样本数和原因记录下来,后面如果模型表现异常,可以回溯是不是清洗过度或不足。
质量过滤还有一个容易被忽视的维度:状态覆盖度。WAM需要看到足够多样的状态组合才能学到鲁棒的表征。如果数据集中某些状态区域几乎没有样本,模型在这些区域的表现会急剧下降。我的做法是对状态空间做网格划分,统计每个网格的样本数,对稀疏区域做针对性补充采集或数据增强。
3.3 数据配比与采样策略的调参经验
数据配比不是拍脑袋定的。我通常分两步走:先做小规模消融实验,固定其他条件,只改变某一类数据的比例,看验证集指标的变化趋势;然后再做精细调参。
采样策略上,有几个实用技巧:
- 优先采样高损失样本:在预训练后期,对loss较高的样本提高采样权重,能让模型聚焦在还没学好的区域。
- 课程学习:先采样简单样本(状态变化平缓的片段),再逐步加入复杂样本。这个策略在WAM上效果很明显,收敛速度能快30%左右。
- 避免类别不平衡:如果某些动作或状态出现频率远高于其他,要么做重采样,要么在loss里加权重。
下面这张表是我在多个项目中总结的数据配比参考:
| 数据类别 | 推荐占比 | 主要作用 | 风险 |
|---|---|---|---|
| 仿真数据 | 50%-70% | 提供精确标注和广泛覆盖 | sim-to-real gap |
| 真实数据 | 20%-40% | 弥补分布差异 | 噪声大、标注贵 |
| 公开数据 | 5%-15% | 增加多样性 | 分布可能不匹配 |
| 增强数据 | 0%-10% | 补充稀疏区域 | 可能引入伪影 |
4. 预训练阶段:让模型学会世界的规律
4.1 自监督目标的设计与选择
WAM预训练的核心是设计一个好的自监督目标。我调研的工作里,最常用的三类目标是:
掩码重建:随机遮挡输入的一部分,让模型预测被遮挡的内容。这个目标简单有效,但有个问题——如果遮挡比例太高,任务太难,模型学不到有用表征;太低又太简单。我的经验是遮挡比例在15%到30%之间比较合适,具体看数据维度。
下一状态预测:给定当前状态和动作,预测下一时刻的状态。这个目标和WAM的本质最契合,但需要数据里有动作标签。如果动作标签缺失,可以用逆动力学模型先估计动作,再拿估计的动作做预测。
对比学习:拉近正样本对的距离,推远负样本对。正样本对可以是同一序列的不同增强视图,负样本对是不同序列的片段。对比学习的好处是不需要精确的标注,但对数据增强的设计很敏感。
实际训练中,我通常把这三个目标加权组合。权重怎么定?先各设1.0跑一轮,看哪个loss下降最快,适当降低它的权重,让模型在难学的目标上多花力气。
4.2 预训练数据量的边际效应
预训练数据是不是越多越好?不完全是。我做过一组对比实验,数据量从10万帧增加到100万帧,验证集指标确实在涨,但涨幅在50万帧之后明显放缓。到200万帧时,指标基本饱和,再增加数据只会拉长训练时间。
边际效应出现的拐点,和模型容量、任务复杂度都有关系。模型越大,拐点越靠后。我的建议是:先用小数据量快速迭代,确定模型结构和超参大致合理后,再逐步增加数据量,观察指标变化,找到性价比最高的数据规模。
注意:预训练阶段的数据量不是唯一变量。数据质量、多样性、覆盖度同样重要。我见过用50万帧高质量数据训出来的模型,效果超过用200万帧低质量数据训的。
4.3 预训练中的稳定性技巧
WAM预训练最容易出的问题是loss震荡和梯度爆炸。我常用的几个稳定技巧:
- 梯度裁剪:把梯度范数限制在1.0到5.0之间。WAM的时序依赖长,梯度容易累积,裁剪是必须的。
- 学习率预热:前5%到10%的步数用线性预热,从很小的学习率逐步升到目标值。这能避免训练初期的不稳定。
- EMA权重:维护一份指数移动平均的模型权重,评估和推理时用EMA权重而不是原始权重。这个技巧在WAM上效果很好,能平滑掉训练后期的波动。
- 损失缩放:如果用了混合精度训练,损失缩放是必须的。我一般从2的16次方开始,根据是否出现inf动态调整。
还有一个容易被忽视的点:预训练阶段的batch size不要太小。WAM的时序依赖需要足够的样本才能估计出稳定的梯度。我的经验是batch size至少256,能到1024更好。如果显存不够,用梯度累积来等效大batch。
5. 后训练阶段:把通用表征对齐到具体任务
5.1 后训练的数据准备与任务定义
后训练阶段的数据和预训练阶段有本质区别:预训练可以用无标注数据,后训练必须有任务相关的监督信号。这个监督信号可以是动作标签、奖励信号、或者人类偏好标注。
任务定义要尽可能明确。我见过一些项目,后训练阶段的任务定义模糊,模型不知道到底要优化什么,最后学出一个四不像。好的任务定义应该包含:输入是什么、输出是什么、评价指标是什么、约束条件是什么。
后训练数据的规模通常比预训练小一到两个数量级。这时候数据质量比数量重要得多。我一般会花大量时间在后训练数据的清洗和标注校验上,确保每一条数据都是高质量的。
5.2 微调策略:全量微调还是部分微调
后训练阶段,全量微调还是只调部分层?这取决于你的任务数据和预训练数据的分布差异。
如果任务数据和预训练数据分布接近,只调最后几层就够了,甚至只调一个任务头。这样能保留预训练学到的通用表征,避免灾难性遗忘。如果分布差异大,就需要全量微调,甚至解冻所有层用较小的学习率重新训练。
我的经验法则是:先试只调任务头,如果验证集指标不达标,再逐步解冻更多层。每次解冻后学习率降一个数量级。这样能找到一个性价比最高的微调深度。
提示:后训练阶段的学习率通常比预训练阶段低一个数量级。预训练用1e-4,后训练就从1e-5开始试。太高会破坏预训练学到的表征。
5.3 后训练中的正则化与防过拟合
后训练数据少,过拟合是最大的风险。我常用的正则化手段:
- 早停:监控验证集loss,连续N个epoch不下降就停。N一般取5到10。
- 权重衰减:L2正则的系数比预训练阶段大一些,1e-4到1e-3之间。
- Dropout:在后训练阶段适当提高dropout率,比如从0.1提到0.2或0.3。
- 数据增强:对后训练数据做适度增强,比如加噪声、时间抖动、随机裁剪。但要注意增强不能改变任务的语义。
还有一个技巧是冻结预训练模型的部分层,只训练后面的层。这样可训练参数少了,过拟合风险自然降低。具体冻结多少层,可以看验证集表现来调。
6. 常见问题与排查技巧实录
6.1 训练不收敛或loss震荡
这是最常见的问题。排查顺序我一般是:
- 检查数据有没有问题。把batch里的样本可视化出来看,有没有异常值、标签错位、时间戳乱序。
- 检查学习率是不是太大。把学习率降10倍再跑几百步,看loss是否稳定下降。
- 检查梯度。打印梯度范数,如果经常超过阈值,说明需要更强的梯度裁剪或更小的学习率。
- 检查损失函数。多任务loss的权重是不是合理,有没有某个loss主导了总loss。
下面这张表是我整理的常见问题速查:
| 现象 | 可能原因 | 排查方法 | 解决方向 |
|---|---|---|---|
| loss不下降 | 学习率太小、数据有问题 | 检查数据质量、调大学习率 | 清洗数据、调参 |
| loss震荡 | 学习率太大、batch太小 | 打印梯度范数 | 降学习率、增大batch |
| 验证集loss上升 | 过拟合 | 对比训练和验证曲线 | 加正则、早停 |
| 预测偏差大 | 数据分布不匹配 | 检查训练和测试分布 | 补充数据、域适应 |
| 推理速度慢 | 模型太大、未优化 | profile各层耗时 | 剪枝、量化 |
6.2 预训练学到的表征在下游任务上表现差
这个问题通常有两个原因:一是预训练目标和下游任务不匹配,二是预训练数据覆盖度不够。
如果是目标不匹配,可以调整预训练loss的权重,让和下游任务更相关的目标占更大比重。如果是覆盖度不够,需要补充采集下游任务涉及的状态区域的数据。
还有一个可能的原因是预训练模型太大,后训练数据太少,导致微调不充分。这时候可以试试用更小的预训练模型,或者在后训练阶段用更强的正则化。
6.3 后训练阶段灾难性遗忘
灾难性遗忘是指后训练之后,模型在预训练任务上的表现大幅下降。这在WAM上很常见,因为后训练数据分布往往和预训练数据差异较大。
缓解方法有几个:一是用更小的学习率做后训练;二是冻结预训练模型的大部分层;三是在后训练loss里加一个预训练任务的辅助loss,让模型不要忘记预训练学到的东西;四是做模型集成,把预训练模型和后训练模型的输出做加权平均。
我个人的经验是,冻结底层+小学习率+辅助loss这三招组合起来,基本能解决大部分灾难性遗忘问题。
7. 一些实操中的个人体会
WAM的训练策略没有银弹。我调研的这近300篇工作里,效果好的方案各有各的巧思,但共同点是:数据质量过硬、预训练目标设计合理、后训练阶段没有过度拟合。反过来,效果差的方案往往在某个环节偷了懒——要么数据没洗干净,要么预训练目标选错了,要么后训练学习率没调好。
如果让我给一个最实用的建议,那就是:把70%的精力花在数据上。我见过太多人花几周时间调网络结构,最后发现换个数据清洗流程就能涨好几个点。WAM这类模型对数据的敏感度远高于对结构的敏感度。
另外,预训练阶段不要追求一步到位。先用小数据、小模型快速跑通流程,确认每个环节都没问题,再逐步放大。我自己的习惯是先用1%的数据跑一个完整的预训练+后训练流程,看看端到端能不能work,然后再逐步加数据、加模型容量。这样能最快定位问题,避免在错误的方向上浪费算力。
最后分享一个小技巧:在后训练阶段,把预训练模型的输出作为特征,训练一个简单的线性分类器或回归器,先看看预训练表征的线性可分性。如果线性探针的效果就不错,说明预训练质量高,后训练只需要轻量微调;如果线性探针效果很差,说明预训练表征可能没学到有用的东西,需要回头检查预训练阶段。这个技巧帮我省了很多盲目调参的时间。