具身大模型学习——OCTO

AITNT-国内领先的一站式人工智能新闻资讯网站
# 热门搜索 #
AITNT-国内领先的一站式人工智能新闻资讯网站 搜索
具身大模型学习——OCTO
5855点击    2024-11-19 21:10

摘要

在多样化的机器人数据集上预训练的大型策略有潜力改变机器人学习:与从头开始训练新策略相比,这种通用型机器人策略可以通过少量的领域内数据进行微调,同时具备广泛的泛化能力。然而,为了广泛适用于各种机器人学习场景、环境和任务,这些策略需要能够处理多样的传感器和动作空间,适应多种常用的机器人平台,并能够快速有效地微调到新领域。在这项工作中,我们旨在为开发开源的、广泛适用的通用机器人操控策略奠定基础。作为第一步,我们引入了Octo,一种基于transformer的大型策略,训练数据来自Open X-Embodiment数据集的80万条轨迹,该数据集是迄今为止最大的机器人操控数据集。Octo可以通过语言命令或目标图像进行指令,并且可以在标准消费级GPU上在几小时内有效微调以适应新的传感输入和动作空间。在9个机器人平台上的实验中,我们展示了Octo作为一种通用的策略初始化,可以有效微调到新的观测和动作空间。我们还对Octo模型的设计决策进行了详细消融实验,从架构到训练数据,以指导未来在构建通用机器人模型方面的研究。


具身大模型学习——OCTO


Octo(一种机器人控制策略)可以通过两种方式接受指令:语言命令(例如口头指令)或目标图像(例如机器人需要去实现的目标的图像)。并且,Octo的设计使得它可以在标准消费级GPU上(例如普通的个人电脑上使用的显卡,而不是专业服务器级的硬件)在几小时内有效微调,适应新的传感器输入和动作空间。


下面逐个解释这些概念:


1. 通过语言命令或目标图像进行指令


• 语言命令:Octo可以理解并响应口头指令(例如“拿起桌上的杯子”),这些指令会被转换成机器可以理解的形式,指导机器人执行任务。


• 目标图像:Octo也可以通过目标图像来理解任务。例如,给机器人提供一个目标图像(比如一个桌子上的杯子),机器人将根据图像指引去完成任务,比如抓取和移动这个杯子。


2. 在标准消费级GPU上进行微调


• 标准消费级GPU:这指的是普通个人电脑中使用的显卡(例如NVIDIA的A5000或其他较常见的显卡),而不是通常用于训练深度学习模型的昂贵高性能计算硬件(如TPU或高端NVIDIA A100 GPU)。


• 微调:指的是在Octo已经经过初步的预训练后,通过少量的新数据(例如新的传感器输入、任务、动作空间等)对其进行优化,使得Octo能够适应新任务或环境。在几小时内微调是指Octo能够在较短的时间内,快速学习新的技能或适应新的环境变化。


3. 适应新的传感输入和动作空间


• 新的传感输入:指Octo可以接受来自不同类型的传感器的数据输入,如新的视觉传感器(例如深度摄像头、激光雷达)或新的触觉传感器。Octo能够在微调过程中学习如何使用这些新传感器进行任务。


• 新的动作空间:指Octo能够适应新的机器人控制方式。例如,如果原来是通过操控机器人手臂的关节位置来做动作,现在可能改为控制机器人的抓手动作(开合抓手),Octo也能调整其控制策略以适应这种新的动作空间。


I. 引言


机器人学习的常见方法是基于为特定机器人和任务收集的数据集来训练策略。这种从头开始学习的方法要求为每个任务收集大量的数据,并且生成的策略通常只能表现出狭窄的泛化能力。从理论上讲,其他机器人和任务的经验数据可以为模型提供多样的机器人控制问题,这或许能够提高其在下游任务中的泛化性和表现力。然而,即使通用模型在自然语言[68, 88]和计算机视觉[76, 44]中变得普遍,构建能够执行多任务多机器人控制的“通用机器人模型”仍然面临挑战。在机器人学中训练统一控制策略具有独特的挑战,要求处理不同的机器人形态、传感器配置、动作空间、任务规范、环境以及计算预算。


在这个方向上,一些研究提出了机器人基础模型,能够直接将机器人观测映射到动作,从而在新领域和新机器人上实现零样本或少量样本的泛化。我们将这些模型广泛称为“通用机器人策略”(GRPs),强调其在不同任务、环境和机器人系统中执行低层次视觉运动控制的能力[75, 9, 23, 103, 10, 81, 1, 91, 35, 94, 45]。例如,GNM模型[80]在不同的机器人导航场景中具有泛化能力,RoboCat模型[9]能够在目标驱动任务中处理不同的机器人形态,而RT-X模型[67]可以在五种机器人形态中执行语言驱动的操作。尽管这些模型在构建“通用机器人模型”方面迈出了重要一步,但在多个关键方面仍有限制:通常限制下游用户使用预定义且通常较为局限的输入观测集(如单一摄像头流),缺乏对新领域有效微调的支持;并且这些模型中的大多数尚未向公众开放。


我们设计了一种系统,以更适合下游机器人应用中多样化接口的方式来预训练通用机器人策略。我们的模型核心是一个变换器架构,将任意输入标记(由观测和任务生成)映射为输出标记(然后解码为动作),可以在多样化的机器人和任务数据集上进行训练。该策略无需额外训练即可接受不同的摄像头配置(如工作空间摄像头或腕部摄像头)、控制不同的机器人,并可以通过语言命令或目标图像进行引导——只需更改输入模型的标记。更重要的是,该模型可以通过添加适当的适配器并在小规模的目标领域数据集和可访问的计算预算上进行微调,以适应新的机器人配置、传感器输入、动作空间或形态。


我们的主要贡献是Octo,一种基于transformer的策略,在迄今为止最大的机器人操控数据集上进行预训练:来自Open X-Embodiment数据集的80万条机器人演示。Octo是第一个可以有效微调到新观测和动作空间的GRP,也是第一个完全开源的通用机器人操控策略,包括训练流程、模型检查点和数据。尽管构成Octo的各个组件(transformer主干、支持语言和目标图像规范的模块以及用于建模表达性动作分布的扩散头)已在先前的工作中讨论过,但将这些组件结合为强大的通用机器人策略则是独特且新颖的。


我们通过在4家机构的9个机器人上的广泛实验展示了我们组合的系统在开箱即用的多机器人控制中达到了最新的性能,包括单臂和双臂操作任务,并且Octo可以作为有效的初始策略,用于微调到具有新观测和动作空间的未知配置。在此过程中,我们仔细研究了在预训练GRP时不同设计决策的效果;我们评估了数据分布的选择、模型架构和策略形式如何影响预训练GRP的质量。我们的评估强调了规模和灵活性的实用性:我们最好的模型是在最广泛的数据组合、最少限制性归纳偏置以及能够适应预训练数据中多样行为的策略目标上训练的。


