过去几年中,一个巨大的惊喜是代码代理在不同领域的广泛应用。如今,前沿研究人员表明,这包括控制机器人。麻省理工学院教授 Philip Isola 在一篇近期引发病毒式传播的文章中提出,我们可能正进入“机器人使用代理”时代,通用模型可以使不同的机器人更具能力。因此,今天我和 Francois 邀请了 Waddle Labs 和 RoboCurve 的创始人,这两家初创公司正致力于利用大型语言模型(LLM)在提升机器人能力的前沿领域开展工作。

也许你们可以先简要介绍一下自己,并谈谈各自公司的关注重点。我是 Jaime,来自 Waddle Labs,与 Vincent 一起工作。我们致力于构建能够控制机器人的大型语言模型,主要通过两件事来实现:一是构建一个框架(harness),使 LLM 能够非常有效地执行这些任务;二是收集数据,并利用这些数据训练更好的大型语言模型。

大家好,我是 Jay,RoboCurve 的联合创始人。我们是一家针对物理 AI(Physical AI)进行评估的公司。我们对一切进行测量,无论是任何机器人、任何模型——包括大型语言模型以及 VLAs(视觉-语言-动作模型)和世界动作模型等传统方法。我们在各种环境中进行评估,如机械手、夹爪、机械臂、人形机器人、四足动物等各种设备。

在过去几周里,你们两人的视频在 Twitter 上非常火爆,我认为它们实际上被引用在那篇关于“机器人使用代理”的 Philip Isola 文章中。这些视频展示了诸如 LLM 能够拧开瓶盖、多个机器人之间进行通信,以及执行如为钢笔拔帽等任务。因此,我觉得 Francois 和我可以深入探讨一下促成这一时刻的研究工作,并展示一些实际演示。首先,让我们谈谈语言模型与机器人控制之间转移的早期研究。我想讨论一下关于为决策预训练语言模型的早期工作,以及确立 VLA 架构的 RT2 论文。

Jay,你能否告诉我们一些关于利用语言模型进行任何类型机器人控制的早期工作?使用 AI 控制机器人的最早成功方法之一是 RT2 论文,他们利用在网页文本和图像上预训练的语言模型来控制机器人。有趣的是,这是一个经过微调的语言模型版本,它不输出英语等语言,而是输出一端执行器姿态(end effector pose),即你可以将其转换为控制机器人的关节指令的坐标。在某些情况下,这在某种程度上与现在看到的大型语言模型非常相似,只是不再需要微调,模型本身就足够好可以直接使用。

这实际上与我脑海中的映射非常相似,即“思维链”(Chain of Thought)时刻。当我们处理 GSM8K 数据集时,比如你说:“Susie 有 8 美元,她花了 5 元。她现在还剩多少?”模型必须输出类似四个井号(hash marks)然后才是答案,最后是 EOS。那时它没有思维链的能力。于是我们允许它实际上进行思考:“好的,让我算一下 8 - 5 = 3。”然后输出井号和答案。因此,你允许它在给出行动或答案之前进行这种思考。

同样地现在,VLA 就像 RT2 基本上必须输出一个动作。没有像“我可以为更复杂的任务分配更多计算资源”这样的机制。而现在我有这个代码思维链的东西可以做。我可以说:“好的,即使你在例子中没有实际输出代码,只是把它给 Astra 让它思考、思考、再思考然后输出一个动作。”同样地现在,使用代码具有更低的柯尔莫哥洛夫复杂度(Kolmogorov complexity),即代码长度更短,只需使用紧凑的代码:“这是代码。直接执行。”

我完全同意你的观点。我认为归根结底,这很大程度上是关于“少即是多”(bit of less)。如果你给予代理或 AI 模型更多的自主权,稍微解放它并给予更多资源,它实际上可以完成许多我们微调它所做的事情。

我也要插话一句。我认为这里“少即是多”的有趣之处在于,VLA 在架构设计上就是建立在语言模型之上的。它们潜在地具备推理和编写代码的能力。因此,这里的教训可能不在于你构建了什么样的架构,而在于哪种数据最有用。多年来,人们一直在抱怨 VLA 的数据瓶颈,进展非常缓慢。因此,这里的教训可能是我们拥有一种已知效果很好的数据模态,以及在不同模态之间转移的想法——Hamming 和我对此非常兴奋。

