ARTICLE DETAIL

资讯详情

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

Transformer协同设计:让机器人本体和控制同步进化

Transformer协同设计:让机器人本体和控制同步进化 这个项目名乍一看像名字没起完Transformer Transformer到底重复了什么实际上这里的重复是有意的——前一个 Transformer 指深度学习里那套以自注意力为主干的网络结构后一个 Transformer 是动词化的表达指把机械结构“变换”成一种可学习的表征再让控制策略顺着这套表征生成动作。换句话说这不是一篇讲“用Transformer替代LSTM做时序预测”的博客而是我最近在仿真环境里反复折腾的一个方向本体-控制协同设计。核心问题只有一个机器人的身体结构和控制大脑能不能不再分开设计我用Transformer把两者放进同一个优化循环里搜索给它起代号 TT最后得到的结论比想象中更有意思。如果你也在做机器人控制、结构进化、或者只是对“AI为什么不能同时设计身体和算法”感到好奇这篇内容应该能帮你省下不少试错时间。1. 先设计身体再写算法为什么总是事倍功半1.1 一个所有机器人工程师都眼熟的场景传统机器人开发流程通常是一条流水线结构工程师先用 CAD 定杆长、定自由度、定电机型号等机械图纸冻结、样机加工回来控制工程师才进场开始调 PID、调阻抗、调步态。这种流程本身没有问题它把复杂问题拆成了两段。但真正跑过项目的人都知道后半段调试时经常会出现一个尴尬局面无论如何调参控制器都补不上机械结构留下的坑。我举个亲历过的例子设计一条六自由度机械臂结构仿真显示末端最大速度满足指标但样机装上后控制器一加速末端就剧烈抖动。查到最后发现原因在结构端——第二关节的减速器背隙偏大加上臂杆刚度不足形成了低频结构谐振。最后解决方式不是改进控制算法而是把臂杆加粗、换更高刚度材料等于推翻了一轮结构设计。控制算法在那一刻成了“结构缺陷的背锅侠”。这种案例不是个别现象。硬件本体一旦定型控制策略的可行域就被焊死了。算法工程师能做的是在一个已经收窄的漏斗里找局部最优而结构工程师当初选型时又几乎不会把控制器的学习能力计算进去。1.2 协同设计的本质是同时搜索两个变量的联合最优如果把机器人设计建模成一个优化问题设形态参数为 μ控制参数为 θ任务性能为 J(μ, θ)传统流程相当于先固定一个 μ₀再针对 μ₀ 去求 θ* argmax J(μ₀, θ)如果 θ* 不满足要求就重新手工改 μ再去训一轮 θ问题是J(μ, θ) 对 μ 和 θ 并不是可分离的。很多高绩效形态只有在配套了合适的控制策略时才显示出来反过来一个平庸的形态配上一个差劲的策略可能让你以为整个设计路线都不可行。本体-控制协同设计想做的事是在同一个优化循环里搜索 μ 和 θmax J(μ, θ)μ ∈ 结构空间θ ∈ 策略参数空间听起来很简单真正做起来有三个硬骨头第一μ 是离散的结构变量模块类型、连接方式、自由度数量都是离散的不可微。第二θ 通常是神经网络参数维度高但每评估一组 θ 都要在仿真环境里跑几百条轨迹。第三μ 一变连观测向量的维度都变了常规的策略网络结构根本不兼容。这就是为什么以前做协同设计的论文多半依赖进化算法——进化算法不需要可微也勉强能处理离散变量。但它有个严重问题它不知道 μ 和 θ 之间更深层的耦合关系。进化搜索到后期大部分变异都会被浪费因为生成的新结构看起来不同实际性能上却没有结构性改善。1.3 为什么 Transformer 这时候变得合适Transformer 最初是给自然语言设计的。它处理的是变长序列核心机制是把序列里每个位置的信息通过自注意力广播给其他所有位置。后来 Vision Transformer 把它用到图像上Point Transformer 用到点云上大家发现一个规律只要能把输入转换成一组 tokenTransformer 就能处理它而且能建模长程依赖。机器人的本体结构恰好也能转换成一串 token每个模块是一个 token模块类型、安装方向、空间位置就是 token 的特征。更关键的是结构里相距很远的两个模块——比如左侧前腿的踝关节和右侧后腿的髋关节——它们对运动的影响往往是高度耦合的。这种跨位置的依赖正是自注意力最擅长捕捉的东西。所以 TT 思路是把 Transformer 当作一个“形态编译器”它把任意一个机器人结构编译成一组结构 token然后控制网络通过 cross-attention 去读这组 token再输出动作。结构怎么变token 序列就怎么变但网络架构本身不用推倒重来。2. TT 的整体设计形态 Transformer 和控制 Transformer 的分工2.1 TT-Morph本体编码器如何把机械结构变成 Token为了让形态可搜索我把机器人限制成模块化体素机器人每一个单元是一个立方体模块可以是结构连杆、旋转关节、轮式模块、末端执行器模块之间按空间网格连接。这种表示方法在仿真环境里最省事也最容易自动生成。TT-Morph 要做的事是把一个模块化结构转换成一串向量。具体来说每个模块的 token 特征包含 5 类信息模块类型用 one-hot 编码表示模块在网格上的三维坐标x, y, z模块当前的安装方向比如旋转轴是绕 x 还是绕 z模块是否为地面接触模块这决定了它是否能产生推进力模块的关节属性比如角度范围、力矩上限输入 TT-Morph 之前这些原始特征要先过一层线性投影变成 d_model 维的向量。然后加上位置编码——这里用到的不是自然语言里那种“第几个词”的绝对位置而是直接把三维网格坐标经过一个小型 MLP 映射成位置向量。这个细节很重要后面我会专门说为什么不能用线性编号。随后这些 token 进入两三层标准的 Transformer Encoder Block。自注意力让每个模块看到整个拓扑中其他模块的信息。结果是最后一个模块的编码向量不只包含自己还携带了它和所有其他模块之间的隐式关系。对一条机械腿来说脚尖模块的编码里会自然包含髋关节的位置和朝向因为注意力权重已经把这些信息聚合过来了。2.2 TT-Control控制解码器如何在结构约束下输出动作如果说 TT-Morph 是编码器TT-Control 就更像一个解码器。它的输入有两个来源来自 TT-Morph 的结构 token作为 memory来自仿真环境的实时观测包括各模块的关节角度、角速度、接触力、机身倾角等TT-Control 使用 cross-attention 机制去查询结构 token。这里可以类比机器翻译翻译时解码器每一个时间步都会去关注源语言句子的不同部分控制也是一样决策时智能体需要关注“身体上哪个模块对当前动作最重要”。当一个结构是四足时TT-Control 的前向计算会自动让每条腿的控制器去读到对应腿的模块编码当一个结构变成带轮子的两轮车时cross-attention 会把注意力集中在轮式模块周围输出就变成轮速。同一套网络不需要因为自由度数量变化而重新设计输入输出层。动作输出同样以 token 方式组织。有一个天然叉子如果关节数量可变输出维度也可变。常规方法会固定一个最大模块数 N_max每个可控关节对应一个固定位置的输出头不可用的模块直接 mask 掉。这样实现简单代价是网络里存在大量冗余参数。我在实验里采用的就是这种 mask 方式训练速度比动态输出快很多。2.3 两个 Transformer 怎么组合成一个计算图整个前向过程可以写成输入一个具体的模块化机器人结构 STT-Morph 把 S 编码成一组结构 token E_M将环境观测 O_t 和 E_M 拼接后送入 TT-ControlTT-Control 输出动作 token经 mask 后映射到每个可控关节仿真环境执行动作返回下一帧观测和奖励比起单独使用进化算法或单独使用强化学习这个结构的核心优势是形态信息直接进入了策略的条件输入。策略不再是一个“假定身体固定的黑盒”它能根据结构变化自适应地调整注意力分配。我在最开始犯的一个错误是让 TT-Control 直接从本体 token 自回归地生成动作忽视了环境观测。后来发现这是错的因为控制还需要知道当前状态比如现在是不是已经摔倒了、哪条腿正在着地。现在的做法是让环境观测和结构 token 一起参与注意力计算动作生成既看身体、也看当下。3. 仿真管线的落地让结构采样和控制优化同频3.1 环境选型与基本参数我的实验平台选用了基于 MuJoCo 的模块化机器人仿真。选它的原因有三个接触求解稳定、支持 MJX 批量 GPU 加速、能方便地用 XML 描述任意模块组合。每个基础模块的简化物理属性如下模块类型质量(kg)尺寸(m)控制方式备注结构连杆0.150.1 x 0.1 x 0.1无只提供连接与刚度旋转关节0.120.1 x 0.1 x 0.1角度/力矩默认角度范围±90°轮式模块0.08半径0.05轮速带滚动接触模型末端脚掌0.050.1 x 0.1 x 0.05无增加地面摩擦形态搜索空间是 3x3x3 网格内最多 20 个模块。搜索目标是生成一个能够在随机起伏地形上从起点移动到目标点的形体。3.2 神经网络结构与位置编码的细节TT-Morph 采用 3 层 Transformer Encoderd_model1288 头注意力。TT-Control 采用 2 层 Transformer Decoder同样 d_model128。整体参数量不到 3M比现在很多大模型小得多但足够处理几十个模块的结构表征。位置编码可能是整个项目里最容易被忽视的部分。第一次实验时我简单地把模块的生成顺序当作位置信息第一个模块位置编码为 0第二个为 1以此类推。结果训练出来的策略对“生成顺序”极度敏感稍微改变模块在列表中的排序同样的实际结构性能就剧烈波动。问题在于模块生成顺序是一种人为随机量它不代表任何物理意义。对图像 patch 来说位置序号还大致对应空间方位对机器人本体来说顺序和空间结构之间没有稳定映射。后来我把位置编码改成从模块三维网格坐标算出来的PE_i MLP(x_i, y_i, z_i)只用一个双层 MLP 把坐标映射到 d_model 维。这样改变 token 排序不会改变编码结果因为位置信息来自坐标本身。修改之后同类结构的性能方差显著下降协同搜索才真正稳定下来。另一个容易踩的坑是注意力 mask。模块结构不是全连接图两个模块如果物理上不相邻它们之间的相互影响需要通过中间模块传递。因此我在 TT-Morph 里加了邻接 mask每个 token 只允许关注和自己物理相邻或距离不超过 2 跳的模块。这个 mask 让注意力矩阵更稀疏训练速度更快也更符合机械连接的物理约束。3.3 外层进化 内层强化学习的双层优化框架由于结构搜索是不可微的离散问题我采用了一套双层优化流程外层用 CMA-ES 进化结构基因型内层用 PPO 训练当前结构对应的控制策略适应度 策略训练结束后的任务表现简单伪代码如下初始化种群 P {m_1, m_2, ..., m_n} repeat: for m in P: # 将结构 m 转换成 token 序列 tokens build_tokens(m) # 用 TT 初始化策略网络 policy TT(tokens) # PPO 训练该策略 K 步 train_policy(policy, env(m), K) # 评估适应度 fitness[m] evaluate(policy, env(m)) # 根据适应度更新 CMA-ES structure_model.update(P, fitness) # 生成新一代结构 P_next structure_model.sample(n) P P_next第一次跑这个循环成本高得吓人。每个结构都要从头训练 K 步 PPO新一代 20 个结构就是 20 个完整强化学习训练任务。即便在 GPU 上也要几个小时出一轮。后来我加了一个跨结构迁移机制训练新结构的策略时不再随机初始化而是把上一轮最优结构的策略权重拿过来再针对新结构微调。因为 TT 对结构有感知能力前一轮学到的基本运动技能比如保持平衡、避免机身拖地可以被迁移到相似结构中。这个改动让内层训练步数从 500 万降到 150 万效果没有明显下降。3.4 评估任务与奖励函数设计任务本身不能太简单否则协同搜索会找到一堆钻空子的形态。我在实验里设置的地形是正弦起伏与随机小凸起叠加的混合地形机器人必须在 20 秒内到达目标点然后按综合分数评估。奖励函数如下R 2.0 * Δprogress - 0.05 * 关节力矩惩罚 - 0.1 * 能耗惩罚 到达奖励Δprogress 是每一帧相对上一帧机器人在地面投影上朝向目标方向的位移增量。关节力矩惩罚会抑制进化出“靠蛮力硬扭”的形态能耗惩罚则鼓励带轮子、带被动结构这类省力设计。4. 实测结果协同设计到底改变了什么4.1 三种对照方案的差异为了验证 TT 的价值我跑了三组对照固定形态手工设计一个四足机器人结构固定只优化控制策略随机形态每轮随机采样结构但结构与控制完全独立优化TT 协同TT 框架下的结构-控制联合搜索每组跑 10 个随机种子最终结果取平均。核心指标如下方案最低能耗(mJ)平均速度(m/s)地形适应度到达率固定四足形态1120.430.7162%随机形态独立控制1450.390.5849%TT 协同搜索870.620.8684%固定形态并不是最差的因为手工设计本身就包含很强的结构先验。随机形态由于缺乏结构和控制的协同经常出现“高个子配低速控制”“短腿配高步频策略”这类失衡组合所以平均分反而更低。TT 协同搜索能够同时调节结构和控制整体性能最高。4.2 我看到的涌现现象非对称身体成为最优解传统机器人设计追求对称性因为对称简化了分析、制造和控制。但在 TT 搜索出来的一批最优形态里我注意到一个反复出现的模式左前腿是主动旋转关节右前腿却装了一个小轮子后腿则两条都是被动连杆。直观上非常不“机器人”更像一个奇怪的三不像。等我把这类形态单独拿出来训练才发现它不是猎奇。控制器学会了一种混合运动模式前侧的轮子承担主要的前向滚动左前腿负责在滚动过程中不断调整方向两条后腿则提供翻越障碍时的支撑。整台机器人在平地效率接近轮式在越过凸起时又能依靠“腿轮”的混合结构临时变成步态运动。这个例子特别能说明协同设计的价值。如果我先固定一个对称四足控制策略无论怎么优化都不可能学会“轮腿混合”的移动方式如果我先固定一个轮式底盘又不可能在起伏地形上获得腿部支撑。身体结构决定了行为空间的边界而协同设计等于把这条边界也放进了搜索范围。4.3 输出形态的结构复杂度变化进化代数与形态复杂度之间并不是线性增长。前 20 代搜索强烈偏向简单结构一个轮子加一块重心压块就足以完成平地上的基本移动得分并不低。但随着奖励中能耗惩罚和越障需求显现简单结构的上限暴露出来进化开始往“增加腿部模块”的方向移动。有意思的是TT-Morph 由于使用了自注意力对结构复杂度的感知并不直接来自模块数量而是来自模块间的功能耦合。它能够保留“能提高稳定性的结构连接”丢掉“只增加重量但和当前控制策略无关的冗余模块”。相比纯进化算法结构冗余率大约下降了 27%。5. 训练过程中最容易翻车的五个细节5.1 先别急着把整个框架堆起来我最初直接拿完整 TT 框架从零开始跑结果一连几天都在观察 loss 乱跳。后来才悟到这种双层优化问题必须分层调试。正确步骤是先冻结所有结构只训练 TT-Control。确认它能在一个固定四足结构上稳定学会行走。然后冻结 TT-Control只优化 TT-Morph 与 CMA-ES让系统学会生成“TT-Control 更容易学会的结构”。等到两个部分都单独跑通再联合端到端训练。分层调试虽然慢但每一步失败都能准确定位。5.2 结构 token 的 order 敏感度必须处理好前面说过位置编码的问题。这里再补一个点即使改用坐标编码token 在输入序列里的排列顺序仍然会影响注意力计算中的偏置因为 Transformer 对顺序还是敏感的。实际解决方法是训练时对同一结构做多次随机排序把 token 顺序当作数据增强的一部分。这能强制模型从坐标而不是位置序号中提取信息。5.3 PPO 的 critic 必须感知形态强化学习里常用一个 value network 估计状态价值。在我最初的设计里critic 只输入环境观测 O_t不输入结构 token。结果训练非常不稳定。原因分析起来很清晰固定结构的机器人观测状态基本能反映运动能力边界但结构不同时同样的 O_t 可能代表完全不同的价值。同样的机身倾角对四足结构可能还能恢复对两轮结构可能已经濒临失控。所以我让 critic 也接收 TT-Morph 的结构 token相当于告诉价值函数“你现在控制的是谁”。改动很小训练方差下降了一大截。5.4 仿真接触参数造成的“伪结构优势”协同搜索会对仿真器里的物理细节高度敏感。有一个阶段进化出的结构全部带尖锐小脚掌得分很高。我以为是发现了某种高效形态仔细排查之后发现MuJoCo 默认接触参数下尖锐模型陷入地面缝隙后会产生异常大的摩擦力相当于把机器人“卡”在地面凸起上提供稳定支撑。这在实际物理世界是不可能成立的。后来我在地形里加入随机摩擦系数扰动并且每次评估都更换地形种子。只有在扰动下依然稳定的结构才会获得高分。这个步骤极大减少了搜索对仿真器伪影的过拟合。5.5 别忽视控制频率和仿真步长的匹配模块化结构的自由度差异很大固定 500Hz 控制频率对某些细长腿结构会产生数值不稳定。有人可能会问进化出的结构为什么会有细长腿因为细长腿在越障时有优势但它的关节角速度容易超过限位。问题是控制器如果输出过大的角速度指令MuJoCo 会在一两个仿真步内产生爆振。最有效的解决方法是给所有旋转关节加阻尼系数并且在控制指令前加一个简单的低通滤波。阻尼会稍微牺牲峰值速度但有效避免了搜索到高转速、低惯量结构时的仿真爆炸。6. 项目名里两个 Transformer 的深层含义跑完这一轮实验我对“本体-控制协同设计”有了新的理解。过去总把身体和控制看成两个独立子系统身体提供执行能力控制提供决策能力。TT 项目让我意识到身体本质上也是一种信息通道它的结构形态决定了“控制信号能以多大程度转化为有用运动”。设计身体的时候如果不考虑后续控制的可学习性等于人为压缩了这条信息通道的带宽。Transformer 能在这种协同中发挥作用是因为它以统一的方式处理离散的结构 token 和连续的状态、动作。传统神经网络要么擅长处理连续策略要么擅长处理离散结构很难让两者共享特征。自注意力机制天然地允许信息在不同 token 之间流动结构模块的编码可以告诉控制器“你正在操作的对象是什么”控制器的决策结果又能通过奖励反向指导结构搜索的目标。两个 Transformer 不是两套割裂的网络而是同一个闭环里互为条件的两个端点。如果把这两个词再抠细一点第一个 Transformer 是技术手段第二个 Transformer 是设计哲学把身体从“固定不可变的硬件约束”变化成“可优化可重组的表征空间”。本体不再是一张等待算法去适配的图纸而是和控制器一样成为一个可以被学习、被搜索、被改进的对象。作为从业者我不建议任何人直接照搬这套框架去解决所有机器人设计问题。它目前更适合模块化机器人、可重构机器人这类结构本身可以变动、且能够在仿真中快速迭代的场景。真实机械加工要面对的制造公差、装配误差、线缆布局等约束还没有纳入当前搜索目标这部分会直接影响工程落地。但我可以确定的是未来好的机器人设计一定不再是机械工程师和控制工程师各干各的。让“身体”和“大脑”在同一个语言系统里对话这件事本身就有极大价值。把这个过程里最关键的一步交给 Transformer 来做算是 TL但让身体学会“变换出适合控制的形态”才是项目名里第二个 Transformer 真正想表达的东西。
返回列表