随着本文的发布,我们提供了训练、使用、复现和微调Octo模型所需的所有资源。我们提供了27M和93M参数的预训练Octo模型检查点,这些检查点可以开箱即用地支持多种RGB摄像头输入,并支持语言和目标图像任务规范。我们还提供了在新领域上微调这些模型的脚本,以及完整的预训练流程,包括优化的数据加载器、支持多模态输入的变换器实现以及用于监控训练进度的工具。


II. 相关工作


许多研究使用从机器人收集的大规模轨迹数据集来训练策略,从早期通过自主数据收集扩展策略训练的努力[71, 48, 41, 19, 27, 30]到最近探索结合现代基于变换器的策略和大规模示范数据集的工作[10, 40, 98, 28, 83, 86]。这些研究主要集中于单一的机器人形态,而Octo则在多个机器人形态的数据集上训练策略,从而增加了训练数据集的有效规模,并允许微调适应多种机器人配置。


最近,一些研究着重于拓展机器人策略的泛化能力。多项研究利用多样的非机器人数据或预训练的视觉-语言基础模型,以提升策略在新场景和任务中的泛化性[86, 103, 96, 16, 38, 11, 84, 36, 4, 37, 7, 3, 46, 15, 23]。与Octo更为接近的是近期一些在多个机器人形态数据上训练机器人策略的工作:GNM模型[81, 80]在机器人导航设置中具备泛化能力,而RoboCat[9]和RT-X[67]则控制多个单臂操作机器人。尽管这些模型在策略学习上展现出令人印象深刻的效果,但它们的灵活性存在一个关键问题:通常要求用户遵循预训练时的传感器输入和动作空间,并且不支持适应新的观测和动作空间。此外,这些大型模型尚未公开访问。Octo在多个方面与这些工作有所不同:它在更大且更为多样的机器人数据组合上进行训练,支持通过高效微调适应新的机器人设置,从而适应更广泛的下游应用,并且是完全开源和可复现的。


Octo的设计受到了近期机器人模仿学习和可扩展变换器训练的多个进展的启发,包括使用去噪扩散目标[34]进行动作解码[17, 31, 85],预测“动作块”,即未来动作序列[98, 17, 28],以及模型布局和学习率调度受可扩展视觉变换器训练文献的启发[22, 97]。我们的工作首次在跨机器人形态的通用策略学习中利用了这些方法,结果表明这些方法可以显著提升性能。在评估中,我们通过消融实验评估这些组件的重要性,并在附录E中提供了我们认为(不)重要的因素的更全面列表;我们希望这些发现对未来的通用策略学习研究有所帮助。


训练通用机器人策略的关键成分是机器人训练数据。与可以从网络上抓取的视觉和语言数据不同,规模化地获取机器人数据极具挑战,通常需要在硬件和人力上投入大量资源。目前已有多个大规模的机器人导航和自动驾驶数据集[29, 95, 13, 87, 80, 43, 89]。近年来,也有多项工作致力于构建规模和多样性不断扩大的机器人操作数据集,这些数据集通过脚本和自主策略[19, 41, 42, 12, 71, 30]或人类远程操作[59, 60, 25, 90, 39, 10, 26, 6, 77, 63, 79]收集。Octo基于Open X-Embodiment数据集[67]进行训练,这是一项近期整合了上述多个机器人数据集的努力。Open-X数据集包含大约150万条机器人演示,其中我们筛选出80万条用于Octo训练。我们注意到,RT-X模型[67]使用了更有限的35万条演示数据集,因此据我们所知,Octo是在迄今为止最大规模的机器人操作演示数据集上进行训练的。


III. OCTO模型


在本节中,我们将介绍Octo模型,这是一个开源的通用机器人策略,可以通过微调适应新机器人和新任务,包括新的传感器输入和动作空间。我们将讨论其关键设计决策、训练目标、训练数据集和基础设施。Octo模型的设计注重灵活性和规模化:它支持多种常用的机器人、传感器配置和动作类型,并提供了一种通用且可扩展的方案,可以在大量数据上进行训练。它还支持自然语言指令、目标图像、观测历史和通过扩散解码进行的多模态、分块动作预测[17]。此外,我们特别设计了Octo,使其能够高效地微调到新机器人配置,包括具有不同动作空间和不同摄像头与本体感觉信息组合的机器人。这种设计旨在使Octo成为一个灵活且广泛适用的通用机器人策略,能够应用于各种下游机器人应用和研究项目。


A. 架构


具身大模型学习——OCTO


具身大模型学习——OCTO


变换器主干网络(Transformer Backbone) 和 读出头(Readout Heads) 的工作原理。为了更好地理解这一部分,以下是对这段话的详细解释:


1. 输入被转换为统一的词元序列:


• 输入的数据(如语言指令、目标图像和观察序列)会经过预处理并转换成一个统一的词元(token)序列,这个过程是为了让变换器能够处理不同类型的输入数据。这个转换后的词元序列包括任务词元、观察词元、语言指令等。


2. 变换器处理输入序列:


• 这些转换后的词元序列会被传入一个变换器(Transformer)进行处理。与以前的一些基于变换器的策略类似,Octo 也使用变换器来训练和处理观测序列和动作序列,进行任务决策。


• 变换器的作用是通过自注意力机制(self-attention)来捕捉序列中不同元素之间的关系,生成嵌入表示。


3. 变换器的掩码注意力模式(Masked Attention):


• 掩码模式:在 Octo 模型中,变换器使用 块掩码(block-wise masking) 注意力模式,即 观测词元只能因果性地关注来自相同或更早时间步的词元。这意味着每个观测词元只能参考它自己和之前的观测(而不能向未来的观测或者任务信息看齐)。


• 任务词元的作用:任务词元(如语言指令)可以影响整个序列的理解,指导后续的决策过程。


• 不存在观测值的词元会被掩码掉:如果某些输入缺失(例如没有语言指令),与这些缺失数据相关的词元会被完全掩码掉,避免影响其他正常的计算。


4. 模块化设计的优势:


• 这种设计的模块化结构让模型在微调时具有更大的灵活性。微调过程中,可以轻松地 添加或移除观测值或任务,例如,可以在训练中动态添加新的任务输入,或去除不相关的观测。


5. 读出词元的作用:


