Diffusion Policy: Visuomotor Policy Learning via Action Diffusion

Cheng Chi, Zhenjia Xu, Siyuan Feng, Eric Cousineau, Yilun Du, Benjamin Burchfiel, Russ Tedrake, Shuran Song

原论文链接

投在了IJRR上

点击:原作者论文思路讲解

1. PPO背景引入

这里简要交代PPO的算法原理及思想过程



 好到这里就是PPO的基本思想和RL的前期铺垫工作

2. Diffusion Model回顾(DDPM)



训练过程



采样过程

3. Diffusion Policy

(1)什么是Diffusion Policy

1.首先Diffusion,它是一种生成方法,如今图像生成领域的成就基本都是基于Diffusion方法,比如常听的Stable Diffusion和Midjourney。

2.其次Policy,它是机器学习算法用来驱动机器人的核心组成部分,它的输入是各种感知信息(比如相机拍到的视频,还有机器人各个关节的位置),而输出的是机器人要执行的动作。

3.简单理解,Diffusion Policy就是应用Diffusion这种方法生成机器人动作的一种Policy。



(2)铺垫1 --Planning with Diffusion for Flexible Behavior Synthesis (Diffuser)

论文地址

scoop 意味着有人在你的想法之前发表了类似的想法

 Diffuser (offline)

具体来说,如果有一个包含各式各样轨迹 (trajectories) 的数据集 ,离线强化学习的目标便是从轨迹中挖掘构造出一个性能优秀的智能体 (agent) ,希望它能够直接部署至环境并获得不错的收益。

原论文将数据集每一条轨迹(trajectory)进行拼凑,就像下面这样:

表达为如下的二维数组,后续的算法设计就是在这样定义的轨迹表示上进行优化。

那么它的模型架构是怎样的?









算法思想:其中J是用来进行预测累计轨迹回报的函数,这个函数可以使用神经网络来进行拟合,这样他的训练就是一个回归问题,用来回归每一个可能的ti的累计回报。

(3)铺垫2 --FiLM

一种特征层面的线性调节方式,在视觉推理(visual reasoning)任务中有很好的效果,可以用于特征合并,例如处理模型的多输入问题。

4.公式推导

论文中,首先非常简明扼要的交代了diffusion算法的一条公式:

就是我下面之前所讲的这个:



然后是梯度的表示和梯度下降:

即下图展示的过程:



文章使用了DDPM去逼近条件概率分布而不是联合分布,这也是由之前的论文总结而来。

(2)为什么要用Diffusion Policy

a. 解决Multi-Modal(多模态)的问题。

什么是多模态问题?

E.G.假设现在有100只兔子,前面有一个木桩,可能有30只兔子选择左转绕过桩子,有60只选择右转绕过桩子,有10只兔子选择撞死在桩子上。当这些所有的解决方案都合并为一个的时候,问题就变成了一个多模态分布。

传统前馈神经网络本质是一种有很多系数(w)的函数,例如使用MSE(均方误差)进行训练,即以一个目的进行优化为前提,对于给定的输入,只有一种可能的输出。然而,在某些情况下,一个输入可能对应两种不同的输出。



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

但和实际中机器人系统需要对机器人动作严格控制的思路是相违背的,对于全驱和欠驱系统,无论如何我们都希望可以严格控制机器人执行任务的表现,这也是为什么大多数人没有把机器人动作生成表现为一个概率分布的原因。

但实际过程中,举个例子,如果机器人卡Bug一直撞向桩子,我们如果给他添加概率,有一定概率撞,也有一定概率不撞,这样就可以提高系统的鲁棒性,解决由于严格执行而卡bug卡死的情况。

b. Action Space Scalability



下象棋,想7步,下一步

c. 训练稳定



Checkpoints,可能overfit/overtrain/diverge

训练期间可能不知道,就必须在机器人上运行并检查每一个Checkpoints,找到哪一个表现良好。这个过程比较tedious并且是very error-prone process

self-surprising 启发式(自我惊讶)

(3)Explicit Policy显式策略和Implicit Policy隐式策略

5. DDPM+PPO

未完待续。。。

