狗都能看懂的Actor-Critic强化学习算法讲解

Review Policy Gradient

review policy gradient.png

上面的公式是Policy Gradient的更新函数,这个式子是指在 s t s_t st时刻采取了 a t a_t at,计算出对应发生的概率 p θ p_\theta pθ,然后计算在采取了这个 a t a_t at之后,所得到的reward有多大。但这里需要减去一个baseline,不能让reward都大于0,这样会降低没有sample到的action的概率。同时还需要加上衰减因子,保证后期得到的reward不会过大,从而影响了一开始的action概率。最后把所有时刻的reward求和。

我们将画蓝色横线的式子记作 G t n G_t^n Gtn,它虽然没有偏差,但因为方差大,数值波动比较大。波动大的原因也很好理解, G t n G_t^n Gtn从执行了这个action之后到episode结束得到的所有reward总和,由于sample的概率不相同,所以中间会遇到各种不同的state。

如果我们收集数据的数量足够多,这个波动会被平均掉。但实际收集数据是比较耗时,所以也不会有太多数据。如果说能用期望值(平均)替代 G t n G_t^n Gtn,那可以让训练过程更稳定。这里就需要引入Value-Based的方法。

Review Q-Learning

review q-learning.png

Value-Based的方法有两种:

  • V π ( s ) V^{\pi}(s) Vπ(s)输入state,输出可能会得到reward的期望值
  • Q π ( s , a ) Q^{\pi}(s,a) Qπ(s,a)输入state和会采取的action,输出可能会得到reward的期望值

以上两个方法都可以用TD或MC的方法更新,用TD比较稳定,用MC更精确。

Actor Critic

Actor Critic.png

刚刚说到,如果能用期望值(平均)替代 G t n G_t^n Gtn,训练会更加稳定。那 G t n G_t^n Gtn的期望值是什么?它是希望在 s t s_t st时刻,用 π \pi π这个策略得到 a t a_t at,执行了 a t a_t at之后所得到的reward总和的期望值,那这个其实就是 Q π θ ( s t n , a t n ) Q^{\pi_\theta}(s^n_t,a^n_t) Qπθ(stn,atn)的定义。所以有:
E [ G t n ] = Q π θ ( s t n , a t n ) E[G_t^n] = Q^{\pi_\theta}(s^n_t,a^n_t) E[Gtn]=Qπθ(stn,atn)
那么我们用 Q π θ ( s t n , a t n ) Q^{\pi_\theta}(s^n_t,a^n_t) Qπθ(stn,atn)替代 G t n G_t^n Gtn这一项即可。还有一项baseline,正常是自己设置,但这里我们可以用Value Function替代, V ( s ) V(s) V(s)是不包含action的, Q ( s , a ) Q(s,a) Q(s,a)是包含action的, V ( s ) V(s) V(s) Q ( s , a ) Q(s,a) Q(s,a)的期望值,为什么这么说呢?原因是这样的:

  • s t s_t st下,价值函数 V π ( s ) V^\pi(s) Vπ(s)表示从状态 s t s_t st开始,遵循策略 π \pi π的期望回报。
  • 由于策略 π \pi π定义了在 s t s_t st下采取各个action的概率分布,因此,价值函数 V π ( s ) V^\pi(s) Vπ(s)可以看作是动作价值函数 Q ( s , a ) Q(s,a) Q(s,a)在所有可能动作上的加权平均,即期望值。

所以上图红框内的式子就可以被Value-Based的两个方法给替换掉,这样就可以将Actor和Critic的两个方法给结合起来。

Advantage Actor Critic

Advantage Actor-Critic-1.png

这样结合的缺点就是需要训练两个网络,有办法可以只训练一个网络用来预测两个值吗?可以,事实上可以只训练 V ( s ) V(s) V(s),用 V ( s ) V(s) V(s)替代 Q ( s , a ) Q(s,a) Q(s,a)。回到 Q ( s , a ) Q(s,a) Q(s,a)的定义,因为 r t r_t rt本身是一个随机值,只有我们取了期望值之后才是 Q ( s , a ) Q(s,a) Q(s,a)的定义。现在为了简化Actor-Critic的训练,直接将求期望值去掉。这样就可以用 V ( s ) V(s) V(s)替代 Q ( s , a ) Q(s,a) Q(s,a)

但这样做的坏处也显而易见,是引入了一个随机的变量。但不过相较于 G t n G_t^n Gtn来说还好, r t r_t rt只是某一个step会有的随机变量,方差会比 G t n G_t^n Gtn小的多。所以整体上还是能接受的。

Advantage Actor-Critic-2.png

