从噪声到动作:Diffusion Policy 如何改变机器人学习?


引言

在机器人手臂操作方面一直存在诸多挑战。我们熟悉的工业场景中的组装机械臂,往往依赖于写死的程序指令进行控制,具有高度规范化与高精度的特点。而当机械臂需要在复杂、多变的环境中与外界进行交互时,就不得不涉及学习策略、协同性以及时间序列决策等难题。如今,在工业高精度场景下的机械臂已日渐成熟,精度也越来越高,但在更复杂的任务中,依然存在效率低下、动作连贯性不足以及学习策略不佳等问题(论文中对此有具体例子)。

针对这些问题,Diffusion Policy 框架提出了一种全新的解决思路:它将机器人动作生成建模为条件扩散过程,在逐步去噪中得到连贯、合理的动作序列,从而有效改善动作的多模态建模能力、时序一致性和训练稳定性。实验证明,Diffusion Policy 在多项机器人任务中均显著超越了现有方法,展现出更强的学习能力与表现力。

Diffusion 驱动下的机械手 展现了极强的学习能力与连贯性,而在 CoRL 座谈会 上,研究者们对其讨论也非常热烈。读完论文后,我也不得不感叹一句:Diffusion Policy is SOTA!

1. 什么是 Diffusion Policy?


Diffusion Policy 是一种基于 条件扩散模型(Conditional Denoising Diffusion Process)的机器人视觉-运动策略学习方法。

Diffusion Policy其实解决的是一个机器人输出的问题,过往的很多工作大家都注重在解决输入的问题,但机器人最终要执行,我们的工作就在于解决机器人动作和输出的问题。更确切地说,我们的创新聚焦于机器人的动作端而非输入端,在输入端使用的是非常普通的东西。尽管输入端有很多可以提高的地方,但机器人学习方法必须注重输出端,先前的算法在输出端的表现都不够好。因此,无论输入端有多么创新,如果输出端表现不佳,就像"茶壶煮饺子倒不出"一样,将无法发挥潜力。
它的基本思想是:

  • 不直接预测动作,而是从随机噪声出发,经过多步去噪,逐渐生成符合任务要求的动作序列;

  • 使用视觉观测作为条件,保证生成的动作与环境状态相匹配;

  • 生成的是高维动作序列,而非单步动作,能确保动作的时序一致性和连贯性。

它的优势主要体现在:

  • 表达多模态分布:可以学到不同的合理操作方式;

  • 适配高维动作空间:能生成完整的动作序列,而不是单步预测;

  • 训练稳定:避免了能量模型训练中的负采样问题。


2. 与传统方法区别

2.1 解决了机器人Multi-Modal的问题

简单理解,现实世界中解决某一特定任务的方式是多样的,而不是唯一的。但神经网络预测只能给出单一的方式,无法应对可能有多种方式的任务情况。

什么是机器人Multi-Moda问题,假设我现在在开车,前面有一棵树。比如说,我雇佣了100个司机来解决这个问题。在这种情况下,有可能有50个司机选择往左拐,绕过树的左边,还有50个司机选择从树的右边绕过去。在这种情况下,往左绕和往右绕都是完全合理的。然而,当我们将所有这些解决方案合并为一个时,问题就变成了一个多模态分布,即我看到的相同场景有两种不同的选择。这对传统神经网络的预测来说并不友好,因为它通常使用均方误差(MSE)损失进行训练,而这无法有效处理Multi-Modal情况。

为了解决这个问题,引入了概率分布,使得神经网络不再是一个输入一个输出的函数,而是一个输入可以有多个输出的函数。这种方法提供了更大的灵活性,可以表示各种概率分布,解决了原有方法的限制。

2.2 解决了Action Space Scalabiltiy或者sequential correlation问题

数据预测有两种方法:一是直接输出一个数值,另一种是将可能的数值分成几个区间,进行离散预测。在预测Multi-Modal Action的时候,人们倾向于采用离散预测,将连续值问题转化为分类问题,但这样做涉及的算力成本很高,尤其在处理高维空间时。此外,针对机器人控制问题,如果采用分类方法,每一步都需要预测下一步要执行的动作,而实际需求是希望一次性预测多步动作,这就涉及到了连续控制中的动作一致性问题。解决这个问题的挑战在于平衡成本和对高维连续控制的需求。

