veTalks 分享 | 具身智能的技术前沿及应用

人工智能Embedding行业趋势

veTalks 是由火山引擎牵头举办的分享交流平台。我们在这里讨论 AI、云计算、芯片等新技术的前沿趋势与创新应用,邀请行业专家、创业者、科研工作者分享他们的观察、实践与故事,希望通过思维的碰撞,激发新的思考,带来更多合作。

2024 年 12 月 11日,我们邀请了清华大学交叉信息研究院、星海图联合创始人许华哲。从技术和应用两哥维度,和大家一起探讨这波大模型所加持的具身智能究竟有何不同。

以下是分享的文字稿。

今天很开心来到这里跟大家分享关于置身智能的进展和思考。前期准备的时候收到一些反馈,听起来大家是希望以大模型为基调,聊聊大模型跟具身智能的结合。所以我今天的题目叫做 LLMs/VLMs for Embodied AI。

大家对大模型应该也不陌生。大模型里面有一个基础模型,Foundation model。Foundation model 的输入是什么呢?可以是结构化的数据、文本、语音、3D 信号、图像。它的输出也可以是任何东西,比如信息提取、遵守指令、物体识别等等。我们有时候会把这个称为 Any-to-Any,就是输出任何形式的人能理解的东西,然后它会给任何形式的人能理解的东西输出,这就是大模型。

那说到具身智能,这里有一张简单的介绍图。首先它是一个人工智能驱动的智能体,它有自己的感知的输入,叫 Perceptual inputs,通常来说这个 inputs 是视觉的,但是现在大家也在研究触觉、听觉等等,输入后让智能体来动作。然后它与物理世界交互而进行学习,Interactive learning。常用的算法有模仿学习、强化学习、逆强化学习。还有一个很热的词叫 World model,世界模型。世界模型在具身智能里面可大可小。小的话可以叫做传统意义上的动力学模型,即我知道现在这个机器人的状态,以及它做一个什么样的动作,然后下一秒或者下一步它会在怎样的新状态下。但世界模型从某种意义上还可以体现语义的信息,比如这杯水洒了,这个人的表情是什么样?这个世界会变成什么样?它甚至可以是更抽象的逻辑的信息,比如这盒饭放了一夜,第二天馊了。这些都可以看作是世界模型的一种形态。最后是目标(Goal),目标往往是对世物理世界进行的改变。比如说我要去把衣服清洗干净,或者倒一杯水,帮我拿一个可乐等等。

picture.image

具身智能是如何用大模型给的?

那么大模型和具身智能这两个非常火热的话题结合在一起会发生什么?或者说具身智能到底怎么用大模型?大模型又给具身智能带来了什么?我总结了几点:

第一是自然语言交互。以前机器人只能听懂代码,或者只能听懂 a-To-B 这样的结构化的语言。现在我们可以用自然语言跟它交互了。

其次是任务规划(Task planning)。以前我问机器人西红柿炒蛋该怎么做,这个问题是非常非常困难的,因为它不知道。但是大模型给了我们一个很容易的答案,不管问 GPT 还是豆包,它都会立刻告诉你,做西红柿炒蛋的第一步是要找到原材料,去哪找呢?去冰箱里面找,然后一步步帮你分解好,这其实是解决了具身智能里的一个老大难问题。 然后还有逻辑推理(Reasoning)、适应新的环境(Adaptation)以及自动化整个具身智能的 pipeline(Automated embodied pipeline)。这些都是在具身智能中使用大模型的方式。

今天主要跟大家去聊三个话题。第一个叫做 LLMs as high-level planners,就是如何以具身智能的机器人作为载体,顶层用大模型来进行规划。然后是关于如何用 LLM 来做 low-level control, 也就是大家常说的 VLA。第三个是叫 LLMS who write code,当大模型本身有写代码的能力,怎么把这个能力用在具身智能的研发范式里?

1、LLMs as high-level planners

用大模型来当具身智能任务规划器的最经典,或者说最早的论文来自谷歌。谷歌是最早做这件事情的机构之一,做得很好,出了很多优质论文。这篇文章叫做 Do As I Can, Not As I Say,简称 Say-Can。它做的事情就是最简单的——当我对大模型说“我把水撒了,能帮帮我么?”,大模型就会提出一系列的解决方案,比如帮你拿一块抹布、一个吸尘器、一张塑料布等等;然后它去决策哪些是真的能做到的。

那这两个步骤串联在一起就成构成了 Say-Can,有一个 Say 的部分,机器人接收自然语言指令;和一个 Can 的部分,机器人评估自己真的能做什么。这个 demo 里,我们看到好的模型能给出一个正确的答案,比如拿一块清洁海绵。但不够好得模型,可能就会说“对不起,不是我把水弄洒的”。你想找他帮忙,但是它文不对题,以为你在责怪它。这其实一定程度上告诉我们,如果想走这条路,具身智能一定需要非常非常好的大模型,不然的话它是没有办法做后续的事情的。有了一个好的大模型以后,机器人在实操中会把语言指令和自己能做的事情都打一个分,把两个分累计在一起,看看谁最高,然后去做对应的行动。