• 除了任务词元和观测词元,Octo 中还引入了 可学习的读出词元(readout tokens),这些词元被用来 总结当前的输入信息。读出词元类似于 BERT 中的 [CLS] 词元,它们能够 压缩整个输入序列的信息,并输出一个紧凑的向量表示,表示当前的观测序列的理解。


• 读出词元的工作方式:这些读出词元 只会关注序列中在它之前的观测词元和任务词元,而不会被任何其他词元影响。换句话说,它们只能被动地读取和处理内部嵌入表示,而不直接改变这些表示。


• 作用:这种设计使得读出词元能够汇聚信息,并作为模型输出的依据。


6. 动作头(Action Head):


• 在 读出词元的嵌入表示 上,模型会应用一个 轻量级的动作头(action head),这个动作头负责输出实际的动作预测。这个 动作头 是实现 扩散过程(diffusion process) 的关键,它通过解码器预测一系列连续的动作,而不是单个动作。


• 预测连续动作:这个动作头的输出是一个“组块”(chunk),即一组连续的动作。与传统的单次动作预测不同,这种方式可以更好地处理一系列动作之间的依赖关系,尤其适用于复杂任务(如多步操作的任务)。


• 类似于先前的工作:这种设计与以前的一些基于变换器的工作(例如[98, 17])类似,这些工作中也使用了 动作头 来预测一系列连续的动作


我们的设计允许我们在下游微调期间灵活地向模型添加新的任务、观测输入或动作输出头。当在下游添加新任务、观测值或损失函数时,我们可以完全保留变换器的预训练权重,只根据规格变化的需要添加新的位置嵌入、新的轻量级编码器或新头的参数(见图2底部)。这与之前的架构形成对比,在那些架构中,添加或移除一个图像输入或者改变任务规格将需要重新初始化或重新训练预训练模型的大型组件。


为什么不需要修改预训练的变换器部分


Octo的设计允许你在微调时只对新增的部分进行调整,而不影响预训练好的变换器部分。具体来说,变换器的预训练权重(Transformer的参数)已经通过在大量数据上训练得到了很好的优化,能有效地处理语言指令、目标图像和观测数据等。因此,在下游微调时,变换器的核心部分通常不需要再进行大规模的修改。


通过位置嵌入、轻量级编码器或新头的参数进行调整


• 位置嵌入(Position Embeddings):在Transformer中,输入的tokens(任务、观测等)是有顺序的,因此需要位置嵌入来指示每个token的顺序。在增加新的任务或输入时,可以为新的tokens(如新加的传感器数据、任务描述等)添加新的位置嵌入。这种方式不会影响原有的嵌入,只是在原有结构上增加新的位置标识。


• 轻量级编码器(Lightweight Encoders):对于新增加的输入数据(如新的传感器类型),可以添加新的轻量级编码器来处理这些数据。这个编码器会将新的输入转化为Transformer可以处理的表示,但不会影响原有数据(如原有的视觉输入)的处理过程。


• 新头的参数(New Heads):在增加新的任务或动作时,可以添加新的“头”来进行任务特定的输出。例如,任务输出头负责生成执行动作的策略,目标图像输出头负责根据目标图像生成指令。每个新任务或动作空间的输出都通过添加新的“头”来处理,而不会对预训练变换器的内部表示产生影响。


这种灵活性对于使Octo成为一个真正的“通用型”模型至关重要:由于我们在预训练期间无法涵盖机器人所有可能的传感器和动作配置,因此能够在微调期间对Octo的输入和输出进行调整,使其成为机器人领域的一个多功能工具。之前那些使用标准变换器主干网络或将视觉编码器与多层感知机(MLP)输出头融合的模型设计,锁定了模型所期望输入的类型和顺序。相反,对于Octo而言,切换观测值或任务并不需要重新初始化模型的大部分内容。


具身大模型学习——OCTO


图像说明:架构。左侧:Octo 使用预训练的语言模型对任务描述(绿色)和输入观测(蓝色)进行标记化处理,并使用轻量级 CNN 处理输入观测。顶部:Transformer 主干网络处理任务和观测标记序列,生成读出标记(紫色),然后传递给输出头部以生成动作。底部:Transformer 的块级注意力结构使我们能够在微调过程中添加或删除输入和输出:例如,我们可以添加新的观测(蓝色,虚线)或动作空间(紫色,虚线),而无需修改任何预训练的参数。


Octo 采用了一种灵活的架构,使得在微调(finetuning)过程中,我们可以根据任务需要添加新的输入数据(比如新的观测信息)或新的输出空间(比如新的动作类型),而不需要改变或重新训练原先已经训练好的部分(即预训练的参数)。


具体来说,Octo 使用了 Transformer 架构中的“块级注意力”结构,这意味着模型的不同部分(比如任务描述、输入观测、输出动作等)是相对独立处理的。这样,在微调过程中,如果需要添加额外的输入(比如新的感知数据)或改变动作空间(比如控制新的机器人部件),我们可以简单地调整输入和输出的形式,而不必重新训练模型的所有部分,尤其是那些已经预训练好的部分。


"块级注意力"(block-wise attention)结构是指在 Transformer 架构中,将输入数据划分为多个“块”,并在每个块内独立地进行注意力计算的机制。


在传统的 Transformer 模型中,所有的输入数据(如词汇、图像特征等)通常都被并行处理,模型的每一层都会计算每一对输入之间的注意力。这种计算方式在处理大规模输入数据时会非常计算密集,尤其是在需要处理非常长的序列或大量的输入时。


"块级注意力"结构则通过将输入数据分成多个较小的“块”来减少计算量。在这种结构中,模型只在每个“块”内部进行注意力计算,而不是在整个输入序列上进行全局计算。这样可以大幅提高计算效率,尤其是对于较大的输入数据或更长的序列,计算成本会更低。


具体来说:


块(Block):输入数据(如图像特征、语言描述等)被分成多个小块,每个块可以是一个特定的区域或一个独立的输入部分。


注意力计算:模型在每个块内计算注意力,即只考虑块内的元素之间的关系。这样可以避免全局的计算量,同时保留块内的信息。


对于 Octo 的架构来说,这种块级注意力的好处是,它可以在微调(finetuning)时轻松地添加新的输入(例如新的观测数据或动作空间),而无需重新计算整个输入的全局注意力关系,从而提高模型的灵活性和效率。


举个例子:


假设你有一个机器人任务,其中有图像输入和语言描述作为输入。传统的 Transformer 会将所有的输入图像和语言信息结合在一起进行全局的注意力计算。而如果使用块级注意力,输入图像可能会被分成多个区域(如每个对象或每个视角是一个“块”),然后在每个区域内进行独立的注意力计算。这样,模型在微调时只需要关注新增的“块”,而不是重新计算所有输入的注意力。


