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

引言

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

如何控制你的智能体

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

  • 如何定义这些分数 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本身的随机性非常重要,甚至此时的随机性要大一点我们才可以收集到比较丰富的数据。才不会有一些状态-动作的奖励从来都不知道。

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

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

相关文章

11.数据库技术(上)

函数依赖、规范化这类难的知识点&#xff0c;考的少&#xff1b; 基本概念、sql语句、关系代数运算、关系代数运算与sql语句的转换&#xff0c;考的多&#xff1b; 主要议题&#xff1a;

redis实际应用场景及并发问题的解决

业务场景 接下来要模拟的业务场景: 每当被普通攻击的时候&#xff0c;有千分之三的概率掉落金币&#xff0c;每回合最多爆出两个金币。 1.每个回合只有15秒。 2.每次普通攻击的时间间隔是0.5s 3.这个服务是一个集群&#xff08;这个要求暂时不实现&#xff09; 编写接口&…

如果有意外,这个窗口就会弹出,希望你们能够看到!——夜读(逆天打工人爬取热门微信文章解读)

第一个日二更 引言Python 代码第一篇 定时任务运行结果 第二篇 人民日报 【夜读】最好的教养&#xff0c;是对家人和颜悦色结尾 时间不会无缘无故增加 也不会无缘无故减少 我们唯一能够控制就是 加大时间的密度 引言 为了不让我在大庭广众下大喊我是沙比 我来更新文章啦 这次带…

nysm:一款针对红队审计的隐蔽型后渗透安全测试容器

关于nysm nysm是一款针对红队审计的隐蔽型后渗透安全测试容器&#xff0c;该工具主要针对的是eBPF&#xff0c;能够帮助广大红队研究人员在后渗透测试场景下保持eBPF的隐蔽性。 功能特性 随着基于eBPF的安全工具越来越受社区欢迎&#xff0c;nysm也应运而生。该工具能保持各种…

帮企建站宝响应式建站源码系统 带完整安装代码包以及搭建教程

在当今数字化时代&#xff0c;拥有一个功能强大且用户友好的网站是企业成功的重要基石。为了满足广大企业对于快速搭建高质量网站的需求&#xff0c;罗峰给大家分享一款“帮企建站宝响应式建站源码系统”。这一系统不仅包含了完整的安装代码包&#xff0c;还配备了详尽的搭建教…

数据库系统概论(超详解!!!) 第四节 关系数据库标准语言SQL(Ⅲ)

1.连接查询 连接查询&#xff1a;同时涉及多个表的查询 连接条件或连接谓词&#xff1a;用来连接两个表的条件 一般格式&#xff1a; [<表名1>.]<列名1> <比较运算符> [<表名2>.]<列名2> [<表名1>.]<列名1> BETWEEN [&l…

QT(6.5) cmake构建C++编程,调用python (已更新:2024.3.23晚)

一、注意事项 explicit c中&#xff0c;一个参数的构造函数(或者除了第一个参数外其余参数都有默认值的多参构造函数)&#xff0c;承担了两个角色&#xff0c;构造器、类型转换操作符&#xff0c; c提供关键字explicit&#xff0c;阻止转换构造函数进行的隐式转换的发生&#…

mysql增量备份与修复

MySQL数据库增量恢复 1.一般恢复 将所有备份的二进制日志内容全部恢复 2.基于位置恢复 数据库在某一时间点可能既有错误的操作也有正确的操作 可以基于精准的位置跳过错误的操作 发生错误节点之前的一个节点&#xff0c;上一次正确操作的位置点停止 3.基于时间点恢复 跳过…

Java面试篇:Redis使用场景问题(缓存穿透,缓存击穿,缓存雪崩,双写一致性,Redis持久化,数据过期策略,数据淘汰策略)

目录 1.缓存穿透解决方案一:缓存空数据解决方案二&#xff1a;布隆过滤器 2.缓存击穿解决方案一:互斥锁解决方案二:设置当前key逻辑过期 3.缓存雪崩1.给不同的Key的TTL添加随机值2.利用Redis集群提高服务的可用性3.给缓存业务添加降级限流策略4.给业务添加多级缓存 4.双写一致性…

2015年认证杯SPSSPRO杯数学建模C题(第一阶段)荒漠区动植物关系的研究全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 C题 荒漠区动植物关系的研究 原题再现&#xff1a; 环境与发展是当今世界所普遍关注的重大问题, 随着全球与区域经济的迅猛发展, 人类也正以前所未有的规模和强度影响着环境、改变着环境, 使全球的生命支持系统受到了严重创伤, 出现了全球变暖…

C++动态内存管理:new/delete与malloc/free的对比

在C中&#xff0c;动态内存管理是一个至关重要的概念。它允许我们在程序运行时根据需要动态地分配和释放内存&#xff0c;为对象创建和销毁提供了灵活性。在C中&#xff0c;我们通常会用到两对工具&#xff1a;new/delete 和 malloc/free。虽然它们都能够完成类似的任务&#x…

Windows如何搭建 ElasticSearch 集群

单机 & 集群 单台 Elasticsearch 服务器提供服务&#xff0c;往往都有最大的负载能力&#xff0c;超过这个阈值&#xff0c;服务器 性能就会大大降低甚至不可用&#xff0c;所以生产环境中&#xff0c;一般都是运行在指定服务器集群中。 除了负载能力&#xff0c;单点服务器…

map china not exists. the geojson of the map must be provided.

map china not exists. the geojson of the map must be provided. 场景&#xff1a;引入echarts地图报错map china not exists. the geojson of the map must be provided. 原因&#xff1a; echarts版本过高&#xff0c;ECharts 之前提供下载的矢量地图数据来自第三方&…

[LeetCode]LCR 081. 组合总和

题目 思路 先找出数组中最小元素&#xff0c;与目标数比较&#xff1a; 若目标数小&#xff0c;则无组合可能&#xff1b; 若相等&#xff0c;则输出该最小元素&#xff1b; 若目标数大&#xff0c;则寻找一元素的组合可能&#xff0c;寻找二元素的组合可能 以candidates [2,3…

Future机制实际应用

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 常见的两种创建线程…

vue-office/docx插件实现docx文件预览

1.下包 //预览docx文件 npm install vue-office/docx vue-demi//如果是vue2.6版本或以下还需要额外安装 vue/composition-api2.引入 <template><div>//在src填入文档地址<VueOfficeDocx srchttp://...../xx.docx style"width:80%" rendered"re…

C++ 3.25作业

1、定义自己的命名空间&#xff0c;其中有string类型的变量&#xff0c;再定义两个函数&#xff0c;一个函数完成字符串的输入&#xff0c;一个函数完成求字符串长度&#xff0c;再定义一个全局函数完成对该字符串的反转 #include <iostream>using namespace std;namesp…

如何从外网访问内网服务器?

在网络通信中&#xff0c;内网服务器指的是位于私有网络内部的服务器&#xff0c;它们可以提供各种服务&#xff0c;如网站、应用程序等。由于安全性的考虑&#xff0c;内网服务器通常无法直接从外部网络访问。本文将介绍如何通过使用【天联】组网来实现从外网访问内网服务器的…

基于Spring Boot+Vue的美食推荐商城系统

末尾获取源码作者介绍&#xff1a;大家好&#xff0c;我是墨韵&#xff0c;本人4年开发经验&#xff0c;专注定制项目开发 更多项目&#xff1a;CSDN主页YAML墨韵 学如逆水行舟&#xff0c;不进则退。学习如赶路&#xff0c;不能慢一步。 目录 一、项目简介 二、开发技术与环…

Element-Plus下拉菜单边框去除教程

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…