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

news2024/12/25 3:24:03

引言

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

如何控制你的智能体

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

  • 如何定义这些分数 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.coloradmin.cn/o/1549548.html

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

相关文章

栈和队列.

目录 1.栈 1.1栈的概念及结构 1.2栈的实现 2.队列 2.1队列的概念及结构 2.2 队列的实现 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底…

【数据库管理操作】Mysql 创建学生数据库及对数据表进行修改

MySQL 创建学生成绩数据库 1.创建数据库 create database studentscore;创建完成之后&#xff0c;如果需要使用该数据&#xff0c;使用use命令 use studentscore;创建表前查看当前数据库中包含的表 show tables; 2.创建bclass表 create table bclass( class_id char(8) …

python 客户管理系统 增删改查 以及 用户带权限的功能。

# readme1、csss.py文件 &#xff0c;他是一个初始化程序&#xff0c;只运行一次即可 2、有一个目录是data,他是保存客户信息和用户信息 3、customer.py保存了一个客户类 4、user.py保存了一个用户类 5、main.py是客户信息管理程序&#xff0c;可以添加客户信息&#xff0c;删除…

7.JDK下载和安装

文章目录 一、下载二、安装三、JDK的安装目录介绍 写JAVA代码不是随随便便能写的&#xff0c;我们得先做一点准备工作。例如&#xff0c;我们平时想要玩一把游戏&#xff0c;就需要先下载、安装才能玩游戏。JAVA也是一样的&#xff0c;也是需要下载并安装相关的软件&#xff0c…

win10休眠功能误删了

背景&#xff1a; 今天用某电脑管家清理C盘&#xff0c;不小心把休眠文件给删了&#xff0c;结果电脑失去了休眠功能。这玩意对我太重要了&#xff0c;我合上盖子就是要电脑休眠带走的。于是开始找办法&#xff0c;终于在官网找到了。并且恢复成功。 话不多说直接上技能&#…

浏览器如何渲染页面

浏览器渲染页面的过程是一个多步骤的复杂流程&#xff0c;下面我将通过一个简单的例子来逐步说明这一过程&#xff1a; 以下是浏览器渲染该页面的主要步骤&#xff1a; 请求HTML文档&#xff1a; 用户在浏览器中输入URL并回车&#xff0c;浏览器向服务器发送HTTP请求。 服务器…

Spring面试题整理(持续更新)

Spring框架中的单例Bean是线程安全的吗&#xff1f; Spring中的Bean默认是单例模式的&#xff0c;框架并没有对bean进行多线程的封装处理。如果Bean是有状态的 那就需要开发人员自己来进行线程安全的保证&#xff0c;最简单的办法就是改变bean的作用域 把 "singleton"…

【YOLOv5改进系列(5)】高效涨点----添加密集小目标检测NWD方法

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ 修改loss.py文件1.1 &#x1f393; 修改11.2 ✨ 修改21.3 ⭐️相关代码的解释 二、2️⃣NWD实验2.1 &#x1f393; 实验一&#xff1a;基准模型2.2 ✨实验二&#xff1a;NWD权重设置0.52.3 ⭐️实验三&#xf…

安捷伦Agilent E5071B网络分析仪

181/2461/8938产品概述&#xff1a; Agilent E5071B 网络分析仪可为射频组件提供快速、准确的测量。与同类网络分析仪相比&#xff0c;其宽动态范围和低迹线噪声可实现更高的测试质量和吞吐量。内置 2、3 和 4 个测试端口可同时测量具有最多四个端口的组件的所有信号路径。Agi…

大促销活动时期如何做好DDoS防护?

每一次活动大促带来的迅猛流量&#xff0c;对技术人而言都是一次严峻考验。如果在活动期间遭受黑产恶意DDoS攻击&#xff0c;无疑是雪上加霜。电商的特性是业务常态下通常不会遭受大流量DDoS攻击&#xff0c;且对延迟敏感&#xff0c;因此只需要在活动期间按需使用DDoS防护。本…

设置asp.net core WebApi函数输入和返回类型中的属性名称开头大小写格式

以下列类型定义为例创建简单的ASP.NET Core的WebApi函数&#xff0c;此时输入参数和返回结果的属性名称开头默认为小写&#xff0c;如下图所示。 public class UserInfo { public string UserName { get; set; }public string UserSex { get; set; }public string UserP…

腾讯云免费云服务器申请流程详解

随着云计算的普及&#xff0c;越来越多的企业和个人开始选择使用云服务器。腾讯云作为国内领先的云计算服务提供商&#xff0c;为用户提供了丰富的云产品和服务。本文将为大家详细介绍腾讯云免费云服务器的申请流程。 一、注册腾讯云账号 首先&#xff0c;需要注册一个腾讯云账…

Qt 压缩/解压文件

前面讲了很多Qt的文件操作&#xff0c;文件操作自然就包括压缩与解压缩文件了&#xff0c;正好最近项目里要用到压缩以及解压缩文件&#xff0c;所以就研究了一下Qt如何压缩与解压缩文件。 QZipReader/QZipWriter QZipReader 和 QZipWriter 类提供了用于读取和写入 ZIP 格式文…

Healix Protocol 的 HLX 通证预售:医疗领域的未来展望

Healix Protocol推出 HLX 通证预售&#xff0c;将带来医疗领域的重要变革。通过其区块链技术&#xff0c;Healix Protocol致力于重新定义医疗服务的可及性与负担性&#xff0c;成为医疗行业的希望之光。该项目旨在增强透明度、可及性和效率&#xff0c;推动医疗体系向更加公平和…

Shut down, sleep, or hibernate your PC 关闭、睡眠或休眠

最近一段时间没有整服务器了~自己开始捉摸18年买的笔记本-x280&#xff0c;除了发现usb type c和thunderbolt 3接口的不一样外&#xff0c;也开始研究这个待机的功能了~找了官方文档&#xff0c;做个简易的翻译&#xff0c;给大家一起看看学习把。 关于Windows的 “睡眠” 和 …

【网络】:数据链路层

数据链路层 一.以太网帧格式二.认识MTU三.ARP协议1.ARP协议的工作流程2.ARP数据报的格式3.ARP欺骗 四.其他重要协议或技术1.DNS2.ICMP协议3.NAT技术&#xff08;重点&#xff09;4.代理服务器 五.一些问题 认识以太网 “以太网” 不是一种具体的网络, 而是一种技术标准; 既包含…

mysql 索引 B+tree

B树&#xff08;BTree&#xff09;&#xff1a; 结构&#xff1a; B树是一种自平衡的多路查找树&#xff0c;每个节点可以拥有M个子节点&#xff08;M通常是一个较大的常数&#xff0c;比如几百&#xff09;&#xff0c;每个节点最多含有M-1个键和M个指向子节点的指针。叶子节点…

C++类模板详解

在学习类模板之前可以了解一下函数模板&#xff0c;可以参考我的另一篇文章C函数模板详解&#xff08;结合代码&#xff09;-CSDN博客 讲解的比较详细&#xff0c;有助于理解类模板。 目录 1、什么是类模板&#xff1f; 2、类模板与函数模板区别 3、类模板对象做函数参数 …

《早起的奇迹》要么躺在床上等待生活的暴击,要么早起创造奇迹 - 三余书屋 3ysw.net

精读文稿 今天我们讲述的是关于《早起的奇迹》。通过神奇的早起&#xff0c;我们可以获得改变人生的力量。首先我要给你讲一个故事&#xff0c;这个故事的主人公是一个年轻人&#xff0c;他在少年时就取得了巨大的成就&#xff0c;在15岁时他已经拥有了自己的电台节目&#xff…