我们如何将从传统上属于分布外(out of distribution)的领域,如机器人技术,转化为分布内(in-distribution)的内容?利用“少即是多”教训的方式可能是说,让我们选择一种我们知道该模态非常丰富的数据。有很多数据,这些语言模型很好地理解它,然后利用这种方式来解锁许多其他领域。

是的,补充一点,RT2 之所以是一个很好的模型,是因为它使用了一种语言模型,该模型利用了大型语言模型所训练的所有数据的模态。因此,所有这些网页图像和标签实际上比仅在没有预训练的情况下训练特定的机器人基础模型更能改善 VLA。

所以在 RT2 这些早期 VLA 方法的情况下,你受益于预训练的影响。我想知道的是,如果你可以直接编写代码来绕过行动微调(action-taking fine-tuning)方法的局限性。你指的是数据方面的差异。你所指的数据差异具体是什么?

自 RT2 以来,模型在许多方面变得更好了。例如,工具使用能力大大增强。一种数据是这些模型现在能更好地编写代码。因此,它们可以像这样用代码编写复杂的策略(policies)。它们在探索所处环境类型方面也更擅长使用工具,比如它们可以访问哪些机械臂。其中很多都来自于上下文学习(in-context learning)。

像这些 VLA 或 GPT-6、LLM 之间的关键区别不像……

不一定是架构,而是你采取的训练方法。我们要遵循“苦涩教训”原则,对吧?就像我们希望从各种数据中受益一样。我们想把计算机使用数据注入到我们的机器人模型中,把编码数据也注入进去。但当你这样做时,最终得到的就是我们所谓的通用大型语言模型智能体。

对我来说,这就意味着:为什么不直接构建一个非常优秀的基础大模型,并用它来控制机器人呢?而不是训练一个专门针对机器人的、更依赖机器人数据的特定模型。基于这一点,我认为如果我们能倒拨时钟几年,有一件事可能表明我们正朝着正确的方向发展。

那就是“代码即策略”的研究。你们想谈谈当研究社区提到“代码即策略”时,这究竟意味着什么吗?我认为有必要将其置于该论文发表时的背景下来看,那时编码智能体才刚刚开始起作用。我觉得那还是人们热衷于添加注释和自动填充代码块的年代,比如Python代码块——虽然现在我们认为那是智能体的历史轨迹,但那是两年前的事了。

那么,“代码即策略”是如何工作的?它又是如何启发你们现在看到的各种可能性的呢?我想把时间倒回Voyager,因为Voyager是早期将代码作为策略的代表之一。什么是编码智能体?编码智能体需要良好的工具使用能力,以及即时创建新工具的能力。这就是所谓的代码。

假设我只有Python内置函数作为工具,比如排序、条件判断(if)、循环(for)和while。我需要利用这些现有工具来组装一个新的工具,比如创建一个名为francois.py的新脚本。现在这成为了一个新工具并可以被调用。这就是Voyager的做法,虽然我不确定它是第一个这么做的,但它在Minecraft游戏中最为流行。

Voyager创建了可以在运行时即时调用的工具,以帮助它们更好地玩游戏,并将思考和经验压缩成新的可调用工具。到了2024年,每个人都意识到了这一点:如果我们将所有的热情、灵魂、资源、计算能力和智力都投入到提升编码能力上,我们就能实现飞跃。

我们可以自动化机器学习工程师的工作,从而获得一切所需,解决所有问题。于是大家都这么做了。但我认为他们并没有我所说的深刻洞察:即这样做会产生足够好的大型语言模型来编写机器人策略,从而用真正的编码智能体取代整个机器人领域。

我也不认为他们意识到可以用编写JavaScript的编码智能体来替代艺术家创作精美艺术。老实说,我不确定他们拥有那种洞察力。我们可以谈谈这些早期的代码策略方法究竟能做到什么程度吗?