任务和观测标记器:我们通过特定模态的标记器将任务定义(例如,语言指令ℓ和目标图像g)和观测o(例如,腕部和第三人称摄像头流)转换为通用的“标记化”格式(见图2,左):


语言输入经过标记化,然后通过一个预训练的transformer生成语言嵌入标记序列。我们使用了t5-base(111M)模型[74]。


图像观测和目标通过一个浅卷积层处理后分割为一系列平坦化的图像块[22]。


我们通过为任务和观测标记添加可学习的位置嵌入p,并按顺序排列TT, To,1, To,2, ...来组成transformer的输入序列。


B. Octo 实现新领域的数据高效学习


我们在表 I 中报告了 Octo 在新领域的高效微调结果。我们发现,相比从头开始训练或使用预训练的 VC-1 权重,微调 Octo 能产生更好的策略。平均而言,在六个评估设置下(详细信息见附录 F),Octo 的表现比下一个最佳基准高出 52%。值得注意的是,我们在所有评估任务中使用了相同的微调配置和超参数(见 III-C 节),这使得该配置成为一个很好的默认设置。


具身大模型学习——OCTO


微调评估:Octo 支持数据高效的微调,能够适应新领域,并且在性能上优于从头开始训练和最先进的预训练视觉表示。每个领域使用约 100 个目标演示和相同的微调超参数。在每个领域中,成功率是通过 20 次试验的平均值来计算的。*:新增观察输入(力-扭矩本体感知)。†:新增动作空间(关节位置控制)。


这些结果也突出了 Octo 适应新观察(例如“Berkeley Insertion”中的力矩输入)、新动作空间(例如“Berkeley Pick-Up”中的关节位置控制)和新机器人形态(例如“Berkeley Coke”和“Berkeley Bimanual”)的能力。这使得 Octo 可以应用于广泛的单臂和双臂机器人操作问题,超越了单一相机输入和末端执行器位置控制的限制。


C. 训练目标


具身大模型学习——OCTO


在微调过程中,为什么使用相同的扩散训练目标并更新整个模型?


在微调过程中,Octo模型采用相同的扩散训练目标,并且在所有微调实验中都更新整个模型(包括扩散解码头和Transformer主干)。这相较于“冻结预训练参数子集”的方式(即只更新某些部分、冻结其他部分的参数)有以下优点:


1. 保留预训练知识的同时适应新任务:


扩散模型和Transformer部分的预训练权重已经通过大量的训练数据获得了有效的知识。在微调时,通过更新整个模型,可以确保新任务的特殊要求能够被Transformer和扩散头同时理解和适应。这样可以更好地保留预训练中学到的知识,同时快速适应新的数据。


2. 增强模型的适应性:


冻结部分参数会限制模型的学习能力,因为模型无法调整已经冻结的部分来更好地适应新任务。通过更新整个模型,Octo可以在微调过程中调整所有参数,使其对新任务的适应性更强,从而提高微调的效率和效果。


3. 更好的协调与优化:


整个模型的微调可以确保不同模块(如Transformer部分和扩散解码头)之间的协调更加紧密。通过同步更新模型的所有部分,可以使得不同模块的学习更加一致,从而提升最终的性能。特别是对于多模态任务,所有模块的调整对生成高质量的动作至关重要。


“余弦衰减的学习率”和“线性预热”是两种常见的学习率调度策略,用于优化训练过程,尤其是在深度学习中。这两种策略通过调整学习率来加速收敛并避免训练中的不稳定性。以下是这两个概念的详细解释:


1. 余弦衰减的学习率(Cosine Annealing Learning Rate)


余弦衰减是一种逐步降低学习率的方法,它通过余弦函数使得学习率在训练过程中逐渐减小。这种方法的关键特点是,在训练初期,学习率从较大的值开始,随着训练的进行,学习率按余弦函数逐步减少,从而实现较为平滑的衰减。


具身大模型学习——OCTO


优点:


• 平稳衰减:余弦衰减使得学习率在训练过程中减少得更加平滑,避免了某些突然的、剧烈的变化,有助于稳定训练过程。


• 早期探索,后期收敛:训练的初期,较大的学习率有助于模型探索更大的参数空间,而在后期,较小的学习率可以帮助模型细化参数,达到更好的局部最优解。


2. 线性预热(Linear Warm-up)


线性预热是另一种常用的学习率策略,通常用于训练的初期阶段。在训练的前几步,学习率从一个非常小的值线性增加,逐渐达到设定的初始学习率。这样做的目的是防止训练开始时学习率过大,导致模型的权重更新不稳定,甚至造成梯度爆炸。


具身大模型学习——OCTO


优点:


• 避免过大梯度:在训练开始时,使用较小的学习率可以避免模型参数的剧烈波动,有助于保持训练的稳定性。


• 平滑启动:通过逐步增加学习率,模型在训练初期能够更好地适应训练数据,避免了突然跳跃到较大的步长。


3. 结合余弦衰减和线性预热


在许多现代深度学习方法中,通常会将“线性预热”和“余弦衰减”结合使用。具体来说:


1.线性预热:首先在训练的初期,学习率会逐渐从一个较小的值增加到设定的最大学习率。


2.余弦衰减:一旦线性预热结束,学习率就开始根据余弦函数平滑衰减,直到训练结束。


这种组合策略的优点是,它结合了两种策略的优势:通过线性预热,模型能够稳定地启动,而通过余弦衰减,模型能够在训练后期进行细化,避免过拟合并且提升收敛性。


这两种策略结合起来使用时,可以确保训练过程既稳定又高效,有助于模型更好地学习并找到合适的解。


D. 训练细节


我们训练了两种模型变体:Octo-Small,它的transformer主干大小类似于ViT-S;以及Octo-Base,它的transformer主干大小类似于ViT-B [22]。


我们使用AdamW优化器[51],并采用逆平方根衰减学习率调度[97],权重衰减为0.1,梯度裁剪为1.0。ViT-B模型在TPU v4-128集群上训练了300k步,批次大小为2048,训练时间为14小时。在单个NVIDIA A5000 GPU(24GB VRAM)上进行相同模型的微调大约需要5小时,并且可以通过多GPU训练加速。