假设我要控制的是一个具有六个自由度的机械手,甚至考虑到夹爪开关,有七个自由度,这时如果我要对其进行分类,就不再是在一个维度上切分成100份,而是每个维度都要切分成1000份。然后,将所有这些切分的部分相乘,才能得到我们整个空间的方法。如果采用这种方法,成本将会非常非常高。随着维度的增加,成本会呈指数级增长

由于它们预测高维空间的成本非常高,因为它们只能预测一步,接下来的步骤是什么。如果再加上更多的步骤,维度就会变得越来越高,它们就无法胜任。然而,实际上我们现在追求的是具有以下特性的方法:不仅可以预测每一步,而且可以在高维连续控制中实现。对于我们来说,我们可以直接预测未来每一步,无论是接下来的20步还是100步,是向左还是向右,而不是在每一步预测之后再执行,再决定下一步该怎么走。

2.3 解决了Training Stability问题

Diffusion Policy和其他使用生成式模型(LSTM-GMM、BET、IBC)的策略比,他的最大特点是训练过程非常稳定。

关于训练稳定性,迟宬的进一步解释是:在Robot Learning领域,机器人动作执行主要有三种方法:包括直接回归、分类预测和生成式模型。第一类回归,即将神经网络视为一个函数,输入是图片,输出是一个动作。这是最常见的方法,绝大多数强化学习都采用这种方式。然而,这种方法存在一些问题,正如之前提到的。第二类分类预测,这种方法通过预测分类来生成动作,前文已经大致描述,不再详细赘述。第三类生成模型,理论上所有的生成模型都可以预测连续的多模态分布,但很多生成模型的问题是训练不稳定。

基于Diffusion Model的第三类方法具有一个重要的优势,即训练非常稳定。这也是为什么Diffusion Model当前在图像生成方面取得了成功,而当时的生成对抗网络(GAN)并没有成功的原因。在当时,GAN在学术界能够产生一些不错的效果,但当你真的将其应用于产品时,你会发现非常困难。要训练一个有效的GAN,你需要疯狂地调整参数,然后才能训练出可用的生成器。

而Diffusion方法的强大之处在于,它的性能不逊色于GAN,但其训练过程非常稳定。基本上,你可以随便调整参数,生成器就能够输出结果,可能效果不是最优的,但基本上都能work。同时,这也解释了为什么像Stable Diffusion这样的方法,以及现在各种图像生成模型能够在如此庞大的数据集上进行训练,这是因为它们的训练非常稳定。如果你在如此大规模的数据上使用其他方法进行训练,可能会在训练一段时间后出现奇怪的问题,模型无法进一步优化。


3. 模型架构梳理

Diffusion Policy 的架构主要由三部分组成:

3.1 视觉输入(Visual Encoder)

使用 ResNet 作为基础结构;

修改:全局平均池化替换为 空间 Softmax 池化;BatchNorm 改为 GroupNorm;

输入:多视角图像和机器人自身状态;

输出:观测特征 OtO_tOt

3.2 动作扩散(Action Diffusion)

从随机噪声动作序列 AtKA_t^KAtK 出发,逐步去噪得到最终动作 At0A_t^0At0

每次推理预测 TpT_pTp 步动作,但只执行其中 TaT_aTa 步,然后重新规划;

保证动作的时序一致性,同时具有实时响应能力。

3.3 Transformer 时序结构

CNN 适合低频任务,但容易过度平滑;

Transformer 更适合需要快速动作变化的任务;

输入:带噪动作 embedding + 扩散步数 embedding;

融合:通过跨注意力融合视觉特征 OtO_tOt

输出:噪声预测 ϵθ\epsilon_\thetaϵθ,逐步修正动作序列。


4. 数学推导

Diffusion Policy 的数学基础来源于 去噪扩散概率模型(DDPM)。它的关键思想是:从高斯噪声出发,通过逐步去噪的方式,生成符合分布的动作序列。

4.1 扩散过程公式

标准的 DDPM 去噪更新公式为:

xk−1=α(xk−γϵθ(xk,k))+N(0,σ2I)x_{k-1} = \alpha \big(x_k - \gamma \, \epsilon_\theta(x_k, k)\big) + \mathcal{N}(0, \sigma^2 I) xk1=α(xkγϵθ(xk,k))+N(0,σ2I)

其中:

  • xkx_kxk:含噪动作;
  • ϵθ\epsilon_\thetaϵθ:神经网络预测的噪声;
  • γ\gammaγ:学习率/步长;
  • α,σ\alpha, \sigmaα,σ:噪声调度参数。