即便在编码智能体广泛普及、人们直观理解其工作原理之前,甚至在利用强化训练方法真正训练这些编码智能体成为工具调用专家之前,早期的代码策略已经展现出能力。我想那篇论文发表于2022年底左右,正值ChatGPT问世之际。

与现在相比,那些早期方法的能力如何?是的,这些代码策略论文,特别是来自Google DeepMind团队的研究非常出色。他们创建了一系列功能函数,如“拾取物体”、“举起”或“移动到特定姿态”,并以Python函数的形式提供给编码智能体。

然后,编码智能体能够编写涉及这些功能的代码来控制机器人执行非常复杂的任务。令人惊讶的是,编码智能体能以“一次完成”(one-shot)的方式做到这一点。它们不需要额外的机器人数据来配合代码工作,因为它们已经接受了大量编码数据的训练。

它们已经有了关于如何按顺序执行任务的感觉,例如先做什么、后做什么才能将积木放入碗中。我认为这种“一次完成”的能力以及上下文探索能力,真正激励了包括我们在内的许多后续工作继续探索如何将大型语言模型应用于机器人领域。

我知道Francois有一个我们讨论过的框架,涉及学习发生的各种方式:有些学习嵌入在权重中,而另一些则是上下文内学习等。你想简单谈谈这个框架吗?然后我们可以思考过去几年的所有研究如何 fitting 进这个框架,特别是它似乎正在朝哪个方向发展。

我实际上一直在进行这项实验,但尚未将其结晶为一篇论文。基本上,问题是:从“每个样本的智力”角度来看,将学习输入策略的最有效方式是什么?让我们在这个语境下考虑状态-动作-结果或状态-动作-奖励元组。

有上下文内学习(ICL),也就是我们描述的这种方式:我只是将其附加进去。这是大多数人使用大型语言模型的方式,比如“哦不,别这样做,要这样”,然后它仍在上下文中,我可以记住并迭代。

但这只有在大型语言模型经过训练或至少后训练以具备学习和改进能力时才有效,这种自我反思机制允许多轮对话进入训练集。如果没有这一点,它就无法在上下文中学习。但即便如此,ICL的效果也有极限。

所以我做了这样一个实验:取一个我们训练过的大型语言模型,保留一个简单的任务如GSMA K作为测试。然后对其进行上下文内学习,并在验证集上测量每个样本的改进程度。它在验证集上的表现有了很大提升且成本极低,没有随机梯度下降(SGD),也没有浮点运算开销。

因此,我可以非常快速地适应并改进验证集上的表现。

一种是非单调改进,这非常惊人。它的表现会变差、变好、再变差、再好,波动相当剧烈。第二点是性能很快达到瓶颈。因此,在大约20到30个、也许40个示例之后,模型基本饱和,向上下文中输入更多示例也不会带来提升。

所以,你受到模型智能利用其所有上下文能力的限制? 没错。从后训练的角度来看,它实际上能进行多少轮多轮对话以改善表现并实现自我反思?还有最重要的一点,如果超过了模型训练时的上下文窗口长度(即上下文限制),那就肯定无法再提升了。

如果它是在10万长度的上下文中训练的,那实际上意味着你的上下文窗口大约是5万。一旦超过这个数值,你就不会再有进步了,反而表现会变差,因为模型无法同时关注所有内容。

你提到的一个很好的例子我之前没怎么想过:“如果我使用RAG(检索增强生成)或者将动作加载到活跃记忆中呢?”这非常符合智能体持续学习的思路,我可以动态地拉取类似的示例。这就好比我有考试和教科书,如果有书作为参考查阅,我会表现得更好。

所以这肯定行得通,而且我想它的扩展性也会好得多。最后两种范式则是低秩自适应(LoRA),无论是秩1、秩2还是其他,一直到秩10或秩100,乃至全量监督微调(SFT)和强化学习(RL)。

如果你是特斯拉,拥有无限数据并通过上下文学习进行自动驾驶训练,你在做什么?这开玩笑吧。显然我们不会这么做,对吧?如果是Figure之类的公司呢?