我们训练时使用2帧的观察历史;在初步实验中,我们发现超过第一帧的额外帧效果明显递减。我们使用事后目标重新标签[2],即从轨迹的未来状态中均匀选择一个状态,将其作为目标图像,类似于先前的工作[54, 90, 81, 77, 63]。在训练过程中,我们应用常见的图像数据增强,并随机将语言指令或目标图像置零,以便Octo可以根据语言指令或目标图像进行条件训练。对于没有语言注释的数据集,我们始终使用目标图像条件化。这使得我们的模型能够主要从自监督的视觉观察中学习控制,并减少了对语言注释的依赖,类似于多上下文模仿学习的先前工作[54, 62, 61, 63]。有关超参数选择的更多细节,请参见附录D。


E. 模型检查点与代码


我们开源了训练、微调和运行模型所需的所有资源(请访问 https://octo-models.github.io):


• 预训练的Octo检查点:Octo-Small(27M参数)和Octo-Base(93M参数)。


• 用于Octo模型的微调脚本,基于JAX。


• Octo模型在Open X-Embodiment数据集上预训练的模型管道,基于JAX。


• 独立的数据加载器,支持Open X-Embodiment数据,兼容JAX和PyTorch。


我们在附录B中提供了一个简单的示例,展示如何加载和运行预训练的Octo模型。


IV. 实验


我们的实验提供了对 Octo 的实证分析,评估其作为一个通用机器人基础模型的能力,主要从以下几个方面进行测试:


1) Octo 能否控制多种机器人设备,并且能够解决语言和目标任务?


2) Octo 的权重是否能够作为一个良好的初始化,帮助在新任务和机器人上进行数据高效的微调?与从头训练和常用的预训练表示相比,Octo 是否能有所改进?


3) 在 Octo 的设计中,哪些决策对构建通用机器人策略最为重要?


具身大模型学习——OCTO


图4:评估任务。我们在4个机构的9个真实机器人设置上评估了Octo。我们的评估涵盖了多种物体交互(例如,“WidowX BridgeV2”)、长期任务(例如,“Stanford Coffee”)和精确操作(例如,“Berkeley Peg Insertion”)。我们评估了Octo在预训练数据环境中“开箱即用”控制机器人,并能有效地在小型目标域数据集上微调以适应新任务和新环境的能力。我们还测试了在新增观测(例如,“Berkeley Peg Insertion”的力矩输入)、动作空间(例如,“Berkeley Pick-Up”和“Berkeley Bimanual”的关节位置控制)和新的机器人构型(例如,“Berkeley Bimanual”和“Berkeley Coke”)下的微调能力。


评估设置: 我们在 4 所机构的 9 种机器人学习设置中评估了 Octo 的能力(见图 4)。我们测试了 Octo 控制不同机器人“零-shot”的能力,包括语言任务和目标图像任务,使用的机器人设置与预训练数据匹配,其中所有机器人都使用 delta 末端执行器控制操作,并且观测空间为 RGB 图像。我们还评估了 Octo 在新环境和任务上进行数据高效微调的能力,包括新观测(“Berkeley Insertion”中的力矩输入)、新动作空间(“Berkeley Pick-Up”中的关节位置控制)以及新机器人设备(“Berkeley Coke”和“Berkeley Bimanual”)。每个微调设置使用约 100 条领域内的示范,并在不到 5 小时的时间内在 NVIDIA A5000 GPU 上进行微调,所有设置使用相同的超参数(见附录 D)。我们的评估任务测试了 Octo 与各种物体的交互能力(例如,“WidowX BridgeV2”)、解决长时间跨度任务的能力(例如,“Stanford Coffee”)以及执行精确操作的能力(例如,“Berkeley Insertion”)。有关每个评估设置的更多细节,请参见附录 F。


比较: 我们将 Octo 控制多个机器人“零-shot”的能力与最好的公开通用机器人策略 RT-1-X [67] 进行了比较,后者使用发布的检查点。与 Octo 类似,RT-1-X 也是在 Open X-Embodiment 机器人数据集上预训练的,并旨在实现多机器人“零-shot”控制,因此为 Octo 提供了一个自然的比较基准。我们还将 Octo 的零-shot 能力与 RT-2-X 进行了比较,RT-2-X 是一个 550 亿参数的视觉-语言模型,在 Open X-Embodiment 数据集上进行微调以生成机器人动作。RT-1-X 和 RT-2-X 模型 [67] 是在 350K 集数的数据上训练的(相比之下,Octo 使用了 800k 集数的数据)。我们进一步比较了 Octo 作为策略初始化在数据高效微调中的表现,分别与两种常见方法进行了比较:(1)从头训练目标领域示范数据,(2)使用预训练的视觉表示。虽然许多先前的工作提出了其他用于模仿微调的预训练方案 [25, 24, 26],但据我们所知,没有现有方法提供过一个已被证明能够成功微调到新观测和动作空间的预训练策略。然而,像 VC-1 [56] 这样的预训练视觉表示已经被这样使用,因此我们也将这些方法作为比较基准之一。


对于微调,我们发现直接从头训练我们的大型变换器架构在小数据集上容易过拟合。相反,我们通过采用许多先前工作中使用的经典策略架构取得了更好的结果:使用 ResNet 视觉编码器与 FiLM [70] 语言条件相结合,再加上一个小型变换器动作解码器,使用扩散目标进行训练,类似于 [10, 98, 17, 55]。我们该架构的实例化版本包含 2800 万个参数(类似于 RT-1 [10])。我们将其作为从头训练的基准(“ResNet+Transformer Scratch”)。我们还比较了采用 Majumdar 等人 [57] 方法的预训练视觉表示。


这段话描述了 Octo 在微调过程中如何选择架构和训练方法,特别是针对小数据集微调时如何避免过拟合。这里的关键点是:


1.大型变换器架构容易过拟合:


Octo 使用了一个大型的变换器(Transformer)架构,但在微调时,尤其是在数据量较小的情况下,直接从头训练(即从随机初始化开始训练)会导致模型容易过拟合。过拟合指的是模型在训练数据上表现很好,但在测试数据上效果差,因为它记住了训练数据中的噪声或不常见的模式,而不是学到一般的规律。


2.经典策略架构:


为了解决过拟合问题,Octo团队改用了一个经典的架构,这个架构是许多前期工作中使用的组合模型:


○ ResNet视觉编码器: ResNet是一种经典的深度卷积神经网络架构,通常用于图像处理任务。它的优势在于能够有效处理较深的网络结构,减少梯度消失的问题,适合处理图像数据。


○ FiLM(Feature-wise Linear Modulation): 这是一个用于结合语言和视觉输入的技术。FiLM能够通过对视觉特征进行调整,以响应语言条件,从而使视觉模型能够根据语言信息进行特定的调整。简而言之,FiLM可以通过动态调整视觉信息的方式使模型能够理解和处理语言指令。


