李宏毅深度强化学习导论——策略梯度

引言

这是李宏毅老师深度强化学习视频的学习笔记,主要介绍策略梯度的概念,在上篇文章的末尾从交叉熵开始引入策略梯度。

如何控制你的智能体

在这里插入图片描述
上篇文章末尾我们提到了两个问题:

  • 如何定义这些分数 A A A,即定义奖励机制;
  • 如何采样这些状态和动作对;

版本0

在这里插入图片描述
我们先来看一个最简单,但不正确的版本。

首先要收集状态-动作对,其实很简单,需要先有一个智能体,这个智能体很傻也没关系,让它去和环境互动,记录互动过程中看到的状态和产生的动作,就可以收集这些状态-动作对。通常我们做多个episode,就可以收集到很多数据,如上图蓝框所示。

这里说这个智能体很傻也没关系,指的是刚开始我们可以随机初始化这个智能体(神经网络)。

收集到这些数据后,我们就可以评价每个动作的好坏,评价就是看智能体在某个状态下执行的动作所得到的分数有多少,这个分数(就是奖励)可正可负可零,正的越多表示这个动作越好,负的越多表示这个动作越不好。

这样我们可以把分数 A A A和奖励 R R R关联起来: A i = r i A_i=r_i Ai=ri
如果智能体在看到 s 1 s_1 s1执行动作 a 1 a_1 a1后得到的奖励 r 1 r_1 r1是正的,就代表这是一个好的动作,以后尽可能执行这个动作。
如果智能体在看到 s 2 s_2 s2后执行动作 a 2 a_2 a2得到的奖励 r 2 r_2 r2是负的,就代表是一个坏的动作,以后不要执行这个动作。

⚠️ 这里说尽可能是为了增加随机性(探索性),可能执行 a 1 a_1 a1虽然好,但不是最好的;还有可能先执行一个负奖励的动作,但后面可以得到正奖励超大的很多的动作(下一个版本会看到)。因此通常在训练时会引入一个随机性来探索更多的可能性。

这并不是一个很好的版本,因为通过这种方法训练出来的智能体非常短视,没有长期规划,每次只会执行当前状态下奖励最高的动作。但是当前采取的每个动作会影响接下来互动的发展。
在这里插入图片描述
比如在看到 s 1 s_1 s1采取 a 1 a_1 a1会得到奖励 r 1 r_1 r1,但是会影响环境产生 s 2 s_2 s2,从而影响了奖励 r 2 r_2 r2

举个例子,闯红灯是不好的(奖励-1),但如果车上有需急救病人,那么闯红灯可以更快地到达医院(奖励+100),那么这种情况下应该更灵活一点。

实际上智能体在和环境互动时还可能存在奖励延(Reward delay)问题,例如上面说的最大的奖励+100,智能体要学习牺牲短期奖励(瞬时奖励)来获取更多的长期奖励。

如果我们使用版本0来玩外星人入侵游戏,因为只有开火凯能获得正奖励,那么版本0会训练一个只会开火的无情机器,但不会躲弹的话很快就可以开下一把。

版本1

在这里插入图片描述

所以我们评价动作 a 1 a_1 a1有多好,不应该只看 r 1 r_1 r1,而是要看 r 1 r_1 r1和后续所有的奖励总和 G 1 = r 1 + r 2 + r 3 + ⋯ + r N G_1=r_1+r_2+r_3+\cdots + r_N G1=r1+r2+r3++rN。然后我们令 A 1 = G 1 A_1=G_1 A1=G1

以此类推,评价动作 a 2 a_2 a2有多好,要通过 G 2 = r 2 + r 3 + ⋯ + r N G_2=r_2+r_3+\cdots + r_N G2=r2+r3++rN来看。

这里的 G G G称为累积奖励(cumulated reward):
G t = ∑ n = t N r n G_t = \sum_{n=t}^N r_n Gt=n=tNrn

这个版本就可以解决智能体短视的问题,假设 a 1 a_1 a1是向右,没有立即的奖励,但是向右恰好躲掉了外星人的子弹,那么就可以存活的更久,也就会有更多的机会开火,最后得到的累积奖励更高。