红框里面是原来的Advantage项,已经用Value-Based的方法替代了。那么Advantage Actor-Critic完整流程如上图:

  1. 有一个Policy π \pi π 和环境做互动收集训练数据。(Policy Gradient中是用这些训练数据直接优化Policy)
  2. 用TD或MC优化 V ( s ) V(s) V(s)
  3. 套用上面的公式更新Policy π \pi π
  4. 重复1-3直至收敛

Tips

Advantage Actor-Critic-3.png

backbone shared

和很多CV任务一样,前面的特征提取都是可以共享的。然后预测action和预测value分成两个分支,这部分和Dueling DQN很像,只是最后没有合并成一个 Q ( s , a ) Q(s,a) Q(s,a)

large entropy

我们可以设置一些限制,使得action的entropy会大一点,不同的action被采用的概率平均一些,才会有几率探索更多state,得到比较好的结果。

asynchronous

强化学习通常花时间都是在收集训练数据过程中。开多个线程与环境做互动收集数据可以有效缩短训练时间。

Asynchronous Advantage Actor-Critic

Asynchronous.png

Asynchronous Advantage Actor-Critic简称为A3C,具体如何实现?

首先有一个初始的global network

  1. 复制N个network
  2. 让它们都和环境做互动,收集数据
  3. 计算梯度
  4. 更新模型

这里值得注意的是,所有的actor都是并行去收集,训练,更新的。可能有人问,如果复制出来的参数是 θ 1 \theta^1 θ1,但是要更新的时候已经被别覆盖成 θ 2 \theta^2 θ2了呢?这个没关系,直接覆盖就行。

Pathwise Derivative Policy Gradient

Pathwise Derivative Policy Gradient.png

之前说到Q-Learning在连续的问题上表现不好。我们完全可以利用Actor预测action的能力,为 Q π Q^\pi Qπ提供action,使得 Q π Q^\pi Qπ的值越大越好。在训练的时候会直接将两个网络连起来,并且freeze Q π Q^\pi Qπ的参数,只训练Actor,这个思路和CV任务里的GAN很像,用生成器生成一个图片,用判别器去判断是好是坏。

Pathwise Derivative Policy Gradient-2.png

算法的流程也很简单,有一个 π \pi π去和环境交互,收集数据,训练 Q π Q^\pi Qπ,然后将 Q π Q^\pi Qπ固定,只训练actor使得 Q π Q^\pi Qπ输出的值越大越好。在Q-Learning中能用到的trick,这里也能用上,比如replay buffer等。

Algorithm.png

相较于之前的Q-Learning算法,改动四个地方就行:

  1. 之前使用 Q π Q^\pi Qπ决定用什么action,现在改用 π \pi π来预测action
  2. π ^ \hat{\pi} π^预测的action代入到 Q π Q^\pi Qπ中,不再解 a r g max ⁡ a Q π ( s , a ) arg \max\limits_{a} \ Q^\pi(s,a) argamax Qπ(s,a)(会有两个 π \pi π,其中一个是固定的,和训练DQN是一样的)
  3. 训练 π \pi π(其优化目标是让 Q π Q^\pi Qπ越大越好)
  4. 更新 π \pi π的参数

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

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

相关文章

table car vs. table cars:数据库命名用单数还是复数?

数据库的命名方式已经形成了许多共识,比如全部小写、下划线分隔、使用标准缩写等;其中就包括「使用单数名词」。 用户 jonr 在 reddit 网的程序员笑话(ProgrammerHumor)社区发了一篇帖子,调侃这些数据库命名方式的共识…

Hive3:基本介绍

一、概述 Apache Hive是一款分布式SQL计算的工具, 其主要功能是: 将SQL语句翻译成MapReduce程序运行 二、基本逻辑简介 主要由两大模块组成:元数据管理,SQL解析器 1、元数据管理 即:数据位置信息、数据结构信息、…

在jmeter中使用javascript脚本

工作上遇到一个压力测试的需求,需要测试几个考试相关的接口。其中有一个获取试题详情的接口,和一个提交答题信息的接口。后一个接口以上一接口的返回内容为参数,添加上用户的答案即可。jmeter提供了非常多的方式可以实现该需求,这…

Multi Range Read与Covering Index是如何优化回表的?

上篇文章末尾我们提出一个问题:有没有什么办法可以尽量避免回表或让回表的开销变小呢? 本篇文章围绕这个问题提出解决方案,一起来看看MySQL是如何优化的 回表 为什么会发生回表? 因为使用的索引并没有整条记录的所有信息&…

Vue3 Pinia/组件通信