picture.image

那么,有了 Say-Can 是不是解决了具身智能的所有问题呢?其实不是。一个很简单的例子,如果我家厨房是下图这样的话,Say-Can 会立刻挂掉。为什么呢?因为这里面有一个隐含的条件,叫做我对各种各样的技能都经历了一遍,我知道我能不能做,我知道我的能力边界。

picture.image

但在这个环境里面,首先是需要的能力是非常多样的。我想要从厨房里把一个盘子抽出来,需要做什么样的动作?可能有很多种做法,比如可以把手指头塞进去,硬给它拽出来,或者可以把上面的东西挪开,然后把盘子拿出来。这样真正复杂的现实生活中,像 Say-Can 这样的模型只是开了一个头。真正的困难既在于顶层的大模型还不够好,底层的具体动作没有办法执行,更难的是我们很难去穷举这个世界上所有的任务、所有的技能。

Say-Can 自己作为一个开篇之作,后续也找了很多自己的问题,然后一个个地去填坑。比如这篇工作叫做 Inner Monologue,可以翻译成内心独白。它是做什么呢?Embodied Reasoning through Planning with Language Models,可以理解是它让机器人通过大模型不停地跟自己对话,从而达到一个闭环的效果。

这有一个具体例子,我们请机器人帮我拿点苏打水,机器人去找可乐。找到了,准备拿起来。但人给他捣乱,把可乐推倒了,机器人就有点懵了。这时候怎么办呢?成功检测器(Success Detector)就说,任务失败了,但好像看到了一个美年达。然后它问人类美年达行不行?人说不行,给我拿一个柠檬汽水。然后它就去找柠檬汽水,拿起了柠檬汽水,然后交给人。

这个过程中看起来跟 Say-Can 很像,但不同的是它多了一个成功检测器。当任务失败的时候,会用场景描述器(Scene Descriptor)跟人描述下这个场景,等待人给出的下一个指令。这里还有另一个直观的例子,让机器人从桌上拿饮料。它会用物体识别,把一个个物件识别出来,然后做成功监测,判断做完这个动作是成功还是失败。

picture.image

再往后沿着 Say-Can 这条路的研究者们觉得还是不够好,还有很多可以改进的地方,其中的一个叫做 Open-vocabulary Queryable Scene Representations for Real World Planning。之前我们似乎总在一个小厨房里给机器人指令,可乐在左边,柠檬水在右边,然后你每天就拿这俩东西糊弄我。现在我要把你放在整个公司里,或者至少是这层楼里,我希望你去另一个地方去给我拿一个东西。

picture.image

那怎么办呢?这个张图的上面一半是原始的 Say-Can 过程,而下面是一个 NLMap,Natural Language Map。NLMap 就是我把这层楼建成一个地图,把这个地图里的像素跟物体做一些特征上的匹配。从而能达到一个什么效果呢?就是我给你一个语言指令,你可以在一个我没看到的地方做这个匹配,去定位到这个物体,然后去做这件事。这个其实就是把 Say-Can 的范围扩大了,可以去各种各样的地方做 Say-Can。

举个例子,给个指令“帮我扔个可乐罐”,然后它第一步就会做 Object Proposal,扔可乐罐需要干嘛呢?需要找到垃圾桶,需要找到可乐罐。第二步叫 Query Context,就是去 NLMap 里寻找上述两个东西各自在哪,比如可乐罐在 X1Y1,这个垃圾桶在 X2Y2。然后再生成一些可执行的指令。最后再用 Context Aware Planning,已经找到了这些物体,也有了一些可执行指令,真正地把它们串成一串——让机器人去先找到可乐罐,拿起来走到垃圾桶,然后丢到垃圾桶里边。

这就是 Say-Can 这条线上的研究,我觉得非常直观,挺酷的。我认为给一个中学生去分享,他都能听得懂。因为它就是一个解耦的调用,没什么难以理解的、隐藏在里面的内核,但效果很好,很直接。就像我们想象中的贾维斯一样,我跟他对话就能帮我干事儿。

2、Foundation models for low-level control policies