但是版本1也有点问题,就是把后续所有的奖励和当前的奖励同等看待(默认前面的权重全为1),虽然我们做了 a 1 a_1 a1,最后得到了 r N r_N rN,是有一定的影响,但不应该这么高吧,更多的应该是和执行动作 a N a_N aN有关。

版本2

在这里插入图片描述
所以我们引入一个折扣因子 γ < 1 \gamma < 1 γ<1来表示后续影响持续衰退这件事情。
以执行动作 a 1 a_1 a1为例,瞬时奖励 r 1 r_1 r1前的系数还是设为1,因此此时受该动作影响最大。但后续的奖励我们累乘这个因子:
G 1 ′ = r 1 + γ r 2 + γ 2 r 3 + ⋯ G_1^\prime = r_1 + \gamma r_2 + \gamma^2 r_3 + \cdots G1=r1+γr2+γ2r3+
即使距离动作 a 1 a_1 a1越远, γ \gamma γ项乘的就越多。
得到了累积奖励的衰退版本:
G t ′ = ∑ n = t N γ n − t r n G_t^\prime = \sum_{n=t} ^N \gamma ^{n-t} r_n Gt=n=tNγntrn

这个版本已经很好了,但是还有一个小问题。

版本3

在这里插入图片描述
奖励的好与坏其实应该是相对的,假设是一个非常解压的游戏,没有负奖励,类似场景中有非常多的金币,没有陷阱和阻碍,只要碰到金币就能拿到超过10的奖励,没有碰到也有10的奖励。那么相对来说,奖励10就是不好的。

所以我们可以引入一个偏置(baseline,这里通常翻译成偏置而不是基准)b,让奖励有正有负。
如上图所示,我们让每个 G ′ − b G^\prime - b Gb

听起来不错,但又引入了一个新的问题,我们要如何设定这个偏置大小呢?

下面正式进入策略梯度,它也包含了这个问题的解决。

策略梯度

在这里插入图片描述
我们先来看下策略梯度(Policy Gradient)的算法。

  • 首先随机初始化Actor网络(表示执行动作的智能体网络,下文都用Actor表示),假设此时初始化参数为 θ 0 \theta^0 θ0
  • 进入训练迭代,假设迭代 T T T次,每次迭代记为 i i i
    • 使用上次迭代的Actor( θ i − 1 \theta^{i-1} θi1)去与环境互动;
    • 得到状态-动作对数据: { s 1 , a 1 } , { s 2 , a 2 } , ⋯   , { s N , a N } \{s_1,a_1\},\{s_2,a_2\},\cdots,\{s_N,a_N\} {s1,a1},{s2,a2},,{sN,aN}
    • 评价这些动作的好坏:计算 A 1 , A 2 , ⋯   , A N A_1,A_2,\cdots,A_N A1,A2,,AN
    • 定义损失 L L L(该步以及下一步和梯度下降类似);
    • 更新网络参数: θ i ← θ i − 1 − η ∇ L \theta^i \leftarrow \theta^{i-1} -\eta \nabla L θiθi1ηL

算法重点的区别在于 A A A的定义。
这里要注意的是数据的收集是在训练循环内,通过上次迭代得到的网络来做的。

在这里插入图片描述
我们用图像化来表示,左边是收集到的数据,观测Actor在每个状态执行的动作,然后给予一个评价 A A A;然后拿这个评价定义一个损失来训练Actor;接着计算这个损失的梯度来更新一次Actor的参数;然后用更新后的Actor来重新收集数据;…

所以这样训练起来往往会耗时较久,因为我们在循环内还要执行收集数据这件事。

为什么我们每次要重新收集数据,而不是一直使用一份数据呢?
在这里插入图片描述
这里用一个简单的比喻,一个人的食物可能是另外一个人的毒药。
具体来说, θ i − 1 \theta^{i-1} θi1所获得的经验(收集到的数据)对 θ i \theta^i θi来说不一定是好的。

在这里插入图片描述
或者说, θ i − 1 \theta^{i-1} θi1的轨迹不一定会被 θ i \theta^i θi观测到。
假设它们都可以在 s 1 s_1 s1采取 a 1 a_1 a1;但可能在 s 2 s_2 s2后采取的行为就不一样了。

On-policy v.s. Off-policy

在这里插入图片描述

  • 同策略(On-policy) 要训练的actor和交互的actor是同一个;
  • 异策略(Off-policy) 要训练的actor和交互的actor不是同一个;