○ 小型变换器动作解码器: 这部分是一个小型的变换器网络,用来解码(预测)机器人所需执行的动作。与大型变换器相比,这个小型解码器可以在数据较少的情况下,减少过拟合并提升模型的效果。


○ 扩散目标进行训练: 扩散模型用于预测连续的多模态动作分布,这意味着它通过多步去噪的方式来生成动作,而不是直接使用传统的回归方法(如均方误差)。这种方法可以帮助生成更平滑、适应多模态环境的动作序列。


3.实例化版本:


该架构的实例化版本包含 2800 万个参数,类似于之前的模型 RT-1(一个大规模的机器人控制模型)。该模型被用作“从头训练”的基准(标记为“ResNet+Transformer Scratch”),并在微调时进行了比较。


4.与其他方法的比较:


文章还提到,Octo团队将上述架构与 Majumdar 等人的方法进行比较,后者使用了预训练的视觉表示。预训练的视觉表示指的是使用已经在大规模数据集上训练好的视觉模型(例如ResNet)进行初始化,而不是从零开始训练。这通常可以帮助模型更好地从少量的数据中学习,因为它已经掌握了某些通用的视觉特征。


详细解释:


• ResNet + FiLM + 小型变换器: 这个架构结合了视觉处理(ResNet)、语言条件(FiLM)和一个小型解码器(变换器),它的优势在于能够在小数据集上进行有效的训练,同时避免过拟合。ResNet负责从图像中提取特征,FiLM则确保语言信息影响视觉处理,变换器解码器将这些信息转化为具体的动作输出。


• 扩散目标: 使用扩散模型(diffusion model)作为训练目标,意味着每次生成动作时,不是直接预测一个动作,而是通过一个去噪过程生成一个连续的动作分布,这样能够更好地捕捉到动作的多样性。


• 训练策略: 通过这种组合架构,模型能够在小数据集上进行有效训练,避免了过拟合的问题,并且借助扩散目标对动作进行更精细的调节。


A. Octo 控制多个机器人“零-shot”能力


具身大模型学习——OCTO


我们在图 5 中比较了 Octo、RT-1-X 和 RT-2-X 的零-shot 操作能力。我们在多个任务上进行了评估,这些任务从预训练数据集中选取,包括捡放物体、用布擦桌子以及开关抽屉。对于每个机器人,我们从相应的 OXE 数据集中选择了两个语言任务,并在每个任务上进行了 10 次试验,初始条件不同(详细信息见附录 F)。所选任务来自预训练数据集中的“分布内”任务,但评估要求方法能够泛化到新的物体位置、照明条件、背景和干扰物体。虽然所有方法在预训练环境中的表现都还算合理,但我们发现 Octo 的平均成功率比 RT-1-X(35M 参数)高 29%。在 WidowX 和 RT-1 机器人评估中,我们还将 Octo 与 RT-2-X(550 亿参数)进行了比较,发现 Octo 的表现相似。


此外,虽然 RT-1-X 和 RT-2-X 仅支持基于语言指令的条件设置,但 Octo 还支持基于目标图像的条件设置。我们在 WidowX 任务上对模型进行了目标图像条件设置的评估,结果发现 Octo 在此设置下的成功率比使用语言条件时高出 25%。这可能是因为目标图像提供了更多有关如何完成任务的信息。在 BridgeV2 领域,我们对零-shot 能力进行了细致的分析(见表 VII),测量了在数据集中看到的设置下的表现,以及在新环境、新场景和新技能下的表现。尽管 Octo 在新物体上的成功率很高,但在新场景中的零-shot 性能略有下降,并且对于像翻转或精确插入等新行为,性能降幅较大。


B. Octo 实现新领域的数据高效学习


具身大模型学习——OCTO


我们在表 I 中报告了 Octo 在新领域的高效微调结果。我们发现,相比从头开始训练或使用预训练的 VC-1 权重,微调 Octo 能产生更好的策略。平均而言,在六个评估设置下(详细信息见附录 F),Octo 的表现比下一个最佳基准高出 52%。值得注意的是,我们在所有评估任务中使用了相同的微调配置和超参数(见 III-C 节),这使得该配置成为一个很好的默认设置。


这些结果也突出了 Octo 适应新观察(例如“Berkeley Insertion”中的力矩输入)、新动作空间(例如“Berkeley Pick-Up”中的关节位置控制)和新机器人形态(例如“Berkeley Coke”和“Berkeley Bimanual”)的能力。这使得 Octo 可以应用于广泛的单臂和双臂机器人操作问题,超越了单一相机输入和末端执行器位置控制的限制。


C. 通用机器人策略训练的设计决策


我们已经展示了 Octo 作为零-shot 多机器人控制器和策略微调初始化器的有效性。接下来,我们分析不同设计决策对 Octo 策略性能的影响。具体来说,我们重点关注以下几个方面:(1)模型架构,(2)训练数据,(3)训练目标,以及(4)模型规模。除非特别说明,我们所有的消融实验都在 Octo-Small 模型上进行,因为我们的计算预算有限。


模型架构:以往的基于变换器的策略设计通常使用大型 ResNet 风格 [32] 编码器来编码输入图像,并将生成的图像特征与较小的变换器融合 [10, 67, 81, 17, 98, 61, 83]。而我们选择了一个“变换器优先”的架构,该架构使用非常浅层的 CNN patch 编码器,并将大部分参数和浮点运算集中在变换器骨干网络中,类似于标准的视觉变换器架构 [22]。在表 II 中,我们展示了这种可扩展的架构在使用全量 Open X-Embodiment 数据混合训练时,显著提升了性能。重要的是,我们发现基于 ResNet 的架构在小型数据集上的表现优于 ViT,例如在我们的“从头开始”对比实验中,强调了大型变换器策略在多样化数据集上的可扩展训练优势。


训练数据:Octo 使用迄今为止最为多样化的跨机器人数据集进行训练,这是一个由 25 个数据集混合而成的数据集,数据集经过我们手动挑选自 Open X-Embodiment 数据集 [67](见 III-B 节)。我们通过与仅使用 RT-X 模型训练时所用的 11 个数据集混合,和只使用目标机器人领域数据的基准模型进行对比,来消融这种训练混合的影响。在表 II 中,我们显示了随着训练数据集数量的增加,Octo 的性能提高。这表明,扩大数据混合,甚至包括更多的数据集,可能会进一步提高策略性能。我们将在未来的工作中进一步研究这个问题,并对数据策划的最佳实践进行更为深入的探讨。