但令人惊叹的是,在低数据情况下,通过上下文学习能取得很好的效果。更酷的是,我们可以将这种上下文压缩为工具使用或知识。这是我们尚未完全理清的层级结构,而你们可能正处于这一领域的前沿。

是的,你们能详细阐述一下吗?我想这是你们构建模型思路的核心部分。 这里有几个有趣的点值得剖析。首先,我们一直在思考“硬度”这一概念,几乎可以视为领域特定性的一种形式。

例如,当你在一个新环境中部署机器人时,可能是在湿实验室里,它只需要做很多试管抓取的工作。你可以在上下文中学习很多东西,但巩固这些上下文以供未来智能体使用的一种方法是将你学到的每项技能打包成特定的程序。

比如编写这些技能和记忆,这是一种巩固形式,也是从过去经验中提炼出供未来智能体使用的蒸馏过程。这非常有趣。

另一件有趣的是,这与机器学习历史中更广泛的元学习文献似乎存在某种关系。你有一个更大的模型来编程一个较小的模型去执行任务。

有趣的是,这些较小的模型确实会在上下文中学习。它们被包裹在框架内并执行任务。你可以让它们更小、运行更快,只要更大的模型能很好地完成你框架内的领域专业化工作。

这也是我们目前非常感兴趣的一点。最后一点,我认为真正有趣的理论问题是上下文学习能把你带到多远?对此真的谁也说不准。

有论文表明,这些模型在上下文学习期间实际上可以近似梯度下降。因此,权重空间和符号空间之间的界限在我看来有些模糊。

YC的下一批次现在开始接受申请。你有创业想法吗?请访问 ycombinator.com/apply 提交申请。永远不嫌早,填写申请表会让你的想法更上一层楼。好了,回到视频内容。

那么我们到底在看什么? 我们看着Ashra控制机械臂从桌子上拿起一个方块并放入碗中。

这里Ashra仅使用这些摄像头输入,并且显然意识到它正在控制的机器人,它将编写代码来控制机器人的各个关节。 是的,没错。它会查看所有摄像头,拥有所有摄像头的画面。

不过与其说是代码,不如说更像是工具调用。它向机器人发送命令来控制并将方块放入碗中。

那么在这种情况下我们直接使用Ashra,但如果使用Watched Harness,直接让Ashra控制与通过Watched API进行控制的差别是什么? 有时直接使用,比如让Ashra直接命令机器人应去的姿态,并不是最佳工具。

如果是重复性任务,你不希望Ashra在循环中。也许你想编写可以非常快速反复运行的代码。或者如果你以前做过类似的任务,你应该能够调用已编译的技能并使用该技能更快速地完成任务并更好地处理边缘情况。

所以,我们可以看到它似乎正在接近这个人。哇,太戏剧化了。

是的,你可以注意到延迟有点慢,因为我们受限于Astra的延迟瓶颈。

但如果看趋势,这些模型的延迟正在迅速改善。

对。 我们看到的一点是,对于稳定的大型语言模型(LLMs),它们的延迟每月改善约2倍。

这非常快。 确实很快。 是的。 如果趋势持续下去,我们可能在年底前实现实时控制。

既然我们已经看到了这个任务从头到尾的过程,为什么不 walkthrough(逐步讲解)一下这实际上包含了什么?这里有一个编码智能体在循环中运行。 是的。

那么编码智能体会采取哪些步骤?让我们对比一下直接的编码智能体版本与在循环中使用Water Harness(可能是Watched Harness的误听或变体)的区别。 是的。刚才发生的是,Astra在一系列回合中接收来自摄像头的图像,并输出机器人应前往的末端执行器姿态。

它通过多个回合来完成这项任务。这与其说是代码,不如说更像是策略或工具调用。

屏幕上的部分相当重复,因此你可以利用代码自动化处理大量此类操作。例如抓取瓶子并将其拿起等动作,一旦你执行过几次任务后,这些环节往往具有确定性。有趣的部分在于将变化性融入代码的策略图中。我们设有几个可变点,例如当检测到物体时,可能会使用视觉语言模型(VLM)作为工具调用的一部分;或者在任务失败时,如何判断其已失败?随后根据具体情况采取其他措施。对于这些更灵活的反应,我们倾向于在循环内部嵌入 VLM,以确保尽管策略图本身是确定性的,但仍存在允许变化的节点。

