-
Notifications
You must be signed in to change notification settings - Fork 87
Description
讨论总结
1. 核心问题
如何在保留 System1 (S1) 功能的前提下,对 System2 (S2) 进行独立的后训练或微调,以适配特定数据集,并最终实现 S2 与原始 S1 的联合部署。
2. 关键技术点
-
联合训练后的 DualVLN 模型组件的分离性
System1 (NV): 在 DualVLN 模型中,S1 经过联合训练后,其权重与 S2 高度耦合,无法直接独立使用。
System2 (VLM): 可以从 DualVLN 模型中分离出来独立使用,但其效果无法得到保证,因为它在联合训练中可能已经适应了特定的输出模式(如生成 latent feature 和 pixel goal)。 -
微调策略建议
若沿用官方预训练的 S1: 仅微调 S2 是不足的,S1 在推理时未见过由一个新微调过的 S2 所产生的 latent feature,这会导致导航性能显著下降。
3. 推荐的 S2 微调路径:
- 获取初始权重: 从 InternVLA-N1-DualVLN 检查点中提取 S2 部分的纯净 VLM 权重(例如,基于 QwenVL 的部分)
- 后训练: 基于上述纯净权重,使用开发者自己的数据集进行训练。
实现方法: 可以参考 train_dualvln 脚本的逻辑,但在训练过程中冻结 S1 参数,仅更新 S2,可选择采用 PEFT(如 LoRA)等低侵入性的微调范式以减小对原始权重的破坏。
4. 长期优化方向
联合微调: 当算力资源充足时,最理想的方法是对 S1 和 S2 进行端到端的联合微调,这样可以确保两个系统之间的表征空间(尤其是 S2 输出给 S1 的 latent)保持一致性和最优性,避免因 S2 单独微调而导致的潜在向量空间漂移问题。
具体问答内容
【我】您好,请问一下我使用 InternVLA-N1-DualVLN 和 InternVLA-N1-w-NavDP 是否能只微调 System2, 还是我应该微调 InternVLA-N1-System2 ,在部署时将 InternVLA-N1-System2 + NavDP 推理呢?我打算在 System2 (VLM)上进行后训练,再双系统部署到实机和仿真中,目前不考虑在双系统上进行微调,但是我发现双系统联合微调后的模型可能是无法拆分 System1 和 System 2 的,所以来询问一下
【作者回复】在代码中单独分离开来s2系统也是能用的,但是效果不保证。我们在比较早期的时候试过直接用pixel goal来转到3d waypoint来做导航。
cotrain后s2输出会是latent和pixel goal,latent feature作为下游navdp的输入。
所以双系统的release的模型中,s1是不能直接用的,s2可以试一下直接用
【我】我们这边不是想要单独使用,是希望能在贵团队优秀的结果上进一步研究,当前目标是只训练后 System2,并用 System2(我们的后训练) + System1进行测试,所以想请问用什么样模型版本去训练 System2 并测试是最合适的
【作者回复】假如你用我们的s1的话,那么只调s2是不够的。因为s1接的latent变了的话,他没见过这种latent大概率走不好
【作者回复】假如你打算自己train s2,建议可以把dualvln的s2干净的qwenvl权重给分离开来,基于这个权重基于用你们的数据train
【我】非常感谢您的回复,这部分我可以理解为,相当于在 dualvln checkpoinit 上仿照 train dualvln script 训练 system1 的方式,但更变为冻结 system1,尝试用PEFT(如LoRA等)或其他破坏性小的微调范式来训练 system2 ?如果后面有更多的算力,最好尝试 dual system 联合训练(为了尽可能避免 system2 生成 latent 向量空间偏移)
【作者回复】是的