训练目标:我们将 Octo 的扩散解码训练目标(见 III-C 节)与先前工作中的常见替代方案进行比较:简单的 MSE 损失 [8, 47] 和离散化动作的交叉熵损失 [10, 103]。在表 II 中,我们发现 Octo 的扩散训练目标显著提高了性能。这一改进可能是因为扩散头可以建模多模态动作分布(与 MSE 头不同),同时保持连续动作的精度(与离散头不同)。在定性方面,该策略的行为比 MSE 训练的策略更果断,比使用离散化动作训练的策略更精确。


主要讨论了 Octo 模型在训练过程中的 目标函数(training objective),并与一些常见的替代方案进行了比较,尤其是 均方误差损失(MSE) 和 离散化动作的交叉熵损失。通过对比,Octo的扩散训练目标显著提高了性能,并且在行为表现上也有更好的定性结果。


1. 训练目标的比较:


Octo 的扩散解码训练目标:扩散解码器(diffusion decoder)是一种基于概率的生成模型,它通过逐步优化生成一个连续的动作序列。在 Octo 中,扩散训练目标能够建模复杂的动作分布,而不是简单地对每个动作预测一个固定值或离散的类别。这种训练目标与传统的 MSE(均方误差)损失 和 离散化动作的交叉熵损失 有显著的不同。


MSE 损失:均方误差损失通常用于回归任务,目标是最小化预测值和实际值之间的平方差。在动作预测任务中,MSE 训练目标会使得模型尝试预测连续动作的“精确”值,但它难以捕捉到动作空间中的多样性和不确定性,通常会导致过度拟合到数据中的平均趋势。


离散化动作的交叉熵损失:交叉熵损失通常用于分类任务,特别是当动作被离散化为多个类别时。这种方法把连续动作空间离散化为多个动作类别,通过计算模型预测的类别与真实类别之间的交叉熵来训练模型。离散化可以处理更为离散的动作输出,但它失去了连续动作空间的精度,且在动作选择上不如直接回归(如MSE)精确。


2. 扩散训练目标的优势:


多模态动作分布:Octo的扩散解码训练目标能够捕捉到 多模态(multimodal)动作分布。这意味着模型不仅能够预测一个确定的动作,而是可以生成多个可能的动作方案,并且能够评估每个动作的相对概率。这种能力使得模型在面对具有多种潜在动作选择的任务时,可以更灵活地选择合适的行为,而不仅仅是选择一个固定的动作。


保持连续动作的精度:与 MSE 损失不同,扩散头在建模动作时可以保持 连续性(continuity),即能够处理高精度的连续动作值,而不仅仅是离散化后的动作选择。这对于机器人控制等任务非常重要,因为在实际场景中,连续动作的细微调整对于完成任务至关重要。


相较于离散化动作的精度:虽然离散化动作的交叉熵损失能够在一些任务中提供明确的离散选择,但它失去了在动作空间中的细腻度,因为模型的输出被限制为离散类别。这种方法在精度上不如扩散训练目标,因为扩散方法可以生成更精细的连续动作序列,避免了离散化带来的精度损失。


3. 定性行为表现的提升:


行为决断力更强:与基于 MSE 损失训练的模型相比,Octo 在使用扩散训练目标时,表现出了 更果断的行为。这意味着模型在面对决策时能够做出更清晰、更快速的响应,而不会被不必要的细节或模糊的预测所干扰。


精确性更高:与使用离散化动作训练的模型相比,Octo 的行为表现 更加精确。离散化动作模型可能在做出决策时会遇到不必要的模糊性(例如,选择一个较大的动作区间而不是精确的动作值),而扩散训练目标通过生成连续的动作分布,使得模型在控制任务中能够做出更精确的动作选择。


模型规模:我们比较了三种不同规模的 Octo 模型,按照常见视觉变换器模型的规模梯度 [97]:Octo-Tiny(10M),Octo-Small(27M),和 Octo-Base(93M)。在图 6 中,我们展示了随着模型规模增大,策略的零-shot 性能也相应提升。我们发现,Base 模型在初始场景配置上的鲁棒性优于 Small 模型,并且较少出现早期抓取的尝试,表明较大的模型具有更好的视觉场景感知能力。


V. 讨论与未来工作


我们介绍了 Octo,一种基于大型变换器的策略模型,预训练于迄今为止最大的机器人操作数据集——80万条机器人轨迹。我们展示了 Octo 能够开箱即用地解决多种任务,并且展示了 Octo 的组合设计如何使其能够微调到新的输入和动作空间,从而使 Octo 成为广泛机器人控制问题的多功能初始化器。除了模型本身,我们还发布了完整的训练和微调代码,以及一些工具,使得在大型机器人数据集上进行训练变得更加容易。


尽管 Octo 在零-shot 和微调评估中都表现出了强大的性能,但我们发现当前的模型仍然存在一些不足之处,这些不足在很大程度上归因于训练数据的特性。首先,我们发现当前的 Octo 模型在处理手腕相机信息时存在困难。在许多微调实验中,使用第三人称相机而不是结合使用第三人称和手腕相机时,效果更好。此外,我们还注意到语言条件化策略和目标条件化策略的表现差异很大。在这两种情况下,训练数据中缺乏相应模态的信息可能是导致这种差异的原因:只有 27% 的数据包含手腕相机信息,而只有 56% 的预训练数据包含语言注释。:


这段话的意思是,Octo 模型在语言条件化策略和目标条件化策略上的表现差异较大。具体来说:


1.语言条件化策略:指的是模型根据语言指令(如“抓住杯子”)来执行任务。


2.目标条件化策略:指的是模型根据目标图像(例如图像中的目标物品)来执行任务。


在实验中,Octo 模型在这两种条件下的表现有差异,推测这可能是因为训练数据中缺少相关的信息。例如:


• 手腕相机信息:只有 27% 的训练数据包含手腕相机(机器人臂上的摄像头)的数据。这意味着模型在处理需要依赖手腕相机数据的任务时,可能效果不佳,因为这些信息不足。


• 语言注释:仅有 56% 的预训练数据包含语言注释。这意味着模型在学习语言指令时,缺少了更多语言信息的训练数据,可能导致其语言理解能力不足。


换句话说,由于训练数据中某些关键信息(如手腕相机图像和语言注释)的缺乏,Octo 在这两种策略上的表现可能不如预期


扩展用于训练 Octo 的数据集是一个自然的改进方向。由于 Open X-Embodiment 数据集由最优的机器人演示组成,当前的模型通过模仿学习进行训练;未来的工作可能会考虑从次优或在线交互数据中学习,这需要采用不同的目标。此外,虽然我们仅对单臂和双臂操作机器人进行了训练和评估,但扩展到更广泛的机器人类型,尤其是执行导航或移动操作的机器人,将是一个具有巨大潜力的方向。


