狗都能看懂的Imitation Learning的讲解

news2024/11/16 4:34:54

上一篇博客讲述了奖励稀疏时的训练方法。实际场景中,可能难度还会更大一些。很多场景很难有一个明确的reward,甚至没有reward。那么这里就提出模仿学习,即agent模仿expert的操作。具体两个方法是:Behavior Cloning、Inverse Reinforcement Learning

Behavior Cloning

动作克隆,其实本质上就是有监督学习,以自动驾驶为例子,让agent自己去开,不现实。一般的做法就是收集很多人类驾驶的训练样本,图中的s是开车的场景,a是在此场景下做出的动作。把这些资料输入到Neural Network中,使网络输出的动作能尽可能接近实际人类做出的动作,就完成任务。

在这里插入图片描述

但这个Behavior Cloning也是有缺点,expert通常是很有经验的,比较少犯错的。比如在驾驶中,expert是很少会在转弯中会撞墙。所以缺少了这部分的样本,agent在这些情况下就不知道如何处理

Behavior Cloning-2.png

这时候可以引入Dataset Aggregation可以缓解这个问题。

Behavior Cloning-3.png

  1. 通过行为模仿,训练一个actor π 1 \pi_1 π1
  2. π 1 \pi_1 π1去与环境做互动
  3. 遇到不同state的时候, π 1 \pi_1 π1询问expert的做法,但是不会采取expert的做法,如果这时候导致episode结束,那就拿着新数据(expert的做法作为label)训练。
  4. 这时actor就知道在快要撞墙的时候要采取什么样的动作,然后用这个新的data去训练新的 π 2 \pi_2 π2
  5. 重复1-4

Behavior Cloning-4.png

即使采用了Dataset Aggregation的Behavior Cloning,也有它的缺点,比如每次训练都需要expert试错,在特定的场景,比如自动驾驶,以撞车收集数据肯定不可行。其次expert不是所有行为都是好的,需要学习的。最关键的一点,强化学习的问题多数属于马尔科夫链,即下一个状态只和上一个状态有关,那所以上一个状态是错的,下一个状态就跟着错了,一步错步步错。那这个expert缺少这种数据,所以引导也很有限。

Inverse Reinforcement Learning

反向强化学习,比较通俗的解释就是,先射箭再画靶。

IRL-1.png

正常的Reinforcement Learning的步骤,是通过Environment和Reward function,最终更新出理想的Actor。

Inverse Reinforcement Learning的步骤,由于没办法从Environment获得reward,那就通过收集expert的训练数据和Environment的信息,来反推Reward function,推出Reward function再用以前的Reinforcement Learning的方法来训练Actor。

IRL-2.png

在具体的训练中,我们如何实操?

  1. 让expert π ^ \hat{\pi} π^去玩游戏,记录游戏过程,形成n个 τ ^ \hat{\tau} τ^,每个 τ ^ \hat{\tau} τ^代表一个episode。
  2. 让actor π \pi π去玩游戏,记录游戏过程,形成n个 τ \tau τ
  3. 设定一个reward function,这个reward function强制要求expert的累计得分一定要高于actor的累计得分。
  4. 用这个reward function训练出一个新的actor π \pi π,如果它的reward已经比expert高了,那就修改reward function,使得其 π \pi π获取的reward还是比expert低。
  5. 重复1-4

这个过程其实和GAN的训练很像,reward function就是一个判别器,actor则是一个生成器。actor需要不断提高自己,使得在新的reward function下,得到的reward越高越好。

Third Person Imitation Learning

第三人称视角的模仿学习,顾名思义,agent会观看expert的行为进行学习,这也是一个拟人的过程。这里就不展开讲解了,仅做记录。

Recap: Sentence Generation & Chat-bot

在这里插入图片描述

最后,也可以将强化学习用在句子生成上,即expert给定很多对话的素材,agent通过学习这些素材来生成人类会回答的句子。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0到100:旅拍小程序开发笔记(上)

背景调研 旅拍店或者摄影师可以在小程序上设置自己的可预约时间,价格,拍摄介绍,并定义不同的套餐(服装套数,底片张数,精修数量,取景风格,套餐价格等),顾客可以根据套餐内容和日程安…

定制化Windows系统

定制化Windows系统 1、定制化需求介绍 预定义安装常用软件的原版操作系统,节省花费的时间。定制前提,你需要1块硬盘、1台(2台)测试电脑、一个PE盘(wepe最好),原版系统镜像,虚拟光驱…

鸿蒙应用框架开发【选择并查看文档与媒体文件】 本地数据与文件

选择并查看文档与媒体文件 介绍 应用使用ohos.file.picker、ohos.file.fs等接口,实现了picker拉起文档编辑保存、拉起系统相册图片查看、拉起视频并播放的功能。 效果预览 使用说明: 在首页,应用显示查看最近打开文件功能的跳转按钮&…

GD32手把手教你移植FlashDB(片外Flash) -- 3.FlashDB使用

GD32手把手教你移植FlashDB(片外Flash) – 1.FlashDB-sfud移植 GD32手把手教你移植FlashDB(片外Flash) – 2.FlashDB移植 GD32手把手教你移植FlashDB(片外Flash) – 3.FlashDB使用 示例代码: https://gitee.com/ljmRD/GD32F427_FlashDB 3.FlashDB使用 main() /*************…