刚刚讲的第一种,大模型作为顶层的任务规划,跟底层是解耦的。那我能不能去做直接的 low-level control?我用大模型做底层的控制,而不光是顶层的规划。 这个地方当然离不开我们的 Robot Transformer,RT-1。RT-1 是一个什么样的结构呢?它本质上跟大语言模型一样,就是 Transformer 的结构。这个架构的输入是啥?是图像和语言指令。输出是啥?是机器人的动作。本质上它就是把机器人的动作当成了某种语言,然后去回归这个机器人的动作。当然里面还有一些细节,比如说 Film EfficientNet 会压缩图片,文字也会转成 Token 再放到 Transformer 里面,最后变成机器人的动作。但是整个过程基本上都是非常非常经典的、像大语言模型一样的方式,只不过用在了机器人的数据上。

这里是它做的几件事情: 第一个叫做 Tokenized input and outputs,就是把世界上一切——图片也好、语言也好、动作也好,都变成 Token,所有模态统一都变成 Token。

第二它也是像大语言模型一样用 Decoder only transformer。

第三它用了一个 Film EfficientNet 去做了图像的 Tokenize,用这样一个过程来压缩图像。

第四,它对各种各样的 Token 进行压缩,从而让处理速度更快。为什么要这么做?因为大语言模型,你可以等,等着它输出个三五秒就好。但机器人等不得,倒水倒一半,下一个动作等 2 秒,我这水都倒干了,对吧?我必须要以三赫兹、五赫兹、十赫兹、三十赫兹这样的频率往上涨。

最后是采数据。为什么是采数据呢?因为机器人没数据,这是它跟大语言模型最核心的不同。为什么现在具身大家好像还没有到那个爆发点——就像大语言模型那样,验证到了那个点之后迅速爆炸,迅速成长——就是因为没数据。这个数据量是谷歌所采集的,13 万条数据,花了 13 台机器人,17 个月采了 700 多个任务,非常昂贵。首先这 13 个机器人合人民币就可能几十万一台,然后采数据时还要雇人,要工程师和采集员一起联合去采——美国的人力比中国可能还要更贵;最后这个采集过程可能要持续一年半。花了一年半的时间就干这么一个事,所以数据本身是非常非常昂贵的。国内也有很多创业公司,单靠卖数据就可以有不错的营收,为什么?因为很多地方采数据的成本太高了。但即使这样,数据规模仍然不好,跟语言相比,数据规模可能小了不止两三个量级。而且语言我们每天都在被动地生产,比如我今天在这儿分享的东西录下来,都是可以给大语言模型喂进去的东西,但机器人很难。即使把我的身体姿态录下来,到机器人那儿还有一个巨大的跨本体的鸿沟。

picture.image

上图是它展示出来的一些性能。当然了,论文里总是看起来很好,我们可以看到它在【看过的任务】上面的接近 100% 的成功率,在没【没看过的任务】上稍有下降。但是实际测下来它的泛化性是不好的,比如这里它展示出来百分之五六十的成功率,其实是不可用的。也就是说谷歌采了非常多的数据, 训练了一个巨量大模型,但它不够好,没有掀起太多波澜。 但没有掀起波澜不代表它不重要,对吧?它仍然是这个方向上一个很重要的工作。首先,它至少证明了大模型在已经看过的任务上是可以 overfit,过拟合的。第二,他发现用一点点仿真数据加到采集数据里面,是能产生一点作用。第三是他论文里提到“展示了一些跨本体的泛化能力”,这是我是不同意的。我认为它还没有展示出任何跨本体的泛化能力,但是论文里面是这样写的。我想如果真正有一篇论文展示出了跨本体的泛化能力,那个点到来了以后,我觉得具身智能就将大成。为什么?因为一旦跨本体可泛化了,说明人体的数据就可用了。人体数据可用了,我们真的就来到了跟自然语言同一个赛道,可以上 B 站、YouTube 去下各种各样无穷无尽的视频。第四是他自己也认同这样采的数据不够丰富。但不丰富不代表他不多,只是同质化比较严重,都在那个厨房里采的。

谷歌的同学们好像有一个思路,就是发现自己哪不好,我下一个 paper 就做啥。围绕采数据做优化,就用类似 stable diffusion 的生成式模型来改进我的数据。这有一个示例,在采集抓可乐任务的时候,我可以让它某一帧定格,然后把它的背景进行变换,变成超市、变成厨房、变成大厅、变到酒店里等等。这样数据量就丰富了,至少比原来丰富了。但是他没改的是这个可乐,是机器人,是它要做的这个任务。这样的话可以采一条数据,然后增广至 1, 000 条不同场景、同样任务的数据。当然动作本身的丰富性也是重要的,但这里面还没有去考虑这件事,更多考虑的是视觉背景上的丰富度。

这篇工作叫做 Scaling Robot Learning with Semantically Imagined Experience。Imagined 想象的空间,就是用像 Diffusion 或者是 Midjourney 这些去对数据进行增广。更具体的技术细节就是下面这张图。机器人抓着东西,然后会有一个Mask 来圈出来,到底哪要改哪不要改,然后有一些 prompt,关于要怎么改,对这个图像进行编辑。

