ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

VLA骨干拆解:视觉编码器、语言基座与融合设计的工程实践

VLA骨干拆解:视觉编码器、语言基座与融合设计的工程实践 1. 为什么这时候要写VLA骨干拆解1.1 从一个真实的暴力但不过分的架构项目说起去年年初我接手了一个机器人操作项目需求一句话让机械臂看摄像头听懂人话然后自己把杯子拿起来放到盘子里。听起来简单但当我真去翻VLAVision-Language-Action Model的公开方案时发现一个尴尬的事实大多数论文代码库把骨干和策略打包在一起你想单独替换视觉编码器或者调整语言模型规模得把整个训练管线改一遍。更麻烦的是很多项目把骨干设计说得云山雾罩仿佛全靠玄学参数。我自己跑了三个多月的实验从RT-2那套大一统思路到Octo的模块化风格再到OpenVLA和π0pi-zero这种组合式预训练路线最后才逐步沉淀出一套比较稳的骨干设计方法论。这篇文章就是想把这块骨架彻底拆开讲清楚每一层为什么这么选、每一步有什么坑。它适合三类人正在搭VLA训练管线的算法工程师、准备从纯语言模型/纯视觉模型切过来的研究者以及想把机械臂操作产品化的工程团队。1.2 骨干拆解在整个nextVLA系列里的位置我打算把nextVLA设计写成一个小系列后续还有动作策略篇、数据管线篇、部署优化篇。本文是第一篇只聚焦骨干也就是从视觉输入到语言模型输出隐状态这一段。至于动作头怎么从隐状态映射到关节角度、用什么损失函数约束、要不要用扩散模型那是下一篇的内容。但不代表本文完全不提动作头——恰恰相反骨干的设计决策比如是否冻结视觉塔、如何降采样视觉Token会直接决定动作头的选择空间所以我会在关键位置预留接口说明。1.3 VLA骨干到底包含哪些部件我习惯把VLA骨干画成一条流水线视觉编码器Vision Encoder吃图像输出视觉Token语言基座LLM Backbone吃文本指令加视觉Token输出高层特征动作头Action Head从高层特征映射到动作空间。骨干的核心是前三段动作头从严格意义上算策略范畴但架构设计时必须有它的位置。很多论文把VLA描述成端到端大模型听起来像是一个黑盒。实际上工程实现里这几段的边界非常清晰每一段都有自己的输入输出规范。我的基本观点是把骨干拆得越清楚后面换组件越容易。这就像搭乐高你先得知道每块积木的卡口尺寸才能在不同方案之间横跳。2. 骨干设计的技术选型先讲清楚几个底层决策2.1 从Sim-to-Real的痛点看VLA骨干的职责VLA骨干要解决的核心问题是让模型同时理解视觉场景自然语言指令和动作空间三者之间的关系。纯视觉模型懂场景但不懂指令纯语言模型懂指令但看不见真实世界传统强化学习策略懂动作但缺乏泛化语义。VLA把三者压缩到一个可端到端训练的架构里骨干就是那个公共表征层。在Sim-to-Real迁移时骨干的影响尤其明显。我用过不少仿真环境生成的数据做预训练再迁移到真实机械臂上。如果骨干里视觉Token压缩得太狠仿真环境的纹理细节和真实相机的光照差异会直接导致迁移失败如果语言基座太弱模型理解不了红色杯子的右边那个蓝色托盘这类带空间关系的指令。骨干设计的好坏决定了后续策略在真实环境里能发挥多少潜力。这里有一个被很多人忽略的点VLA骨干不是非得从零训练。视觉编码器可以加载SigLIP或DINOv2预训练权重语言模型可以加载开源LLM权重骨干阶段的核心工作其实是对齐——把不同模态的特征空间拉到一起。这个思路让我少走了很多弯路。2.2 整体网络骨架主干、头部、尾部怎么分在nextVLA里我把骨干的宏观结构用一句话串起来视觉进、语言控、动作出。拆开讲是三个段落视觉编码器Vision Encoder吃原始图像或视频帧把像素变成视觉Token序列这是骨干的入口膛。视觉-语言融合器Fusion Module把视觉Token和文本指令对齐。在骨干范畴内通常指Vision Tower之后的projector、交叉注意力层以及和语言模型各层交互的结构。这部分决定看和说能否对得上。语言模型基座LLM Backbone作为通用计算核心承载推理、规划、指令理解输出自回归的下一Token。在VLA里它不仅仅是对话还要引导动作生成。动作解码头Action Head从语言模型的高层特征映射到动作空间。这里我主要讨论它的输入输出接口和损失函数位置策略网络的具体MLP结构放到下一篇。需要强调的是动作头严格说不算骨干但做整机架构时必须预留它的位置。骨干的训练方式比如冻结视觉塔、降采样视觉Token、是否拼接动作Token直接决定动作头的设计空间。拆骨干其实是在为后面所有组件定接口合同。2.3 骨干方案对比与趋势观察过去一年我多次整理VLA方案对比每次做表格的感受都不太一样。这里放一张我在nextVLA系列里使用的骨干方案对比表精简版方案视觉编码器语言基座融合位置典型风格RT-2ViT-22BPaLM早期拼接tokens直接串联大一统、重复预训练OctoViTT5交叉注意力不冻结模块化、可组合OpenVLASigLIP/DINOv2Llama-2Projector对齐全参微调指令跟随强、社区友好π0pi-zeroSigLIP DINOv2PaliGemma预训练低秩微调任务泛化、动作VQ这个表不是为了拉踩而是想说明一个趋势现在的VLA骨干主流已经不是纯堆参数而是组合式预训练高效下采样对齐驱动。nextVLA的设计取向是视觉编码器以SigLIP为主效果与成本平衡可考虑双编码器模式语义几何做消融语言基座7B~8B量级的现代LLMGemma/Llama系足够再大收益边际递减、训练成本爆炸融合位置先做Token级串联后续追加交叉注意力做消融动作头暂时用连续动作回归为后续VQ或扩散动作预留接口。这个取向不是我拍脑袋定的而是踩过模型太大训不动、模型太小不听话两头坑之后的折中。下面每个模块我会逐一展开。3. 视觉编码器选型与输入预处理从像素到Token的第一公里3.1 为何优先SigLIP损失函数背后隐藏的稳定效应nextVLA的默认视觉编码器我选SigLIP补一个DINOv2做消融。原因值得展开。SigLIP和CLIP最核心的差别不是网络结构而是损失函数。CLIP用softmax形式做跨模态对比损失batch内有负样本损失值对batch size和负样本数量特别敏感训练动量不稳定SigLIP把训练目标改成了sigmoid形式的成对二分类损失每个图像-文本对独立计算不需要跨样本归一化。这个差异放在VLA里意义很大VLA的预训练阶段通常要在机器人数据上做对比对齐而机器人数据集天然存在长尾、重复帧、场景单调的特点。CLIP那种全局归一化会让重复场景主导损失SigLIP的逐对损失则更稳健。实际训练中我观察到同样数据、同样batchSigLIP的损失曲线明显比CLIP更平梯度范数波动更小。这意味着迁移到机器人操作视频做对齐时不容易被某一批干净数据带偏。这不是说CLIP不能用而是SigLIP在同等成本下稳定性更好。3.2 输入预处理分辨率、归一化、图像增强三处细节视觉输入这件小事恰恰是很多VLA复现翻车的地方。nextVLA的视觉输入预处理定为以下三个关键参数分辨率默认336x336即SigLIP原生训练分辨率token_pixel_size14ViT patch 14。如果做双编码器消融DINOv2的token_pixel_size也是14两者可以对齐。归一化必须使用SigLIP模型自带的mean/stdImageNet统计量。很多复现翻车是因为用了别的模型的归一化参数导致特征分布偏移下游微调很痛苦。数据增强机器人操作视频和静态图文任务不同需要轻微扰动。推荐随机裁剪随机裁剪中心区域短边缩放旋转幅度控制在5度以内不要用强颜色抖动因为机械臂姿态识别对颜色敏感度高于自然图像任务。这里分享一个踩过的坑一开始我按LLaVA的习惯给机器人数据加高斯模糊和随机遮挡增强结果关节角度预测误差直接上涨。后来反思VLA的视觉塔本质是场景理解目标定位弱结构正则即可过度增强反而破坏了机械臂末端与抓取点的空间一致性。3.3 视觉Token化策略整帧压缩还是分块压缩视觉Token怎么进入语言模型是骨干设计里最容易被低估的问题。视觉特征在ViT里是patch级特征336x336图像按14x14 patch切分一张图就是576个Token如果3个视角就是1728个Token。直接塞给7B语言模型序列长度会非常尴尬。我实测过三种做法感受如下直接拼接每视角576个Token信息保留最完整但微调时显存压力极大且语言模型面对超长视觉前缀容易注意力涣散收敛慢。单层降采样在视觉塔输出后加一层2x2卷积或MLP下采样把相邻patch融合比如576变144。信息损失可接受是成本和效果最平衡的选择。可学习汇聚用attention pooling把576个token聚到32或64个。适合全局信息为主、位置精度要求不高的任务但机器人操作很多任务需要像素级空间定位太激进的汇聚会丢位置。nextVLA默认走单层降采样方案每视角输出144个token3视角共432个token再与语言指令token拼接。这个序列长度对7B模型训练比较友好实测收敛速度和最终成功率平衡得最好。4. 语言基座的编排职责为什么不能只把它当聊天模型用4.1 语言模型在VLA骨干里到底承担什么很多人刚接触VLA会觉得语言模型只是读懂指令。事实上在nextVLA的骨干设计里语言模型承担了三层职责这决定了它的参数量选型和训练策略。指令解构层把把红色杯子放到蓝色托盘上拆解成目标谓词物体、容器、空间关系并映射到视觉特征上。这层能力来自LLM的文本预训练。推理规划层对多步任务做隐式规划比如先避开障碍物再调整抓手姿态。VLA骨干里不一定有显式规划器但LLM的注意力机制天然具备这种功能。实测中模型越大这类隐式推理能力越强。状态驱动层把当前观测和历史动作映射为下一动作的分布。这是VLA与纯LLM最本质的区别——语言模型要输出或引导动作。所以语言基座不是可选件而是VLA的大脑皮层。没有它视觉塔和动作头之间只能是端到端黑箱回归泛化能力会大打折扣。4.2 基座规模怎么定7B~8B的取舍逻辑nextVLA的语言基座定在7B~8B区间以Gemma系/Llama系为主。为什么不是2B也不是70B背后是三个维度的拉扯推理能力2B级模型在复杂指令理解上明显短板特别是多物体场景的长指令常常把主谓宾关系搞混。实测在VLA基准里7B比2B在成功率上高10到15个点边际收益非常显著。训练成本70B级模型一个VLA核心的全参微调成本是7B的10倍以上但成功率收益通常只有3到5个点。对中小团队来说不划算。部署友好度机器人产品化要跑到设备端或边缘端。7B量化后可以分布在单卡或双卡70B基本告别边缘部署。这个结论有一个前提如果预算充足、目标是通用机器人基座模型70B仍然是有意义的探索方向。只是对大部分VLA项目7B/8B是性价比最优解。4.3 冻结与微调的边界全参微调还是LoRA骨干里语言基座是全参微调还是LoRA这是VLA项目最常被问的问题之一。我的建议是分阶段看。视觉塔冻结时语言模型必须微调否则视觉Token的特征分布与文本Embedding分布无法对齐。语言模型冻结时可以训练Projector和动作头但任务混合性不足时成功率会打折扣。折中方案视觉塔冻结 语言基座LoRArank64这是目前社区最流行的做法OpenVLA、π0等也走类似路径。LoRA保留语言模型已有能力同时允许视觉-语言特征在低秩子空间对齐。nextVLA默认预训练阶段用LoRA进入任务特定微调阶段才考虑解冻部分层做全参微调通常只解冻后12层加动作头。这个策略能把训练成本降一个数量级同时保住90%以上的效果。5. 视觉-语言融合层的三种主流范式以及nextVLA的默认选择5.1 Token串联早期融合的适用场景与训练技巧最朴素的融合方式是把视觉Token和文本Token在序列维度上拼起来直接喂给语言模型。RT-2早期就是这个思路的典型代表。优点是实现简单、语言模型注意力可以全局交互缺点是视觉Token太多时计算量和注意力质量都会劣化。nextVLA把Token串联作为默认基线但做了两个优化视角独立降采样每个视角先降采样到144 token再拼接防止多视角序列爆炸指令前置文本指令Token放在视觉Token之前实测比视觉前置更容易收敛模型对指令的注意力权重更集中。训练技巧上Token串联方案最怕的是指令淹没。如果batch里部分样本只有图像没有指令比如纯示教数据模型会学着忽略文本。所以预处理必须保证每条数据都有强指令标注宁可合成指令也要避免无指令样本进batch。5.2 交叉注意力中期融合为什么适合多视角操作任务交叉注意力是另一类主流方案典型代表是Octo。做法是语言模型每一层都让文本Token做Query视觉Token做Key/Value来完成融合。好处是视觉Token不参与自回归生成序列长度大幅下降且视觉信息可以在每一层重复利用长程空间关系保留得更好。多视角操作任务里交叉注意力尤其有优势模型可以按当前视角是否与机械臂末端相关动态调整权重自然学会哪个相机视角现在更重要。但交叉注意力的代价是实现复杂度高——每个解码层都要维护独立的视觉KV Cache训练和推理都比Token串联重。nextVLA把交叉注意力列为进阶选项不出现在默认配置里留给多视角长程任务专项实验使用。5.3 Projector对齐从分别编码到统一表征的关键一步Projector投影器在VLA里的角色是把视觉特征空间翻译到语言特征空间。典型结构是两层MLP输入视觉Token输出与文本Embedding同维的特征向量。为什么不能用单层线性层因为视觉特征经过多层ViT后已经包含了大量空间局部性信息直接线性映射会造成空间信息丢失。两层MLP可以引入非线性把patch特征逐步映射到语言语义空间效果明显更好。实测线性Projector在简单抓取任务上和两层MLP差不多但在多物体复杂任务上两层MLP成功率高出12%。nextVLA的Projector配置为两层MLP输入视觉token维度 - 4096 - 语言模型隐层维度激活函数用GELU加LayerNorm。这个结构和很多图文大模型的Projector一致没有神秘之处关键是训练时Projector的学习率要比主干其他部分高3到5倍因为它在训练初期承担了主要的空间对齐工作。6. 骨干训练的核心挑战与调试经验6.1 多任务课程学习让模型先易后难VLA和纯LLM不同任务形式的多样性非常强。训练时如果把简单抓取、复杂长程操作、失败恢复全部混在一个batch里模型往往学成平均动作哪个任务都不精。nextVLA使用**课程学习任务丢弃Task Dropout**策略训练前20%步数只混入简单任务比如单物体抓取、明确目标位置20%到70%步数加入中等难度任务比如多物体选择、空间约束70%以后才加入长程任务、失败恢复、语言歧义指令。同时每轮batch采样时保留5%到10%概率完全丢弃某个任务类型防止模型过度依赖某一个任务的数据模式。这个技巧我在纯LLM训练里也常用搬到VLA后效果一样明显最终测试集成功率比无课程学习高8个点。6.2 损失函数设计连续动作回归的尺度陷阱VLA的损失函数比纯语言模型复杂因为动作预测是连续回归而语言是离散Token分类。最常见的做法是语言部分用交叉熵动作部分用L1或MSE。这里有一个非常大的坑动作值的尺度差异。关节角度、末端位置、夹爪开合度都是不同量纲。如果直接把6个关节的绝对误差加起来位置误差大的关节会主导梯度其他关节学不好。我的做法每个动作通道独立做标准化即zero mean加unit variance统计量在全局上提前计算损失函数用smooth L1而非L2防止异常值主导训练对夹爪这种离散动作开/合用二分类交叉熵单独计算。这个设计看起来简单但很多复现项目是因为没做动作归一化导致训练不收敛或收敛到一个很差的位置。动作归一化的统计量必须在训练集上提前算好不能在线动态算否则推理时没有对应统计量就乱了。6.3 收敛诊断三件套loss、梯度、动作分布骨干训练跑起来之后不要只看loss曲线。loss降到0.5不代表策略好用我每次都会看三个补充信号动作分布直方图如果模型学成了输出平均值动作分布会集中在均值附近看起来loss很低但策略完全不动。这种情况常见于动作空间训练不足或数据多样性不够。梯度范数backbone各层梯度范数的中位数和最大值如果下降过快说明某些层在死掉如果震荡剧烈说明学习率过大或任务混合不平衡。成功任务类型的分表每个任务单独看成功率而不是只看全局均值否则可能出现简单任务得分涨复杂任务全崩的假象。这三件套的判断逻辑跟我在纯LLM微调里看loss、检查困惑度的思路很像但机器人场景里动作分布比文本困惑度更直接反映策略质量。建议所有跑VLA训练的人都把这三个信号加到日志里。7. 骨干落地的工程化要点与训练资源估算7.1 数据格式化与缓存机器人数据进入训练管线前的必修课VLA训练数据和纯图文数据最不一样的地方是多模态多帧结构每个样本有文本指令 图像序列 动作序列。如果不在数据管线上做工程化训练效率会很惨。我的数据格式示例{ instruction: 把红色杯子放到蓝色托盘上, images: [obs_0.jpg, obs_1.jpg, obs_2.jpg], actions: [[0.1, -0.2, 0.3, 1.0, 0, 0], [0.2, 0.1, -0.1, 1.0, 1, 0]], action_norm: {mean: [...], std: [...]} }关键点每个样本必须包含独立的归一化统计量因为不同任务或不同示教来源的动作分布差异很大图片以webdataset格式存储为tar包用多进程读写避免单文件IO成为瓶颈做数据增强时图像重采样和动作时序必须保持同步否则模型学到错误映射。缓存这块我强烈建议用webdataset配合ffcv或tensorstore这类高性能数据格式不要用普通jpg文件夹加内存列表几十万条数据就足以卡死训练循环。7.2 训练资源估算与配置参考很多团队在启动VLA项目前会被要多少张卡劝退。我的实测数据可以参考7B基座 视觉塔冻结 LoRA rank64输入序列1600 tokenbatch_size 128约等于8张A10080G训练5万步数据量约640万样本大约需要7天如果换成全参微调7B显存需求翻倍约16张A100时间也接近翻倍若只有4张A100可以把batch_size降一半序列长度控制在1000以内但成功率会下降约5到8个点。这个估算建立在重视工程优化梯度累积、FlashAttention、bf16混合精度的基础上。如果代码质量差同样的实验需要2到3倍资源。训练那几天GPU利用率保持在85%以上才说明数据管线没拖后腿。7.3 推理与部署的通用优化量化、KV Cache与视觉Token缓存骨干训完总要部署。VLA部署和纯LLM部署的差别在于视觉部分不能完全离线因为每帧都要实时编码。我总结的部署优化点视觉塔量化ViT可以用INT8量化精度损失很小显存省一半KV Cache复用如果指令不变语言模型对文本指令的KV可以预计算并复用不必每帧重新算视觉Token缓存对于静态背景的固定场景视觉特征可以先缓存只有机械臂或物体变化时才更新。这个优化对很多桌面抓取场景特别有效能省掉80%的视觉编码时间。这三个优化做完7B模型在单张A100或RTX 4090上能跑到15到25Hz推理基本满足真实机器人控制的实时性需求。8. 骨干设计之外我踩过的三个坑8.1 视觉塔冻结不等于完全不动很多VLA教程说视觉塔冻结但冻结的边界很模糊。我的经验是冻结指的是ViT主干参数不更新但ViT的输入预处理层如patch embedding、position embedding如果允许动会对视觉特征分布产生微妙影响尤其在多视角训练时容易过拟合到相机ID上。建议视觉塔的position embedding也冻结只允许最后一层输出的少量调整如有需要。否则数据里相机视角变化大模型可能学会记住哪个相机而不是理解场景。8.2 指令生成策略决定泛化上限VLA训练时指令文本怎么来直接决定模型的泛化能力上限。如果只用人工标注的指令模型学到的语义空间会很窄如果全用LLM合成的花式指令又容易脱离实际任务分布。我的做法是两组混合70%真实任务指令来自人工标注30%用LLM改写的多样化指令包括重排序、同义替换、增加空间约束描述。实验结果证明这30%的合成指令让模型在未见过的指令说法上成功率提高10%以上。8.3 别把骨干当成一切动作策略才是最终胜负手最后说一个容易被忽视的方向骨干拆解做得再好如果动作头Action Head设计不合理成功率照样上不去。下一篇我会专门拆解动作策略的设计包括连续回归、扩散策略、VQ动作Token三种主流路线的对比和选型建议。这里先给一个预览结论对于大部分操作任务连续动作回归加一点动作先验比如末端速度限制、关节限位是性价比最高的选择扩散策略适合高精度长程任务VQ适合需要与语言模型强耦合的动作语言化场景。这几种方案在nextVLA里都会预留接口。VLA骨干拆解这篇文章我尽量把为什么这么选和具体怎么做都写透了。视觉塔选SigLIP、语言基座选7B量级、融合层先用Token串联、训练时做课程学习和动作归一化——这些决定每一条拿出来都能单独写篇文章但组合起来才是nextVLA的骨架。下一篇进入动作策略我会重点写连续动作回归的十个细节包括动作表征、损失函数、预测头结构、训练稳定性等等。感兴趣的读者可以留个关注也欢迎在评论区聊聊你自己在VLA骨干上踩过的坑。
返回列表