浅谈取样器之SSH Command

浅谈取样器之SSH Command JMeter的SSH Command取样器是一个强大的功能,允许用户在JMeter测试计划中执行远程SSH命令。这对于需要与Linux/Unix服务器交互以执行系统命令、脚本或者进行性能测试验证的场景尤为有用。通过这个取样器,您可以集成服务器端操作…

Linux中进程通信之信号

信号 信号通信,其实就是内核向用户空间进程发送信号,只有内核才能发信号,用户空间进程不能发送信号。 关于信号指令的查看:kill -l 例如我们之前使用的kill -9 pid用于杀死一个进程 使用一个死循环 成功发送kill -9指令&#x…

对于AI大模型发展态势的几点认识

本期内容从AI大模型产业的视角出发,全面审视该产业的发展现状,深入剖析其成长轨迹和未来趋势,旨在为人工智能产业的参与者提供一个全面的视角,更好地理解AI大模型产业的复杂性、动态性和潜力,以及如何在这个快速变化的…

Ruoyi 快速开发平台

Ruoyi 快速开发平台 一、官网二、准备工作2.1 环境要求2.2 必要配置 三、运行系统3.1 后端运行3.2 前端安装及运行 四、自定义开发4.1 新增业务模块4.2 代码生成4.2.1 创建菜单4.2.2 后端代码4.2.3 前端代码 一、官网 链接: 前后端分离版本 回到目录 二、准备工作 2.1 环境要…

UDP服务器端bind失败问题

本人使用microchip芯片开发,使用UDP虚拟机通讯,经常提示bind失败,返回-1,尝试了以前UDP作为客户端使用时正常,故硬件链路没问题。 一、可能有几个原因: 端口实际上被占用:最明显的原因是端口真…

基于入侵野草算法的KNN分类优化matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 入侵野草算法 4.2 K近邻分类器(KNN) 4.3 基于IWO的KNN分类优化 5.完整程序 1.程序功能描述 基于入侵野草算法的KNN分类优化。其中,入侵野草算法是一…

GEE APP:利用谷歌地球引擎实现更有效的草原管理:决策支持应用视角

简介 草原占地球表面和农田的很大一部分,对人类福祉和畜牧业至关重要。由于牧区基础设施不发达、通信不畅,牧民和草原管理部门在有效控制牧民放牧行为和草原利用方面面临挑战。要解决这一问题,促进草原的可持续利用并保护其生态系统服务,就需要基于云的放牧管理和决策支持…

C++初阶大总结

目录 一.命名空间 1.命名空间定义 2.命名空间使用 二.C++输入&输出 三.缺省参数 四. 函数重载 五.引用 1.常引用 2.传值、传引用效率比较 3.引用和指针的区别 4.引用和指针的不同点: 小知识点: 六.内联函数 七.auto关键字(C++11) 1.auto的使用细则 八.基于…

24暑假算法刷题 | Day23 | LeetCode 39. 组合总和,40. 组合总和 II,131. 分割回文串

目录 39. 组合总和题目描述题解 40. 组合总和 II题目描述题解 131. 分割回文串题目描述题解 39. 组合总和 点此跳转题目链接 题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有…

Dolphinscheduler 3.2.1bug记录

问题1:分页只展示首页 解决方案: [Bug][API] list paging missing totalpage by Gallardot Pull Request #15619 apache/dolphinscheduler GitHub 问题2:Hive 数据源连接失败 解决方案:修改源码:HiveDataSourceProcessor.cla…

A Survey on Multimodal Large Language Models(from gpt-4o)

目录 A Survey on Multimodal Large Language Models1. INTRODUCTION2. ARCHITECTURE2.1 Modality encoder2.2 Pre-trained LLM2.3 Modality interface 3. TRAINING STRATEGY AND DATA3.1 Pre-training3.1.1 Training Detail3.1.2 Data 3.2 Instruction-tuning3.2.1 Introducti…

Linux下文件编译器-GCC/G++

前言 本文介绍了c/c的编译过程以及gcc/g的时使用 一.c/c翻译的本质:将高级语言翻译成二进制 1)程序翻译过程: (1)预处理(头文件展开、宏替换、去注释、条件编译)还是C语言代码 ​ …

hash表如何形成,hash函数如何计算,什么是hash冲突 如何解决 ,Golang map的底层原理及扩容机制

散列表 散列表(hash表):根据给定的关键字来计算出关键字在表中的地址的数据结构。也就是说,散列表建立了关键字和 存储地址之间的一种直接映射关系。 问题:如何建立映射管血 散列函数:一个把查找表中的关键字映射成该关键字对应…

平移、旋转、缩放和媒体

一、平移 1.1translate()函数 做转换工作可以用translate()函数,这个函数可以改变坐标系。通过改变默认的坐标系,我们可以创建不同的转换方式,包括平移、旋转和缩放。 1.2平移位置案例 案例代码如图1 图1 保存运行如…

【大一公共课】C语言+python语言入门对比+思维导图

C 和 Python 入门教程对比 一、引言 C 语言和 Python 语言都是在编程领域中广泛使用的语言,但它们在语法、应用场景和学习难度上有很大的不同。本教程将对 C 和 Python 的入门知识进行对比,帮助您更好地理解和选择适合自己的编程语言。 二、C 语言入门 …