picture.image

这是一个更有意思的 demo。我们甚至不光可以改变背景,还可以改变被操作的物体。比如把抓薯片变成抓调料,或者变成抹布或者饼干。甚至等它拿起来之后,还可以改变手里面抓着的这个东西。这个也是蛮有意思的。

这样的改变,其实可以让我们有很多动作上的复杂度和丰富度,从抓薯片变成抓抹布,有可能让未来抓抹布的效果更好。但实测下来,我认为它的效果没有那么让人惊艳,但是还是有效果的。这里有一个实验(图一),左边不停地生成各种水槽(augment),然后右边机器人可以真的抓一个可乐罐扔到水槽。一个比较简单的任务。

picture.image

做完这个任务后,研究者比较了一下效果(图二)。左边是 RT-1 的表现,右边是 RT-1 加上 augment 改背景、改前景的表现。然后我们发现原始的 RT-1 到了新场景完全挂掉,什么都做不了;而右边这个是可以完成抓物体的任务。

那下一步还有什么呢?他们说这些好像还不够酷,还不够好用。那怎么办呢?大模型很好用,对吧?那么我能不能先训练一个 VLM?真正意义上训练一个原生的 VLM,然后在里面再去训练我的机器人数据。这叫 RT-2,它会把各种模态的信息都训进去,最后把 RT-1 的信息也一起训进去。用 Co-finetuning 把两个东西 tune 在一起,然后就有了 RT-2。这也是第一个引爆了全网的 VRA 大模型。

这个东西到底做了什么呢?这东西仍然是把所有的模态都变成 Token,然后去训练。可以看到自然语言都变成 Token,图片用 ViT 也变成 Token,最后输出的是机器人的 XYZ 和 rotation,也就是末端的动作,这些都以 Token 的形式去输出出来。那它会展示出一个什么样的能力呢?我们可以设想一下,RT-2 跟 RT-1 核心的区别是什么?核心区别是它把一个 VLM 想要知道的所有知识都训进去了。但是它跟 Say-Can 的不同是什么? Say-Can 是 VRM 在上面给命令,然后底层有个执行器。那 RT-2 是什么?是端到端的,VRM 跟机器人是一起怼进去训练的,所以它只有一个网络。我们希望看到什么呢?希望它自动涌现一些对语义的理解能力,对这个世界的理解能力。比如说我直接给它一些语言指令,把香蕉挪到水瓶旁边,没有任何的检测器,它就知道这个是香蕉,这个是水瓶,它自己涌现了这样一种对世界的理解能力。

文章里还有一个非常有趣的案例,我跟它说“我需要钉一个钉子,你能帮我拿一个东西来钉钉子吗?”然后机器人发现周围没有锤子,然后看了半天,诶这里有个石头,它就会把石头举起来。这一定程度上展示了一些对常理的理解。如果我们要钉钉子,我们肯定不会用我的手去钉,很疼,又软又不好用,肯定会拿一个又硬又重的东西去钉。机器人也理解了这一点。 那沿着 RT-2 的这条路,VLA 有很多的进展,但是主要都是学术上的进展,目前还没有看到真正意义上突破性的、震惊世界的。包括前一阵子清华的 RDT,再之前美国的 OpenVLA 等工作。最近一个大动作是 π0(pi-zero),叫 physical intelligence。这家创业公司刚刚单轮融资了四亿美元,他们就 all in 这玩意,我截取的一部分 demo。

它可以从洗衣机里面把衣服拿出来。然后用跟人很像的方式叠衣服——因为都是采的遥操数据,叠完捋捋平。然后把它摞起来,放到角落里。这样一个过程的成功率在过去是前所未有的,之前所有的 VRA 都做不了这么复杂的事情。当然有很多人做过叠衣服,但是若干件连着叠,而且衣服都是以一些随机的状态出现在面前,这样的任务其实是比较难的。一定程度上,这个视频代表了 VRA 这个领域目前的最佳表现。它可以做一些比较灵巧的事情,比如舀咖啡豆、叠纸盒子、收餐具、打鸡蛋。最后这个部分是我最喜欢的部分,因为上面写了 uncut——没有任何剪辑,只是做了一个倍速。它从洗衣机里面把衣服拿出来,放到桌子上,然后在桌子上一件一件地叠。整个过程没有任何人的干预,也没有任何剪辑。如果说它成功率只有 50% 的话,是不可能拍出这样的视频的。那样的话你可能要拍 1, 000 遍才能拍出一次,因为这里面有好多步骤。所以一定程度上说明它的成功率还是可以的,但我想也不会是 100%,任务本身还是比较难,而且如果真是 100% 他一定会强调的。经常也可以看到它会卡住,比如衣服展不开,它会在那不断卡住。这一定程度上既是好事也是坏事啊。好的角度是,它真的是在学人是怎么样把一个不平的衣服展平的。那坏事就是说它好像没有人那么聪明,当它发现失败了以后,并不会换一个方式再做,而是不停用同样的方式,直到展平为止。