刚才我们介绍的是同策略的方法,其实还有一种是异策略的方法,用 θ i − 1 \theta^{i-1} θi1收集的数据来训练 θ i \theta^i θi。后者有一个显著的优势是我们不必在每次更新后重新收集数据。

近端策略优化(PPO)

异策略的重点是知道自己(actor)和别人(interact)的差距。

PPO后面再学习。

探索

在这里插入图片描述

强化学习有一个重要的概念是探索(Exploration),我们上面说采取行为的时候是需要一些随机性的,这个随机性非常重要。

假设你初始的Actor只会向右移动,永远不知道开火后会发生什么。只有某个Actor执行了开火动作,它才会知道原来开火可以得到更大的奖励,甚至才可以实现最终赢得游戏。

因此在训练时和环境互动的Actor本身的随机性非常重要,甚至此时的随机性要大一点我们才可以收集到比较丰富的数据。才不会有一些状态-动作的奖励从来都不知道。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nmap扫描工具流量特征

如果Nmap扫描探测服务过程中如有HTTP协议&#xff0c;则User-Agent也会有明显的特征。例如会出现nmap关键字。 但是User-Agent可以被修改&#xff0c;如果被修改的话&#xff0c;我们可以通过告警的次数进行判断&#xff08;同一源IP&#xff09;&#xff0c;看是否是大量的扫描…

产品经理与产品原型

1. 前言 互联网产品经理在向技术部门递交产品策划方案时,除了详尽的需求阐述,一份清晰易懂的产品原型设计方案同样不可或缺。一份出色的原型设计,不仅能促进前期的深入讨论,更能让美工和开发人员更直观地理解产品特性,进而优化工作流程,减少不必要的时间消耗,提升整体工…

主流公链 - BCH BSV BTG

为什么出现分叉 BTC是自由的&#xff0c;BTC社区也是自由的&#xff0c;自然而然的会出现不同观点的群体 1. 比特币现金&#xff08;Bitcoin Cash&#xff0c;BCH&#xff09; 分叉日期&#xff1a; 2017年8月1日主要目的&#xff1a; 提高比特币的交易吞吐量和降低交易费用技术…

ActiveMQ Artemis 系列| High Availability 主备模式(消息复制) 版本2.19.1

一、ActiveMQ Artemis 介绍 Apache ActiveMQ Artemis 是一个高性能的开源消息代理&#xff0c;它完全符合 Java Message Service (JMS) 2.0 规范&#xff0c;并支持多种通信协议&#xff0c;包括 AMQP、MQTT、STOMP 和 OpenWire 等。ActiveMQ Artemis 由 Apache Software Foun…

如何解决了“该虚拟机似乎正在使用中”问题

一、问题描述 1、在用VMware虚拟机的时候&#xff0c;有时会发现打开虚拟机时提示“该虚拟机似乎正在使用中。如果该虚拟机未在使用&#xff0c;请按“获取所有权(T)”按钮获取它的所有权。否则&#xff0c;请按“取消©”按钮以防损坏。配置文件: D:\win10x64\Windows 10…

Calico配置路由反射器 (RR) 模式

RR介绍 在 Calico 网络中&#xff0c;默认使用 Node-to-Node Mesh 全互联模式&#xff0c;即集群中的每个节点之间都会相互建立 BGP 连接&#xff0c;用于路由交换。然而&#xff0c;随着集群规模的扩大&#xff0c;全互联模式会导致连接数成倍增加&#xff0c;产生性能问题。为…

C++:梦的开始——创建第一个hello world(1)

我这里使用的编写代码的工具是Start Experimental Instance of Visual Studio 2022 你可以去微软的官网上寻找&#xff0c;并且安装 部署项目 项目就是一个文件夹&#xff0c;他将我们的数据都放到了里面&#xff0c;这就是一个项目 在Visual Studio 2022中 选择c 的空项目&a…

【python】flask模板渲染引擎Jinja2,流程控制语句与过滤器的用法剖析与实战应用

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

抖店怎么找达人?对接达人的方法是什么?如何建立沟通?