虽然 Octo 代表了朝着构建能够在不同机器人设置中开箱即用的通用机器人策略迈出的重要一步,但仍然需要改进模型,包括更好的语言条件化、改进对手腕相机的支持以及融入超出最优演示的数据。我们希望 Octo 能为研究人员和实践者提供一个简单的起点,使他们能够访问更大的机器人数据集,并利用预训练的机器人模型高效地学习新任务并实现广泛的泛化能力。


Octo 代码训练与微调指令


Octo 预训练


为了复现在 80 万机器人轨迹上的 Octo 预训练,可以运行以下命令:


bash


复制代码


python scripts/train.py --config scripts/configs/octo_pretrain_config.py:<size> --name=octo --config.dataset_kwargs.oxe_kwargs.data_dir=... --config.dataset_kwargs.oxe_kwargs.data_mix=oxe_magic_soup ...


为了从 Open X-Embodiment 数据集 下载预训练数据集,需要安装 rlds_dataset_mod 包,并运行 prepare_open_x.sh 脚本。预处理后的数据集总大小约为 1.2TB。


我们使用 TPUv4-128 pod 进行预训练,Octo-S 模型的训练时间为 8 小时,Octo-B 模型的训练时间为 14 小时。


解释:


• Octo 预训练:这是对 Octo 模型的预训练步骤,使用了一个包含约 80 万条机器人轨迹的大型数据集。预训练的数据集来源于 Open X-Embodiment 数据集,总共大小达到 1.2TB,因此需要有足够的存储空间。


• TPUv4-128 pod:这是 Google 的 TPU 集群硬件设施,用于加速训练过程。通过这样的硬件加速,Octo 可以在相对较短的时间内完成预训练。


• 命令行说明:上述命令通过指定配置文件和数据目录来启动训练,并且可以通过 <size> 参数来调整模型的规模(如 Octo-S 和 Octo-B)。该命令还指定了数据混合策略 oxe_magic_soup。


Octo 微调


我们提供了一个最简示例来进行带有新观察和新动作空间的微调。


我们还提供了一个更高级的微调脚本,可以通过配置文件更改超参数,并记录微调过程中的指标。要运行高级微调,请使用以下命令:


bash


复制代码


python scripts/finetune.py --config.pretrained_path=hf://rail-berkeley/octo-small-1.5


我们提供了三种微调模式,具体取决于模型的哪些部分保持冻结状态:


• head_only:仅微调输出头部分。


• head_mlp_only:仅微调输出头和 MLP(多层感知器)部分。


• full:微调整个模型。


此外,还可以指定微调任务的类型:


• image_conditioned:仅根据图像输入进行微调。


• language_conditioned:仅根据语言输入进行微调。


• multimodal:同时使用图像和语言输入进行微调。


例如,要使用仅图像输入来微调整个变换器模型,可以使用以下命令:


bash


复制代码


--config=finetune_config.py:full,image_conditioned


解释:


• Octo 微调:在预训练的基础上,Octo 模型可以根据新的任务或输入进行微调。此处提供了两种微调脚本:一个是简化版,适合快速实验;另一个是高级版,支持更多自定义选项和超参数调整。


• 微调模式:不同的微调模式可以控制哪些部分的模型是“冻结”不训练的,从而节省计算资源或加速训练。例如,仅微调输出头可以专注于学习新的任务,而保持核心变换器不变。


• 任务类型:根据任务需求,可以选择仅基于图像、语言或多模态输入进行微调。这让 Octo 能够适应不同的任务环境。


Octo 评估


加载和运行训练好的 Octo 模型非常简单,代码如下:


python


复制代码


from octo.model import OctoModel


model = OctoModel.load_pretrained("hf://rail-berkeley/octo-small-1.5")


task = model.create_tasks(texts=["pick up the spoon"])


action = model.sample_actions(observation, task, rng=jax.random.PRNGKey(0))


我们提供了在模拟 Gym 环境和实际的 WidowX 机器人 上评估 Octo 的示例。


要在自己的环境中进行评估,只需将其封装成 Gym 接口,并按照 Eval Env README 中的说明操作即可。


解释:


• Octo 评估:一旦 Octo 模型被训练或微调完成,可以加载该模型并在特定任务上进行评估。在上述示例中,使用 OctoModel.load_pretrained 来加载一个预训练的模型(例如 "hf://rail-berkeley/octo-small-1.5"),然后创建任务并生成动作序列。


• 模拟和实际环境评估:我们提供了在 Gym 环境 中进行评估的示例,也可以在实际机器人(如 WidowX 机器人)上进行测试。Gym 是一个用于开发和评估强化学习算法的工具包,可以将实际机器人环境包装成 Gym 环境,方便与模型进行交互。


• 评估环境封装:如果你想在自己的环境中进行评估,只需要按照 Eval Env README 的说明,封装你的环境并与模型进行对接。


文章来自于微信公众号“求知AI”,作者“ 木木JS”


具身大模型学习——OCTO

关键词: 具身智能 , AI , OCTO , 人工智能
AITNT-国内领先的一站式人工智能新闻资讯网站
AITNT资源拓展
根据文章内容,系统为您匹配了更有价值的资源信息。内容由AI生成,仅供参考
1
AI数据分析

【开源免费】DeepBI是一款AI原生的数据分析平台。DeepBI充分利用大语言模型的能力来探索、查询、可视化和共享来自任何数据源的数据。用户可以使用DeepBI洞察数据并做出数据驱动的决策。

项目地址:https://github.com/DeepInsight-AI/DeepBI?tab=readme-ov-file

本地安装:https://www.deepbi.com/

【开源免费airda(Air Data Agent)是面向数据分析的AI智能体,能够理解数据开发和数据分析需求、根据用户需要让数据可视化。

项目地址:https://github.com/hitsz-ids/airda

2
RAG

【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。

项目地址:https://github.com/microsoft/graphrag

【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。

项目地址:https://github.com/langgenius/dify


【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。

项目地址:https://github.com/infiniflow/ragflow/tree/main


【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目

项目地址:https://github.com/phidatahq/phidata


【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。

项目地址:https://github.com/TaskingAI/TaskingAI

3
微调

【开源免费】XTuner 是一个高效、灵活、全能的轻量化大模型微调工具库。它帮助开发者提供一个简单易用的平台,可以对大语言模型(LLM)和多模态图文模型(VLM)进行预训练和轻量级微调。XTuner 支持多种微调算法,如 QLoRA、LoRA 和全量参数微调。

项目地址:https://github.com/InternLM/xtuner