那这是 π0 的一个进展。他们也展示了所用海量的数据——互联网数据、开源的机器人数据、自采的各种本体机器人数据,训到它的大脑里面,然后做成刚刚所展示的这些事情。那它用的一个什么结构呢?是直接把一个预训练好的 VRM 当做起始的参数进行训练,后面有一个叫做 action expert 动作专家,然后这两个东西拼在一起做一个 mixture of expert 的混合,然后 flow matching 这样一个损失函数去做训练,这样训出来的东西下游就可以用在各种各样的任务上。

picture.image

这个地方我想也是大家很关心的一个问题,就是关于算力的问题。从 VLA 开始,我们可以看到它越来越往大模型的路上去了。这里它用的 PaliGemma,是一个谷歌开源的 3B 的大模型,然后加上他们自己的 action expert 300m,也就是说一共 3.3B 的大模型训练。这样的一个大模型大概可能就需要几十张卡,训练个三周或者一个月这样一个尺度。当然未来可能会变得更大,但是我觉得现在这个时间点是数据不够用了——模型在变得更大,但没那么多机器人数据给我用了。好在明年有非常非常多的人在采数据,这些数据出来以后模型就会跟着迭代。现在可能 100 万条、3B 就够了,明年可能就到了 1, 000 万条,可能就要 10B 或者 20B。当然它不是无限往上涨的,虽然我们当然希望有一个小模型的效果跟大的一样好,但短暂的两三年内,它一定会像大模型一样先往上涨。

3、LLMs who write code

最后一点可能相对来说五花八门一点。除了我前面说的 Say-Can 这种 planning 的,以及 VLA 这种端到端的。还有人用大模型来调 API 来干点事,比如说这个同样出自谷歌的工作,叫 Code as Policies。 什么叫 Code as Policies?他说你用那个 Say-Can 好像也不好使,上面规划完了,底层还得要执行;用 VLA 好像也不好使,你这个 RT-1、 RT-2 吐出来的都是一个具体的动作。那我能不能写 code,把这些东西都写成一行行的 Python 代码,然后让机器人直接执行这个 Python 代码就好了。

picture.image

上图有一个比较。左边是经典的模仿学习的范式,给一个感知,然后学习动作。中间的是 Say-Can 的范式,上层做 plan,下层做动作。最右边是什么呢?他说我直接上层写 code,下层直接执行 code,把机器人变成了一个代码翻译器。

picture.image

这地方是我从演示 demo 里面截的图。比如说我要把物体放在一个什么位置,它会先把物体都定义好,有红的、绿的、圆的、方的,最左边的是谁,最右边的是谁。然后它会定义一些函数,比如找到最左边的东西的函数。它会自己生成一套完整的代码,然后这套代码可以让机器人完成你的任务。下面的视频是一个效果展示:

但如果仔细观察会发现他有一些小问题。就是它做的事情都非常精准,就是圆是圆,方是方,所有物体都有自己的形状,所有的事情都有上下左右。这样的事情确实很适合用 code 来完成,对吧?那回到我最初为啥不看好 Say-Can 的理由,就是我要做的事很复杂,我要转笔,我要扔飞镖,我的东西掉了,想用脚把它捡起来。我要做的是这种事,但如果你只能干这个,实在太局限了。当然这不失为是一个好工作,我记得它当年还拿了 best paper。但我认为这个范式的局限性也是同样存在的。 那如果要挑战我刚才说的转笔这样很复杂的动作,那怎么办?好像写 code 并不能完成这件事。那拆分一下,我真正希望的事情是什么?是让机器人学会做这件事。虽然这事不能通过写 code 完成,但我可以定义什么是好,什么是坏。而一旦我们定义什么是好、什么是坏,那就有一个强大的武器叫做强化学习。也就是 Alpha go 当年火爆世界时用的那套方法。一旦用大模型定义好了什么是好,什么是坏,再用强化学习去做一个优化,我就可以做一些很复杂的事情了。这个思路其实也被人做过了,叫做 Language2Reward。

picture.image

如果我们仔细来看的话,左边是:“能不能直接把语言指令翻译成机器狗该怎么站起来?” 那很显然这狗不知道怎么站起来。那中间的说:“让这个狗站起来,那直接让它翻译每个关节怎么动”,大模型其实也翻译不了,也不知道这狗该怎么控制每个关节站起来。右边的就更具体了,“让这个狗站起来,它的胸这里要很高,然后它的手也要很高,它的后腿要打直”,把这些写成代码放到模型里面,然后让模型用 RL(Reinforcement Learning )或者用 MPC (Model Predictive Control)的方法去优化,一定程度上也完成了这样一件事。我们先看一下它具体实现的流程:先是人说了一句话,然后翻译成更精准的话,然后再加上奖励。通过这样的方式去实现 Language2Reward,有了 reward 以后,就可以用任何方法来优化这个 reward。以这样的方式就可以做一些不是那么精准的事情,一些看起来活灵活现的事情。