2. pinaia 符合直觉的Vue.js状态管理库 集中式状态(数据)管理 官网 2.1 搭建pinaia环境 第一步:npm install pinia 第二步:操作src/main.ts import { createApp } from vue import App from ./App.vue/* 引入createPinia&…

案例分析:人工智能在航空航天领域的应用

作者主页: 知孤云出岫 目录 作者主页:案例分析:人工智能在航空航天领域的应用引言人工智能在航空航天中的主要应用案例分析案例一:AI优化航天器设计案例二:AI辅助飞行安全——预测维护案例三:AI自动驾驶系统案例四:A…

关键词查找【Boyer-Moore 算法】

1、【Boyer-Moore 算法】 【算法】哪种算法有分数复杂度?- BoyerMoore字符串匹配_哔哩哔哩_bilibili BM算法的精华就在于BM(text, pattern),也就是BM算法当不匹配的时候一次性可以跳过不止一个字符。即它不需要对被搜索的字符串中的字符进行逐一比较,而…

探索算法系列 - 滑动窗口

目录 长度最小的子数组(原题链接) 无重复字符的最长子串(原题链接) 最大连续1的个数 III(原题链接) 将 x 减到 0 的最小操作数(原题链接) 水果成篮(原题链接&#x…

第六章:支持向量机

目录 6.1 间隔与支持向量 6.2 对偶问题 6.3 核函数 6.4 软间隔与正则化 6.4.1 软间隔 6.4.2 正则化 6.5 支持向量回归 6.6 核方法 6.1 间隔与支持向量 分类学习最基本的想法就是基于训练集D在样本空间中找到一个划分超平面,将不同类别的样本分开.但能将训练样本分开的…

【宝藏系列】模/数转换十大常用滤波算法

【宝藏系列】模/数转换十大常用滤波算法 文章目录 【宝藏系列】模/数转换十大常用滤波算法👨‍🏫ADC(Analog-to-Digital Converter,模数转换器)1️⃣限幅滤波法2️⃣中位值滤波法3️⃣算术平均滤波法4️⃣递推平均滤波…

PLC通过IGT-SER系列智能网关快速实现WebService接口调用案例

IGT-SER系列智能网关支持PLC设备数据对接到各种系统平台,包括SQL数据库,以及MQTT、HTTP协议的数据服务端;通过其边缘计算功能和脚本生成的工具软件,非常方便快速实现PLC、智能仪表与WebService服务端通信。 本文是通过智能网关读取…

Ubuntu 22.04.4 LTS (linux) GoAccess 分析 Nginx 日志

1 安装goaccess sudo apt-get update sudo apt-get install goaccess 2 控制台运行 goaccess -a -d -f /usr/local/openresty/nginx/logs/access.log -p /etc/goaccess/goaccess.conf #sudo vim /etc/goaccess/goaccess.conf time-format %H:%M:%S date-format %d/%b…

van-dialog 组件调用报错

报错截图 报错原因 这个警告表明 vue 在渲染页面时遇到了一个未知的自定义组件 <van-dialog>&#xff0c;并且提示可能是由于未正确注册该组件导致的。在 vue 中&#xff0c;当我们使用自定义组件时&#xff0c;需要先在 vue 实例中注册这些组件&#xff0c;以便 vue 能…

Emacs之解决无法输入中文问题(一百四十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列…

基于YOLO8的目标检测系统:开启智能视觉识别之旅

文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 target_dec_app.py 二、核心代码介绍篇2.1 target_dec_app.py2.2 scan_taskflow.py 三、结语 在线体验 基于YOLO8的目标检测系统 基于opencv的摄像头…

Provisional headers are shown Learn more

Provisional headers are shown Learn more 目录 Provisional headers are shown Learn more 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医…

什么情况下的网站要使用CDN加速呢?

CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。 CDN的通俗理解就是网站加速&#xff0c;CPU均衡负载&#xff0c;可以解决跨运营商&#xff0c;跨地区&#xff0c;服务器负载能力过低&#xff0c;带宽过少等带来的网站打开速度慢等问题。 原理就是在客户端…

如何解除maven打包编译的警告日志:[WARNING] 未与 -source 21 一起设置系统模块的位置

在用jdk较高的版本进行maven项目的打包编译时&#xff0c;经常遇到类似“[WARNING] 未与 -source 21 一起设置系统模块的位置”这样的警告日志&#xff0c;如下&#xff1a; 网上大量搜索该问题的解决方案&#xff0c;却未果&#xff0c;无耐去看了官网的用法&#xff0c;才获得…

Java项目中整合多个pdf合并为一个pdf

一、Java项目中整合多个pdf合并为一个pdf gitee笔记路径&#xff1a;https://gitee.com/happy_sad/drools一、依赖导入 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.6</version> …

ts 下使用 interactjs 的时候,事件类型该如何定义 InteractEvent

ts 下使用 interactjs 的时候&#xff0c;事件类型该如何定义 InteractEvent 一、问题 interactjs 是一个很好用的给元素添加拖动事件的插件&#xff0c;它可以实现如下的效果。 其官网是 https://interactjs.io/ vitetsvue3 项目中用到了 interactjs 这个库&#xff0c;但在…