4.2 梯度解释

该过程等价于在能量函数 E(x)E(x)E(x) 上执行带噪声的梯度下降:

x′=x−γ∇E(x)x' = x - \gamma \nabla E(x) x=xγE(x)

因此 ϵθ\epsilon_\thetaϵθ 可以理解为学习了能量函数的梯度场,保证采样的稳定性。

4.3 条件扩散策略

为了让生成动作与机器人观测相一致,Diffusion Policy 在扩散过程中引入观测 OtO_tOt,形成条件扩散:

Atk−1=α(Atk−γϵθ(Ot,Atk,k))+N(0,σ2I)A_{t}^{k-1} = \alpha \big(A_t^k - \gamma \, \epsilon_\theta(O_t, A_t^k, k)\big) + \mathcal{N}(0, \sigma^2 I) Atk1=α(Atkγϵθ(Ot,Atk,k))+N(0,σ2I)

其中:

  • AtkA_t^kAtk:第 kkk 步含噪动作序列;
  • OtO_tOt:当前的视觉与状态观测。

4.4 训练目标

在训练中,Diffusion Policy 会随机选择一个扩散步数 kkk,并为真实动作 At0A_t^0At0 添加噪声 ϵk\epsilon_kϵk,训练网络去预测这个噪声:

L=E[∥ϵk−ϵθ(Ot,At0+ϵk,k)∥2]L = \mathbb{E} \big[ \|\epsilon_k - \epsilon_\theta(O_t, A_t^0 + \epsilon_k, k)\|^2 \big] L=E[ϵkϵθ(Ot,At0+ϵk,k)2]

该损失函数本质上是一个 MSE(均方误差),它保证了模型在所有扩散步数上都能有效学习,从而得到稳定的训练过程。


5. 与其他学习策略的比较

5.1 显式策略 (Explicit Policy)

  • 直接从观测到动作的回归或分类。

  • 优点:实现简单、推理速度快。

  • 缺点:难以处理多模态动作分布,容易平均化导致动作模糊。

5.2 隐式策略 (Implicit Policy, EBM)

  • 通过能量函数建模动作分布,选择能量最小的动作。

  • 优点:可以表达多模态分布。

  • 缺点:训练依赖负采样,往往不稳定;推理时开销较大。

5.3 Diffusion Policy 的创新

  • 使用扩散模型迭代生成动作,自然支持多模态;

  • 动作序列预测:提升时序一致性,避免抖动和不连贯;

  • 视觉条件化:显著加快推理速度,适合实时控制;

  • 闭环控制:结合 receding horizon,让机器人既能长远规划又能及时响应。

5.4 不足

  • 推理速度较慢,需要多次去噪迭代;

  • 依赖高质量演示数据;

  • 相比简单的行为克隆方法,计算开销更大。


6. 提到的其他问题

6.1 Diffusion Policy和RL以及Imitational Learning是什么关系?

在Robot Learning领域,机器人操作比较常用的两个路径是强化学习(Reinforcement Learning)和模仿学习(Imitation Learning),Diffusion policy并不与强化学习和模仿学习冲突,它可以应用于两者。该方法是一种策略逻辑,适用于输入图像并输出相应动作的情境。在论文中,我们使用了模仿学习,即由人类遥控机器人执行动作,收集数据,并通过学习将其转化为策略。这种学习过程通过遥控机器人完成一系列动作开始,然后将其迁移到机器人身上。输入数据包括过去几帧的图像,而输出涉及对未来动作的预测。

很多强化学习的人,他们使用强化学习在模拟器中生成大量数据。在这个过程中,为了加速训练,RL policy的输入不是图片,而是一些低维度的底层状态信息。但是由于这些状态信息在现实环境里是无法获得的,因此这个RL policy不能直接用于驱动机器人。这个时候,他们会把RL policy生成的数据用于训练一个图片作为输入的模仿学习策略,这被称为蒸馏。在这种情况下,模仿的对象并非人类,而是一个强化学习“代理”(Agent)。这也是这种方法的应用之一。

6.2 操作(Manipulation)和移动(Locomotion)的训练有什么不同?