picture.image

下面这个视频就是通过 Language2Reward 的方式实现的,大家看起来可能会觉得很诡异。为什么如此诡异?因为大模型定好的 reward——什么是好 & 什么是坏,但是好和坏仅关乎任务是否完成。所以他很有可能定义苹果离柜子近就是好,进柜子就更好了,柜子门如果是关着的就更好了,但并不会说这个手必须得像人一样去完成这件事。

所以 RL 在底层作为一个优化器,并不会像你想的那样抓起来、放过来,而是抓着东西蹭过来,这样它学得最快、最容易。这也是为啥李世石、柯洁看不懂 AlphaGo,感觉就是个臭棋篓子,但最后就是能赢。这可能也是在这个反仿真环境里最优的一种拿物体的方式,但人如果这样拿就是多少有点毛病。

当然 Language2Reward 还有一些问题,比如说它的函数本身是要给定的;它非常依赖大模型的 prompt 次数,不是说一次就能成功的。后续的也有一个工作叫 Text2reward,跟刚刚那个几乎一样,只不过他做了 Sim2real,刚跟我们看的都在仿真里做的,而它迁移到真机了,并且写 reward 的时候也不需要给定函数,可以以自由的形式去写 reward,还是蛮有意思的。 再往后英伟达提了一个很有意思的思路——目前仍然是在这条路上,叫 Eureka。英伟达也觉得 Language2Reward 挺有道理的。那该怎么做呢?首先我们有 GPT4 了,就用 GPT 4 来写 reward,用强化学习去训练;训完后我要反思,看看这个 reward 写得好不好,写得好就重用,写得不好就告诉大模型让它重写。然后把这个过程变成一个循环,而不是一把梭哈。这个循环的好处就像是一个遗传算法一样,本来我提出 64 种reward,训出来后发现里面只有两种好,那剩下 62 种不要了,然后围绕这两种能不能再写 64 个,然后这样子进行循环,一次次优化,形成更好的奖励函数,从而可以优化最终的实现效果。

picture.image

我们想让他做的事是什么呢?是真正意义上把 reward 改对、改好。比如可以改 reward 里面的超参数,20 变30;然后可以改函数,线性函数变成指数函数;可以把速度这一维度也加上;改它缺失的定义等等。这些都是大模型自己改的代码,改完以后我一训发现比原来真的好了。那好在哪呢?好在能做更难的任务。就像我们前面说的,想转笔怎么办?我用英伟达的 Eureka 写 reward,写完就可以训机器人灵巧手转笔这样一个任务。不止转笔,他们还做了还有机械狗跑酷、双臂倒茶、双臂抛球、开关剪刀等一系列的任务。这就是 Eureka,声称说已经在相当多的任务上已经达到了人来设计的 reward 的程度。 我们刚刚聊到 Code as Policy,可以直接写策略;然后 Code as Reward,可以去写优化算法。那还有什么?Code as Simulators,仿真器本身的代码也让大模型去写。去年有若干个组同时在做这件事,MIT 那边叫 RoboGen,CMO 做的叫 Gen2Sim,我跟 UCSD 的王小龙老师合作的叫做 GenSim。这三篇文章里面内容高度相似,虽然配图和文字大不一样,但是 idea 是非常类似的,基本上就是用大模型写 code 的能力去做生成式仿真。我以自己的工作来为例,跟大家来分享一下。 为什么要做生成仿真?因为在现有的仿真里面,如果你想搞很多环境或是想搞新任务,不太行,搞不了。只能同样的任务搞很多并行,或者随机化我的领域,把里面物理参数、位置去随机化一下。但是这有什么问题?缺乏丰富性。那如何带来丰富性呢?大模型,因为它可以写是任何种类的 code。具体怎么做?我们来问大模型“你能帮我干这么一个事儿么?”大模型说行,我给你搞,给你写 code,然后就把这个环境给我写出来了。写出来以后我们在物理引擎里跑一跑,看看代码对不对,然后我们也跟 Eureka 一样有一个 slef-Reflection 的过程。大模型现在的成功率说实话没有那么高,跟它说一次就能精准地把事情解决的概率不是那么高,所以经常会有一些什么物理越界或者做的事情不对。那它要反思做得对还是不对,如果对,就保留,如果不对,就回到自我反思里面,以后不能再做这样的事情。

picture.image