我认为对我世界观产生重大转变、改变我对机器学习执行方式及通往 AGI 剩余距离看法的最大洞察,源于我与弗朗索瓦·肖莱(François Chollet)的多次交流。早在 2018 年甚至更早,他在《智能度量》一书中就深入探讨了传导(transduction)与程序归纳(program induction)。传导仅指学习一个将输入映射到输出的函数。为何这被认为是低效的?因为它速度慢且信息利用率低下,需要从大量输入输出对中学习。若数据量极少,则需极强的归纳偏置来充当生成器以建立映射关系。

代码正是如此。如果在白板上进行编程面试,给出问题和示例后编写函数,本质上就是在发射一个能将输入映射到输出的函数。这很有趣,传统程序合成文献中许多方法效果不佳的原因在于:我们将问题难度从寻找映射转移到了寻找合适的归纳偏置上,以将其简化为较小的代码再进行映射。然而,找到这组归纳偏置极其困难。也许 Astra 正是为此提供了助力。认知科学领域的文献也正从神经符号方法转向直接使用代码进行映射,这或许是一个新的思考视角。

这正是神经符号的体现:神经元发射出作为代码的符号。这自然引出了最后一个话题,即受 Filippo 论文《柏拉图式表征假说》启发。该标题引用了“洞穴寓言”,意指我们看到的只是各种现实世界的影子。他的观点是,有充分证据表明,语言模型及不同数据的表征实际上在重叠的训练策略下学习到了相似事物间的距离映射。随着系统在海量数据上训练,它们会收敛到一种对世界的一致映射。这意味着语言模型将随时间推移在各项任务中表现更佳,从而适用于机器人控制等新任务。

这一表征假说似乎构成了你们世界观的核心。能否谈谈你们的看法,并推测为何像 Astra 这样的模型在机器人控制上远优于以往?关于机器人与语言模型的争论,一种具象化的理解是:强大的语言模型与强大的机器人模型将拥有极其相似的世界表征。若信奉柏拉图式表征假说,那么拥有一个强大的语言模型即意味着拥有强大的机器人模型。这也印证了“苦涩教训”:无论架构如何,只需一个真正强大的模型,其表现将超越任何稍弱的特定领域模型。

然而有一个非直观的现象:为何最新模型,特别是 Astra,在空间智能上表现如此突出?我们见过它控制 Blender 生成精美 3D 图像,以及在基准测试中实现有意义的阶梯式提升。相比六个月前的模型,OpenAI 在预训练和后期训练中究竟做出了何种改变?尽管这些模型仍受益于“苦涩教训”,擅长代码编写和数学解题,但此前尚未完全攻克所需的空间智能。

我认为 Astra 在视觉能力方面表现卓越,这很可能得益于其预训练数据中包含了前所未有的计算机使用数据和 CAD 数据。这类数据与机器人数据类似,都能教会模型对物理世界的理解。“计算机使用数据”这一观点很有趣。虽然直观上难以解释为何点击鼠标的操作有助于理解物理世界,但确实有大量此类数据被用于训练。能否详细阐述为何这是一个重大突破?我完全认同他们使用了比以往更多的计算机使用数据,但这如何转化为对物理世界的认知呢?

如果仅训练模型用于计算机操作,这似乎无法直接应用于机器人领域。但如果将……

将计算机使用数据输入到像 Astra 这样的大模型中,这里的“计算机使用数据”指的是你在屏幕上拖动光标以环绕某个 CAD 对象进行旋转,从而在 Blender 中进行设计。这能教会模型如何对空间进行推理,至少能让它理解上下、左右等概念。这些是你控制机器人所需的所有概念,对吧?我认为这就是为什么这类数据能让大型语言模型在机器人使用方面变得如此出色的原因。