我是电商珠珠 大部分商家在找达人的时候&#xff0c;要么达人不理&#xff0c;要么被骗样品。总之&#xff0c;找了很多达人&#xff0c;一周能联系上的也许只有一两个&#xff0c;甚至一个都没有。尤其一些新手商家&#xff0c;连怎么找达人都不知道。 今天&#xff0c;我就…

球面数据的几何深度学习--球形 CNN

目录 一、说明二、球形 CNN概述三、球面数据的对称性四、标准&#xff08;平面&#xff09;CNN的局限性五、卷积并发症六、球面卷积七、球面卷积是不够的 一、说明 球面数据的几何深度学习–球形 CNN。通过对物理世界的平移对称性进行编码&#xff0c;卷积神经网络 &#xff0…

C++中 eigen(一)建造向量

快速上手&#xff1a; https://eigen.tuxfamily.org/dox/group__QuickRefPage.html 文档&#xff1a; https://eigen.tuxfamily.org/dox/index.html Constructors 建造 向量 Vectors 向量 例如&#xff0c;方便的 typedef Vector3f 是一个包含 3 个浮点数的&#xff08;列&a…

2024最新版克魔助手抓包教程(9) - 克魔助手 IOS 数据抓包

引言 在移动应用程序的开发中&#xff0c;了解应用程序的网络通信是至关重要的。数据抓包是一种很好的方法&#xff0c;可以让我们分析应用程序的网络请求和响应&#xff0c;了解应用程序的网络操作情况。克魔助手是一款非常强大的抓包工具&#xff0c;可以帮助我们在 Android …

借鉴LangChain思想使用Java实现大模型Function_Call工具开发及调用功能

关注公众号&#xff0c;回复“工具调用”获取代码。 背景 博主之前研究的是ChatGLM3模型&#xff0c;该模型提供了Openai方式调用工具的代码。但后续转到Qwen1.5模型后&#xff0c;好像不可以直接用Openai接口的方式调用工具了。 然后&#xff0c;博主研究了Qwen-Agent框架&a…

如何备考2024年AMC10:吃透2000-2023年1250道真题(限时免费送)

有家长朋友问&#xff0c;有没有适合初中学生参加的奥数类比赛&#xff1f;我推荐AMC10美国数学竞赛&#xff0c;在国内可以方便地参加&#xff0c;而且每年全国各省市参加的初中生越来越多。关于AMC10详细的介绍和常见问题解答&#xff0c;可以联系我获得。 那么如何在AMC10竞…

【智能算法】流向算法(FDA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2021年&#xff0c;H Karami等人受到水流运动规律启发&#xff0c;提出了流向算法&#xff08;Flow Direction Algorithm&#xff0c; FDA&#xff09;。 2.算法原理 2.1算法思想 FDA受到了流入排…

Jenkins用户角色权限管理

Jenkins作为一款强大的自动化构建与持续集成工具&#xff0c;用户角色权限管理是其功能体系中不可或缺的一环。有效的权限管理能确保项目的安全稳定&#xff0c;避免敏感信息泄露。 1、安装插件&#xff1a;Role-based Authorization Strategy 系统管理 > 插件管理 > 可…

第十一章:位运算符与位运算

文章目录 第十一章&#xff1a;位运算符与位运算1.按位与运算&#xff1a;&2.按位或运算&#xff1a;|3.按位异或运算&#xff1a;^4.取反运算符&#xff1a;~5.左移运算符&#xff1a;<<6.右移运算符&#xff1a;>>总结 第十一章&#xff1a;位运算符与位运算…

StringRedisTemplate与RedisTemplate详解【序列化的方式不同】

spring 封装了 RedisTemplate 对象来进行对redis的各种操作&#xff0c;它支持所有的 redis 原生的 api。在RedisTemplate中提供了几个常用的接口方法的使用&#xff0c;分别是: private ValueOperations<K, V> valueOps; private HashOperations<K, V> hashOps; …

回文数个数-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第43讲。 回文数个数&#…

Unity 学习日记 12.小球撞击冰块游戏

目录 1.准备场景 2.让小球动起来 3.用鼠标把小球甩出去 4.加入鼠标点击小球的判断 5.小球与冰块的碰撞测试 6.撞击后销毁冰块 ​编辑 7.显示游戏计时 8.显示扔球次数 9.显示剩余冰块个数 10.游戏结束 11.完整代码 下载源码 UnityPackage 最终效果&#xff1a; 1.准…