Diffuision Policy + RL -------个人博客_ZSY_20241101的更多相关文章

  1. flask tutorial => make a blog :) flask 搭建博客系统从零开始!

    please follow the tutorial from the official site :) http://flask.pocoo.org/docs/ You could download ...

  2. 我博客上的围棋js程序

    作为一个围棋爱好者,就决定在博客里加个围棋js程序.于是,申请了博客的js权限,美化美化我的博客. 好在js的语法像C系的,看了看,写个程序应该还是可以的. 围棋里,设计好基本的数据结构: //a是1 ...

  3. 【django之博客系统开发】

    一.项目简介 使用django开发一套博客系统,参考博客园. 需求如下: 项目结构: 二.全部代码 from django.db import models # Create your models ...

  4. Do-Now—团队 冲刺博客六

    Do-Now-团队 冲刺博客六 作者:仇夏 前言 终于从四级的考试中解脱了(不过我觉得可能凉凉,呵呵),我们的APP制作也迎来了最后的两天. 自己觉得自己其实没有干成什么事情,代码什么的大都是队友们写 ...

  5. MachineLN博客目录

    MachineLN博客目录 https://blog.csdn.net/u014365862/article/details/78422372 本文为博主原创文章,未经博主允许不得转载.有问题可以加微 ...

  6. 使用Django+MySQL+Apache+Linux创建简单的博客

    本教程基于慕课网<Django入门与实践>编写,基于CentOS 7 基础知识 什么是django? Django是一个基于Python的高级Web开发框架, 特点:高效,快速,高度集成( ...

  7. 在centos7上搭建博客之小白教程~

    原理 http使用方法一编译安装,php模块打入方式实现. 软件版本 在本次实验中,我们需要用到的软件版本如下: apr-1.6.2 apr-util-1.6.0 httpd-2.4.28 maria ...

  8. 【分分钟内搭建一个带用户系统的博客程序(一)用户系统】asp.net core的Identity真香,EF真香!

    不用不知道,一用香到爆. 老哥是个屌丝前端,但也想写点web应用耍一耍.之前弄过了NodeJs,也弄过JAVA,最近由于写游戏的原因用C#,索性上手一波asp.net core. 这篇博客记录的是,如 ...

  9. python爬虫-韩寒新浪博客博文

    博客地址:http://blog.sina.com.cn/s/articlelist_1191258123_0_1.html 爬第一页博文 #-*-coding:utf--*- import re # ...

  10. NOIP2018 - 暑期博客整理

    暑假写的一些博客复习一遍.顺便再写一遍或者以现在的角度补充一点东西. 盛暑七月 初涉基环外向树dp&&bzoj1040: [ZJOI2008]骑士 比较经典的基环外向树dp.可以借鉴的 ...

随机推荐

  1. kubernetes负载感知调度

    背景 kubernetes 的原生调度器只能通过资源请求来调度 pod,这很容易造成一系列负载不均的问题, 并且很多情况下业务方都是超额申请资源,因此在原生调度器时代我们针对业务的特性以及评估等级来设 ...

  2. TwinCAT3 - 实现CiA402

    目录 1,起缘 2,想办法 3,开搞 3.1,CANOpen通信 3.1.1 对象字典 3.1.2 通信建立 3.2,CiA402伺服状态机 3.3,伺服运行 3.3.1 操作模式 3.3.2 轮廓位 ...

  3. 关于vscode自动格式化的坑(Prettier - Code formatter)

    在入坑vscode的时候在网上找了一些扩展包,其中有一款名为Prettier - Code formatter的代码格式化工具,其作用为当按下ctrl+s的时候自动进行格式化(当你进行格式化操作的时候 ...

  4. zblog免费插件分享前端代码支持一键复制

    zblog默认的代码文件在网页前端是不支持一键复制的,这会让访客复制长代码的时候不太方便,甚至有可能会出错,影响体验,下面分享一个非常简单的免费插件,安装之后,前端代码就能一键复制了. 插件使用方法: ...

  5. vue 报错 Component template should contain exactly one root element. If you are using v-if on multiple elements

    vue 报错 Component template should contain exactly one root element. If you are using v-if on multiple ...

  6. TS中的声明文件

    TS中的声明文件 .d.ts 的作用是为了在TS中使用js文件,但是js文件没有类型,ts又是一个类型严格的语言.所以为了在ts中使用js第三方包,或者自定义Js模块.便由此引出了.d.ts文件. 需 ...

  7. C# Dynamic 转换成 Dictionary,Dynamic 转换成 DataTable

    部分软件开发的时候用到了 dynamic 类型,这个类型的数据不需要做其他处理的时候非常好用,但是需要对其中的数据调整的时候就不是那么好用了,这里提供两个常见的转换方式 Dynamic To Dict ...

  8. 平面设计 – 色轮 & 配色

    前言 由于之前那篇有点长, 而且色轮很重要, 所以独立写一篇呗. 参考: 一文看懂色轮 Youtube – 03 色彩 (什么是色相.纯度.明度.色环.补色?怎样配色?) Youtube – 初學繪畫 ...

  9. 五,MyBatis-Plus 当中的 “ActiveRecord模式”和“SimpleQuery工具类”(详细实操)

    五,MyBatis-Plus 当中的 "ActiveRecord模式"和"SimpleQuery工具类"(详细实操) @ 目录 五,MyBatis-Plus 当 ...

  10. `std::packaged_task`、`std::thread` 和 `std::async` 的区别与联系

    std::packaged_task.std::thread 和 std::async 的区别与联系 std::packaged_task.std::thread 和 std::async 都是 C+ ...