RL在移动有更好的效果,Sim2Real Gap的问题相对好解决;但在操作,RL存在最大的问题是Sim2Real Gap没法很好的解决。对于操控而言,需要考虑的因素较多,其中一个关键区别是在机器人操作中除了需要考虑机器人本身的物理特性,同时还要适应复杂多变的环境和被操作物体。操控涉及与各种各样的物体进行交互,每个物体都具有独特的物理特性,如重心、摩擦力和动力学。这些在模拟器中难以准确模拟,即便能够模拟,精度通常较低,速度较慢。相比之下,对于locomotion,外界环境大多可以视为一个刚体,物理特性基本可以忽略。这使得可以花费更多时间来建立机器人本体的精确物理模型,以及设计更复杂的物理引擎。这是为什么RL更适合Locomotion,而对有物理机器人部署Manipulation没有那么好的效果。

6.3 Diffusion Policy目前会存在什么问题,未来有哪些工作?

目前最大的问题不是Policy本身,而是数据。训练数据对于机器人执行特定任务至关重要。尽管我们已经积累了一些关于遥控机器人执行任务的数据,但要将其部署到实际应用中,比如设计一个家用机器人来洗碗,就需要更大规模、更丰富多样的数据集,类似于ChatGPT的规模。确保机器人能够在各种家庭环境中表现出足够的稳健性。目前,最大的挑战在于如何有效地收集大量、多样化的数据。这是下一步研究的关键,通过数据收集和训练,期望能够解决当前面临的问题,同时也认识到可能会有新的挑战随着数据规模的增加而浮现。


7. References:

知乎

宋舒然RSS 2023报告

Princeton Robotics - Russ Tedrake - Dexterous Manipulation with Diffusion Policies

Cheng Chi Github

Diffusion Policy Project Page

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919452.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919452.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919452.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

量子计算和超级计算机将彻底改变技术

我们生活在技术时代,但未来仍有无限可能。近年来,各大企业在量子计算领域持续迈出虽小却关键的步伐 —— 这一技术注定将彻底改变我们所熟知的世界。以下精选的潜在应用场景,将对从交通出行到医疗健康的多个领域产生深远影响。 在由 “1” 和…

Linux 中文显示空白框(Java)

问题展示:解决方案本系统采用宋体,若是其它字体,可以类似排查Font rewardFirstFont new Font("SimSun", Font.BOLD, 20);linux系统字体-检查查询linux系统所有字体fc-list检查是否有目标字体(SimSun)&#…

普通用户使用docker命令

参考大佬 https://blog.51cto.com/u_16175448/12082279 详细步骤及代码 步骤 1:安装 Docker 首先,你需要安装 Docker。 步骤 2:创建 Docker 用户组 Docker 默认以 root 用户运行,为了普通用户能够使用 Docker,我们需要…

【传奇开心果系列】Flet框架实现的家庭记账本示例自定义模板

Flet家庭记账本示例自定义模板一、效果展示截图二、Flet家庭记账本概况介绍三、应用特色1. 简洁直观的用户界面2. 全面的财务管理功能3. 实时数据监控4. 数据可视化分析5. 数据管理功能四、使用场景个人财务管理家庭账务管理小微企业记账学生理财教育五、主要功能模块&#xff…

Node.js 在 Windows Server 上的离线部署方案

Node.js 在 Windows Server 上的离线部署方案 离线部署的核心是提前准备所有依赖资源(避免在线下载),并通过本地配置完成服务搭建,整体分为「依赖准备」「环境配置」「项目部署」「服务注册」4个阶段。 一、提前准备离线资源&am…

SpringAI接入openAI配置出现的问题全解析

SpringAI接入openAI配置出现的四个问题全解析1、无法下载openAI或SpringAI依赖包1.1、思路就是从哪个源下载所需的依赖包1.2、解决思路:我们可以看阿里的中央仓库是否有集成SpringAI的依赖,从它这里下也是可以的。我们看看阿里云云效maven地址&#xff0…

自然语言处理——02 文本预处理(上)

1 认识文本预处理 概念: 文本语料在输送给模型前一般需要一系列的预处理工作,才能符合模型输入的要求;比如:将文本转化成模型需要的张量、规范张量的尺寸;比如: 关于数据X:数据有没有脏数据、数…

数据结构:二叉树的链式存储

用链表来表示一棵二叉树,即用指针指向来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址 。 我们之前就已经说过,二叉树是递归…

【Spring Boot把日志记录到文件里面】

<?xml version"1.0" encoding"UTF-8"?> <configuration><!-- 日志输出格式 --><property name"LOG_PATTERN" value"%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n" /><!-- 日志…

大数据服务完全分布式部署- 其他组件(阿里云版)