有了这样任务以后,我们再去做若干个这样任务,就会有一个 Task Library。这就有了一个管理系统,管理好多好多的任务。然后这些任务可以做什么呢?可以做 Task-Level Generalization,可以在任务间去做泛化。另外,我们还可以做 Sim-to-real Adaptation,就是从仿真到现实的迁移。

picture.image

这里展示了代码里面带的两个任务,左边是抓各种各样小块放到小碗里,右边叫做抓一个 L 型的小块放在 L型的小孔里。如果我们让大模型把这俩任务给我整合成一个新任务,它说“好的,现在有一个任务叫把多个 L 型的小块放在 L 型的容器里。这就叫内插。那有没有外插呢?外插就是生成在已有环境里面没有出现过的任务。

picture.image

我们今年把 GenSim 又拓展了一下,拓展到 GenSim2。GenSim2 做了什么呢?叫多任务(Multi-Task)、多物体(Multi-Object)、多位置设置(Multi-Configuration)的场景。这里不止是 GenSim 抓小块的任务了,更多是生活化的场景,比如在厨房开柜子、在客厅里开电脑,或者给我倒茶。而机械臂和物体的位置,也是大模型自主生成的,具有随机性。

picture.image

当有了这个大模型写出来的仿真环境之后,我们就去做了一个叫作大规模的策略学习。因为现在生成的任务数量非常多,甚至可以在里面生成示例数据,那我就可以在这里做模仿学习,或者强化学习。当我们做了策略学习以后,就可以做仿真到现实的迁移。比如我们在仿真里面自动生成关电脑盖这样的数据,那我们就可以在不需要任何真机数据的情况下,直接在真实的机械臂上实现关电脑盖。这就是 GenSim 的后续,我想未来我们还会接着做。为什么呢?大家如果不做机器人的话,可能没那么感同身受,就是写仿真真的是一个很痛苦的事情。首先要想做什么任务,然后会有各种各样坐标对齐的问题,然后有各种各样的穿模、物理不对,有各种各样的摩擦力系数要调,一般来说都是一个项目里最痛苦、工作量非常大的过程。但我们未来希望大家都做核心的事情,对吧?去训模型,去调强化学习,而不是在这里写仿真环境。借助大模型写代码的能力去做这件事也形成了一个闭环。我们前面也聊到了用代码来写策略、写 reward、写仿真,如果这些东西都能自动化,可能我们在具身智能上,只要想清楚应该做什么事、想清楚大的方向,然后大模型就能帮我们做这些事。

当前的几个核心问题

1、数据

以上就是关于我们如何在具身智能里使用大模型,如何利用大模型的能力来提升具身智能的能力。这里还有几个核心问题,第一个就是数据从哪来?最典型的当然可以从仿真来,就比如刚刚我的 GenSim2,都是一些自动方式。

还有什么呢?这是 Aloha,Mobile Aloha,来自斯坦福,通过遥操作的方式来去实现夹取纸、擦玻璃这样的任务。这是一种技术上没有太多难度,但在工程上实现起来很有难度且效果很好的方式。因为遥操作本质上可以这样理解,现在做具身智能最难的是什么?是智能。然后遥操作是干嘛的呢?就是先不做这个智能最难的地方,而换成现在世界上最好的智能模块,叫做人类的大脑。就像我要看这个车好不好,而不是自动驾驶好不好。而且这个过程里采集到的数据可以反哺给机器去学智能的部分。 除了 Mobile Aloha 以外,这也是来自斯坦福的工作,叫做 DexCap。它在人手上戴一个手套,然后把手的动作捕捉下来,从而映射到机器人的动作空间,让它学一个策略,最终使这个机器人完成这一系列的动作,比如开关盒子、抓物体等等。这样的数据采集并不是人把着机器人的手去采的,而是用一个数据手套去收集的。这里面也有非常多的进展了,比如说上海交大卢策吾老师的组里做了一套外骨骼,人带着这套外骨骼动来动去,就可以做数据采集。HiroHand 是我们做的,把人的手戴在这个机器人手套里面去采集数据。采集数据的过程是人戴着手套在采,但人手抽来以后,这个手本身也是可以动的,也就是说这个手套和执行的机械手本身是一个东西。这也是斯坦福的一个工作,叫做 UMI。他的思路是如果只看末端的话,谁的手不是手?所以直接就打印一个夹爪,然后把摄像头放在手腕处,然后让人拿着打印夹爪去采数据。他们也验证了这在机器人上也能一定程度地去模仿。