从另一个方向来看, robotics 社区许多人也在尝试越来越多的不同种类的数据,例如第一人称视角视频。起初只是遥操作数据,后来扩展到更广泛的数据类型,因为不仅仅是机器人本身的操作数据才能教会模型如何使用机器人。因此,如果我们把这个逻辑推向极致:为什么不将编码、计算机使用以及第一人称视角等所有类型的数据都输入到同一个模型中呢?我认为这就是我们获得最强大的机器人使用智能体的途径。

这很有趣,如果你回到 20 世纪 80 年代的施乐帕克研究中心(Xerox PARC),我们当时创建图形用户界面是为了让它更像物理世界,以便人类能与它进行交互。而我们最终做的是构建了一个环境,这个环境实际上有助于机器人学习如何使用物理世界。我们有文件系统、文件和文件夹,还有 SolidWorks 和 Autodesk 等软件的图形界面,用来旋转物体以模拟物理世界。

既然我们无法让机器人在真实的物理世界中工作,我们就让它们在这些数字环境中进行训练,现在它们真的能在物理世界中工作了。确实如此。普林斯顿大学发表过一些令人惊叹的论文,Clip Clap Base Robotics 也触及了这一点。如果我们设计一个正确的“工具集”(harness),让机器人面对的工具看起来像计算机使用中的工具,比如有一个智能体拖动光标来控制机器人的移动方向,这将显著提高大型语言模型执行这些物理任务的能力。

你们认为,基于对基础模型持续改进的任何合理推测,以及你们在评估这些模型或围绕它们构建工具集方面的投入,哪些我们现在看来具有挑战性的能力,将在几个月后变得日益可能甚至微不足道?比如六个月前,我在你们推特上看到的演示,如果说是来自大型语言模型,那简直令人难以置信。

前沿实验室以及机器人基础公司和初创企业之间达成了一些共识:通用机器人在未来两年内甚至更早就会问世。这可能是社会尚未意识到或没有准备好的事情。当我们说通用机器人时,我们的意思是:如果你给出任何自然语言指令,它能像有能力的青少年用手做事一样完成。这就像是机器人领域的“ChatGPT 时刻”,在能力上能够泛化到未见过的任务和环境中。

对于你们 Wild Labs 团队来说,这意味着什么?我想我们会采取步骤在大约两年时间内实现这一目标。我认为有很多显而易见的挑战,比如网上讨论的延迟问题,这是一个大问题。如果让 Astra 在每一步都参与思考过程,那真的会很慢,在经济上也不具备实用性。那么,如何像 Astra 那样通过上下文学习进行初步处理,将其转化为一种更快的技能或策略,然后以极高的吞吐量反复运行呢?

我认为映射到人类的方式会越来越像这样:最优的做法可能是将新的状态、动作和奖励快速放回上下文中,但随后需要有一段“睡眠”时间。几乎一切智能体都需要睡觉,告诉我一个不睡觉的智能系统吧?在某种程度上会发生压缩现象。海马体会发生奇怪的事情,通过慢波振荡将白天压缩的记忆路径传输到大脑皮层以训练权重。

同样,也许正确的做法类似于经典强化学习中的 DAgger 数据隔离框架:你收集大量数据,然后对其进行反思,接着用它来更新你的权重文件。这些经验会被蒸馏回更新的权重文件中,这个新模型可能不再是 Astra,而是你们自己的模型。这听起来很像 Dream Coder 的机制。是的,Ask。

但是很多人用来构建的那些特定工具……以 Dream Coder 为例,它有一个技能库。在睡眠阶段,它将所有内容重构为更紧凑的表示形式等。我们看到类似的事情正在发生,虽然不像以前那样僵化地发生在程序空间中,但现在可能是你想重构轨迹或技能。许多关于机器人代码即策略的论文都有一个不断增长的技能阶梯,至于如何修剪和组织它们,真的很难预测。

因此,随着世界的发展,如何管理不断增长的技能上下文和部署数据将会非常有趣。我认为讨论到此结束,这是一次精彩的对话。非常感谢 Vincent、Hanmin 和 Jay 来到这里。我对未来几年我们将看到的令人惊叹的机器人进步感到非常兴奋,我也同意 Jay 的观点:更广泛的社会并没有完全意识到即将到来的变化,未来几年将会非常精彩。非常感谢。