ZooKeeper 安装 官网 解压 cd /export/server/ tar -zxvf /export/server/apache-zookeeper-3.9.3-bin.tar.gz -C /export/server/软链接 ln -s /export/server/apache-zookeeper-3.9.3-bin /export/server/zookeeper配置 cd /export/server/zookeeper/ mkdir zkDatamyid…

Windows 平板/电脑 上使用 DHCPSRV 搭建 DHCP 服务器

一、DHCPSRV 核心优势 轻量便携:单文件绿色软件,无需安装 全图形界面:比命令行工具更友好 支持IPv4/IPv6:满足现代网络需求 低资源占用:适合平板电脑运行(内存<10MB) 租约管理:可查看实时IP分配情况 二、超详细配置流程 1. 下载与初始化 官网下载:http://www…

ArcGIS动态表格批量出图

前言&#xff1a;产品介绍&#xff1a;ArcGIS动态表格扩展模块Mapping and Charting Solutions&#xff0c;可用于插入动态表格&#xff0c;与数据驱动结合&#xff0c;出图效率无敌。注&#xff1a;优先选择arcgis10.2.2。 一、首先是根据自身携带的arcgis数据进行下载对应的…

Linux小白加油站,第三周周考

1.如何查看当前系统中所有磁盘设备及其分区结构(如磁盘名称、大小、挂载点等)? lsblk # 显示磁盘名称、大小、挂载点&#xff08;P21&#xff09;2.若需对空闲磁盘(如/dev/sdb)进行交互式划分&#xff0c;如何进入操作界面并创建一个5GB的主分区(类型为Linux默认文件系统)? …

SEO的红利没了,下一个风口叫GEO

一、 搜索在退场&#xff0c;答案在上台过去二十多年&#xff0c;我们习惯了这样的路径&#xff1a;输入关键词 → 点开一堆蓝色链接 → 慢慢筛出想要的信息。SEO&#xff08;搜索引擎优化&#xff09;就是围绕这套游戏规则展开的&#xff0c;谁玩得溜&#xff0c;谁就有流量、…

Kubernetes 的 YAML 配置文件-apiVersion

Kubernetes的YAML配置文件–apiVersion 关于 Kubernetes 的 apiVersion 说明 以及 生产环境中推荐使用的版本 的完整指南,帮助你正确、安全地编写 Kubernetes 配置文件。 一、什么是 apiVersion? 在 Kubernetes 的 YAML 配置文件中,apiVersion 字段用于指定你所使用的 Kub…

uniapp 5+App项目,在android studio模拟器上运行调试

1.安装android studio&#xff0c;默认安装即可 点击下载android studio 2.安装完成后&#xff0c;添加设备 选择机型并下载 启动模拟机&#xff08;启动比较慢&#xff0c;稍等一会即可&#xff09; 3.等待模拟器启动后&#xff0c;在uniapp上运行项目到模拟器 如果下…

Qt猜数字游戏项目开发教程 - 从零开始构建趣味小游戏

Qt猜数字游戏项目开发教程 - 从零开始构建趣味小游戏 项目概述 本项目是一个基于Qt框架开发的猜数字游戏&#xff0c;具有现代化的UI设计和完整的游戏逻辑。项目采用C语言开发&#xff0c;使用Qt的信号槽机制实现界面交互&#xff0c;通过随机数生成和状态管理实现完整的游戏…

初识CNN05——经典网络认识2

系列文章目录 初识CNN01——认识CNN 初识CNN02——认识CNN2 初识CNN03——预训练与迁移学习 初识CNN04——经典网络认识 文章目录系列文章目录一、GoogleNet——Inception1.1 1x1卷积1.2 维度升降1.3 网络结构1.4 Inception Module1.5 辅助分类器二、ResNet——越深越好2.1 梯…

学习笔记分享——基于STM32的平衡车项目

学习笔记分享——基于STM32的平衡车项目前言笔记正文结语前言 本文是我在学习铁头山羊的平衡车教程的过程中&#xff0c;记录的笔记&#xff0c;里面不但有Up主的讲解&#xff0c;也有我个人的学习心得&#xff0c;还有查阅的资料&#xff0c;由于内容太多&#xff0c;不方便逐…

学习strandsagents的http_request tool

今天我们通过来拆strandsagents官网的一个例子来学习strandsagents的http_request tool https://strandsagents.com/latest/documentation/docs/examples/python/agents_workflows/ 看上去能做实事核查,实际上没那么高大上。 Show me the code https://github.com/strands-…