其实整个领域跟大家的问题是非常一致的,就是在解决怎么训好大模型以外,第二就是到底怎么搞来跟大模型一样体量的数据。除了仿真以外,大家还应该去做各种各样的遥操作,各种各样的硬件改进。这里是我们组正在做的一个半成品,非常不成熟的一个东西,但我还是跟大家分享一些。之前那些东西看着都挺 fancy 的,只搞一个 demo 都挺 fancy 的,但它唯独缺一个东西叫反馈。人在做事的时候是有非常明确的力反馈的,所有那些 Aloha 其实都是要用眼睛猛盯着,因为它缺一个力,而我去抓一个物体的时候,我不用看就可以抓它。所以我们做了一个这样的手套——因为只是一个半成品,所以没有那么精美。大家可以这里有个触觉传感器,只要一按那儿手就会被弹回来。我们做的这个遥操作的手套,在控制物体的同时,也能把物体感受到的触觉传回人的手上。这样可以视触觉协同,提高采数据的效率和采集的任务难度。

2、算力

那再往后当数据问题有了解决方案——现在有仿真可以采很多数据;可以通过遥操作,做硬件的改进来采很多数据,那我的计算到底需要多少算力呢?我们的一个猜想是可能 100 台 H100,在现在这个体量下已经绰绰有余了,用来训一个很好的模型。当然这不绝对不是一个上限。为什么?因为我们要等更多的数据到来,才有可能买更多的机器,来使用更多算力。现在已经出现了数据不够的情况,算力再多也没用了,对吧?就那么点数据模型已经吃不饱了,就得等着这波数据起来,然后我们有更多算力来验证模型效果更好,然后有更多人去产出数据,最终形成闭环。我想具身智能也会这样去迭代、去发展。

3、很慢的大模型

此外我还看到一个问题,叫做大模型很慢,对具身智能来说是不是不太行?刚才也说了,比如倒水倒一半不能突然卡住了。大模型慢不慢呢?慢。用过的都知道,模型越大越卡。那有什么方法呢?具身智能这边解决方案,一个叫做 Action chunking,就是让模型一次性输出的动作是一串动作,而不是一个动作,比如一次性输出 50 步,这样的话可以在执行的时候边做边想之后该做什么。通过这样方法让别人感觉不到我的卡。第二个叫做 Mixture of expert,就是可能不要做一个原生的、100B 的模型,那会很难加速,可能用一个 Mixture of expert,有很多很多的小网络,然后混合在一起来做一个大模型。还有第三个解决方案,就是模型本身的加速或者硬件上的加速。比如有更好的卡,或者是像 MIT 韩松老师做的量化、剪枝,都是自动驾驶老生常谈的事情,在具身智能里仍然要去做。

从技术迈向商业化

搬箱子、捡零件、按按钮、开关门,如果你能在技术上稳定地做这四件事,那么 80% 的场景你都可以干。当然了,我们逐渐会往高精度的动作上去努力,比如柔式的插拔。然后迈向高效率,像人一样动得巨快。技术会往这些方向靠。

picture.image

我想商业化的进程肯定还是要从场景出发,而不是说技术出发。我在实验室里面可能做的东西都是天马行空的,去包饺子,去打网球,但是真正要商业化落地,肯定不会从这些事情去落地。为什么星海图觉得具身智能是一个非常有潜力的赛道?具身智能是一个软硬结合的事情,参考自动驾驶——我们在自动驾驶上发展很快,因为电动车做得很好,有一个很好的载体;而这背后是因为我们拥有全球最完备的供应链,只有中国才有。我们现在跟 π0 也有一些合作,最主要的就是硬件本体上的合作。他们在美国造不出来这个机器人,或者说造一台的成本是我们的十倍,那他当然来找我们来做。

第二,我们还有巨大的下游场景需求。我们是制造业大国,有造车,还有造各种各样零部件的需求。制造业的需求就是在中国。造机器人本身这件事就应该由机器人来干,是吧?

此外,在具身智能这个领域,全球竞争者在同一起点、同步迭代。因为大家手上都没数据,所以我们几乎是在同一个起跑线上在赛跑。不存在说,它已经无敌了,我这个就是永远都追不上它。

picture.image

如果具身智能是好的,那我们应该做谁?还是参考自动驾驶,我们希望去做具身智能里面的主机厂,当然也会同时做智能。就像理想,它最开始做电动车,但它的自动驾驶也发展得不错,因为它有数据,作为主机厂能搞到数据。回到我们这里,如果去做一个纯大脑,去提供智能算法,那拿不到数据,这样就会比较难。 我们目前做工业场景。工业场景里面先用遥操去打通,打通了之后我们会上智能,比如刚才说的搬箱子、捡零件、开关门、按按钮。

以上是我的分享内容,谢谢大家!


欢迎加入 veTalks 听友群

picture.image

如果想进一步了解火山引擎的产品、技术、案例和生态,欢迎填写问卷与我们联系:https://bytedance.larkoffice.com/share/base/form/shrcnhwUkOHeQdh81lTuFNEJVWe

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论