【深度强化学习】7. 稀疏奖励和模仿学习

news/2024/5/18 21:47:36 标签: 深度学习, 自动驾驶, 强化学习

【DataWhale打卡】李宏毅老师视频中的最后两部分,sparse reward和imitation learning。

文章目录

    • 1. Sparse Reward
      • 1.1 Reward Shaping
      • 1.2 Curriculum Learning
      • 1.3 Hierarchical RL
    • 2. Imitation Learning
      • 2.1 Behavior Cloning
      • 2.2 Inverse Reinforcement Learning
    • 3. 参考

1. Sparse Reward

Sparse Reward是强化学习中最重要的问题,也是最难解决的,仅仅通过exploration来进行探索是远远不够的。这一节将讲解如何解决Sparse Reward的问题。

1.1 Reward Shaping

可以刻意设计一些reward来引导达到最终的reward。

举例:小孩在学习(长远reward值很高)和游戏(短期reward值更高)的两者中做选择,很有可能就会选择游戏,这时候为了让小孩能够考虑长远,可以考虑让小孩在学习的时候设计人为的reward,期望能够引导到reward更高的情况。

相当于引入了domain knowledge,

在原有基础上加入了Intrinsic curiosity Module(ICM模块,给agent加入好奇心。输入是s1、a1、s2, 就会输出一个额外的reward,总奖励值中就会额外加入这个reward。

ICM

Network1是额外学习出来的,根据at和st来预测下一个 s t + 1 ^ \hat{s_{t+1}} st+1^,然后将两者的插值作为reward的值,这样设置也就是说,如果下一个状态很难去预测,那么就给个更大的奖励,也就是鼓励冒险的意思。

但是有一个问题:以上reward的设置默认 越难被预测状态就越好。但是这个并不是总是成立的,有的状态很难预测,但是并不代表它更重要

如何判断这个很难预测的状态是否是真的重要的呢?

引入另外一个Network 2,此外还引入了一个特征提取器,Feature Ext来对状态进行特征提取。Network2接受来自 s t 和 s t + s_t和s_{t+} stst+的特征Vector作为输入,输出的值是一个action a t ^ \hat{a_t} at^ (这个值的意义就是从st到 s t + 1 s_{t+1} st+1的话,要采取的action),希望这个action和实际的action a t a_t at越接近越好。

Network1这部分计算让模型能够拥有足够的好奇心,下一个状态越难预测就给更高的reward。

Network2这部分计算就是约束下一个状态,从st到 s t + 1 s_{t+1} st+1预测需要的action和实际采取的action越接近越好,防止提取得到的特征中存在的和action无关的信息。Network2的作用就是更好的优化Feature Ext这个特征提取器,从而让这个提取得到的特征,更加关注于对action影响较大的特征。

1.2 Curriculum Learning

为Agent的学习做一个规划,从简单到难,逐步学习。

强化学习中,从简单的到困难就可以对应学习的序列的长度,短序列学习难度较低,长序列学习难度更高,所以可以先学习短序列,然后学习长序列。

再举一个例子,在躲避怪物的游戏中,从一开始就设置怪物速度到最大值,那很可能训练不起来的,可以让速度从低到高,循序渐进训练。

那么有没有更通用的方法来设计课程规划?

Reverse Curriculum Generation

  • 给定一个目标状态 s g s_g sg,也就是最终目标。
  • s g s_g sg周围采样出一些状态点 s i s_i si, 比较接近于目标状态,加入到状态集合{S}。
  • 从每个 s i s_i si就开始做互动,看是否能达到 s g s_g sg, 每一个做互动的时候都会得到reward。
  • 从状态集合{S}中删除那些reward过大或过小的状态 s i s_i si
  • 在状态集合{S}周围继续采样比较接近于{S}中的 s i s_i si的状态,加入{S}集合。
  • 重复以上操作

也就是说从目标开始,反向生成一系列课程,从难到易,循序渐进。

1.3 Hierarchical RL

多个Agent,High level的Agent负责制定目标,如同项目经理一般,剩下Low Level的Agent负责完成一个个小目标,如同普通码农一般。

  • High Level的agent的目标是让Low Level的Agent完成它所设置的目标,如果没有完成,那就会有一个penalty惩罚。
  • 如果agent达到错误的目标,那就假设最初的目标是错误的。

举两个例子:

第一个例子是蓝色的是agent,其目标是达到黄色的终点,那么这时候粉红色的点就代表high level的agent, 指导蓝色agent先接近红色agent,然后一步步达到黄色终点。

第二个例子是绕中间一点甩杆,目标是将杆子甩到黄色球的位置,这时候就需要粉红色的球做一个指引,从而达到最终的黄色位置。

2. Imitation Learning

比Sparse Reward更加极端,一点点reward都没有,应该如何是好呢?

  • 很多环境中,无法得到reward的,也很难规定出reward,比如聊天机器人,无法判断怎样的聊天内容是好的,怎样是不好的,很难明确规定出来。

  • Imitation Learning又叫做示范学习、学徒学习、观察学习。

  • 在Imitation Learning中,有一些专家给出的demonstration,做了一个示范,那么agent就可以根据专家给出的demonstration来学习(这个过程中,无法显式地得到reward),从而不至于从零开始摸索。

  • 在没有reward的情况下,手机专家的示意是可以做到的:

    • 比如:自动驾驶中,可以收集很多人类的开车记录,并进行研究和学习。
    • 比如:在聊天机器人中,可以收集一系列人与人的对话当作范例来学习,也是可行的。
  • 有两种方法:Behavior Cloning和Inverse Reinforcement Learning(Inverse Optimal Contral)

2.1 Behavior Cloning

这就和监督学习一模一样了,在某个状态下,就采取某个行动,进行分类,然后监督学习。相当于是Expert做什么,Agent就要做一模一样的事情。

存在问题1

由于状态非常多,以自动驾驶为例,摄像机看到的图像画面是不可能穷举的,专家做出的演示不可能将现实世界中的全部状态都枚举完。所以Behavior Cloning的效果是很有限的,光是做behavior cloning是远远不够的,还需要dataset Aggregation。

Dataset Aggregation

期望训练的数据集是具有多样性的,尽可能覆盖多种极端情况。当遇到极端情况以后,再记录下Expert的操作,然后用这个新的数据来继续训练agent。

存在问题2

Agent会盲目学习Expert的所有行为,包括一些无关紧要的行为。由于Network的容量有限,盲目学习所有行为会导致容量不够。所以要确定什么是该学习的,什么是不该学习的。

存在问题3

在behavior cloning的过程中,其实训练集和测试集的分布是mismatch的。

RL中一个重要的特性是,前一个状态会对后一个状态产生影响。

这就需要Inverse Reinforcement Learning

2.2 Inverse Reinforcement Learning

传统的RL流程:

通过Reward Function,经过RL算法和env的交互,找到一个最优的Actor。

Inverse RL中恰好相反,并没有reward function,只有一些列Expert的示例。

然后inverse RL通过反推得到Reward Function,好像很玄学。。

具体做法

  • Expert 玩游戏,记录所有的过程 τ ^ \hat{\tau} τ^

  • Actor也去玩游戏,也有所有游戏过程的记录 τ \tau τ

  • 然后推Reward function, 这里假设Expert得到的 τ \tau τ永远是最好的。

    • 所以Expert的Reward分数要比Actor高。
      ∑ n = 1 N R ( τ n ^ ) > ∑ n = 1 N R ( τ n ) \sum_{n=1}^N R(\hat{\tau_n})>\sum_{n=1}^N R(\tau_n) n=1NRτn^>n=1NR(τn)

    • 先射箭,再画靶

  • 根据以上公式找到一个Reward function R

  • 然后基于这个R进行训练学习得到一个Actor

  • 然后循环,具体如下图所示

以上过程最让人困惑的过程就是Reward Runction R的选取了。实际上这里的Reward Function和传统的计算方式不同,可以采用的神经网络进行生成函数。只要是函数,就可以用神经网络进行拟合,所以这个过程也是一个可学习的过程。

这个过程和GAN又非常相似:

Actor->Generator

Reward Function->Discriminator

对比图:

这方面还有很多可研究内容,如:Third Person Imitation Learning讲的是机器人的视角和人类不同的时候,如何将知识进行迁移。

3. 参考

https://www.bilibili.com/video/BV1MW411w79n?p=8

https://www.bilibili.com/video/BV1MW411w79n?p=7

https://github.com/datawhalechina/leedeeprl-notes


http://www.niftyadmin.cn/n/1003458.html

相关文章

ftp文件传输协议及基于openssl对ftp进行认证功能

一、linux中常见的三种文件服务 FTP: File Transfer Protocol 文件传输协议 NFS:Network File System(RPC:Remote Procedure Call 远程过程调用) 网络文件系统 Samba:CIFS/SMB ftp主要监听在tcp的21号端口&…

简明Python3教程 5.第一步

介绍 我们现在来看看如何在Python中运行传统的”Hello world”程序。这会教你如何写、保存以及运行Python程序。 有两种办法来运行您的Python程序——使用交互式的解释器提示符或者源代码文件。我们现在来分别看一看这两种方法。 使用解释器提示符 在命令提示符中输入python来…

【深度强化学习】8. DDPG算法及部分代码解析

【DataWhale打卡】DDPG算法 Deep Deterministric Policy Gradient 视频参考自:https://www.bilibili.com/video/BV1yv411i7xd?p19 1、思维导图 2. 详解 DDPG是解决连续性控制问题的一个算法,但是和PPO不同,PPO输出是一个策略,…

Android中Context详解

Context类 说它熟悉,是因为我们在开发中时刻的在与它打交道,例如:Service、BroadcastReceiver、Activity等都会利用到Context的相关方法 说它陌生,完全是因为我们真正的不懂Context的原理、类结构关系。一个简单的问题是&#xf…

微信公众平台自定义菜单接口开发(1)

微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 自定义菜单接口API 作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archive/2013/04/19/weixin-menu1.html 一、获取权限 自定义菜单接口目前处于内测阶段,需要向腾讯官方申…

【数学知识拾贝】模式识别所需要的线性代数知识总结

【导语】本科期间只是将线代学了,并且通过做题拿到了一个不错的分数,但是掌握并不牢靠。到了研究生阶段以后,模式识别、机器学习、应用数学等课程都需要大量运用线代进行推导或者证明,线代知识的匮乏让我很吃力,所以借…

Android入门第十四篇之画图

常用控件说了不少,现在说说手机开发中也常用到的画图。要掌握Android的画图,首先就要了解一下,基本用到的图形接口: 1.Bitmap,可以来自资源/文件,也可以在程序中创建,实际上的功能相当于图…

Shell 中if做比较

比较两个字符串是否相等的办法是:if [ "$test"x "test"x ]; then这里的关键有几点:1 使用单个等号2 注意到等号两边各有一个空格:这是unix shell的要求3 注意到"$test"x最后的x,这是特意安排的&am…