【深度强化学习】策略梯度方法:REINFORCE、Actor-Critic

2023-12-17 13:04

本文主要是介绍【深度强化学习】策略梯度方法:REINFORCE、Actor-Critic,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考 
Reinforcement Learning, Second Edition  
An Introduction 
By Richard S. Sutton and Andrew G. Barto

非策略梯度方法的问题

之前的算法,无论是 MC,TD,SARSA,Q-learning, 还是 DQN、Double DQN、Dueling DQN,有至少两个问题:

  1. 都是处理离散状态、离散动作空间的问题,当需要处理连续状态 / 连续动作的时候,如果要使用这些算法,就只能把状态 / 动作离散化处理,这会导致实际相邻的 Q ( s , a ) Q(s,a) Q(s,a) 的值没有联系,变化不光滑,并且随着离散空间变大,max 的比较操作需要的计算量增大,这导致不能把离散化的分辨率无限地增高。
  2. 都利用对 V π V_\pi Vπ Q π Q_\pi Qπ arg max ⁡ a \argmax_a argmaxa 来得到策略 π \pi π,会导致只会选最优的动作,尽管有次优的动作,算法也不会去选,只会选最好的,在某些需要随机性的场景(如:非完全信息博弈(军事、牌类游戏))会产生大问题,因为行为比较有可预测性,很容易被针对。(即使有 ϵ \epsilon ϵ-贪心)

在非完全信息的纸牌游戏中,最优的策略一般是以特定的概率选择两种不同玩法,例如德州扑克中的虚张声势

我们想要的是右边的策略,它能够给出一个所有动作概率都介于(0,1)的分布,并从中进行随机采样一个动作,而不是只有一个动作的值是最突出的

策略梯度

策略梯度可以同时解决以上两个问题。
我们将策略参数化为 π ( a ∣ s , θ ) \pi(a|s, \theta) π(as,θ)(可以是简单的线性模型+softmax,也可以是神经网络),这个策略可以被关于 θ \theta θ求导: ∇ θ π ( a ∣ s , θ ) \nabla_\theta \pi(a|s,\theta) θπ(as,θ),简写为 ∇ π ( a ∣ s ) \nabla \pi(a|s) π(as)

策略梯度的直觉

我们实际上想找到一个更新策略 π ( a ∣ s , θ ) \pi(a|s,\theta) π(as,θ) 的方法,它在 θ \theta θ参数空间里面:

  • 如果往一个方向走,能对给定的 ( s t , a t ) (s_t,a_t) (st,at)获得正的回报 G t G_t Gt,就往这个方向走,并且回报绝对值越大走的步子越大
  • 如果往一个方向走,能对给定的 ( s t , a t ) (s_t,a_t) (st,at)获得负的回报 G t G_t Gt,就不往这个方向走,并且回报绝对值越大走的步子越大

和梯度下降类似,可以得到:
θ t + 1 ← θ t + α G t ∇ π ( a t ∣ s t ) \theta_{t+1} \leftarrow \theta_t + \alpha G_t \nabla \pi(a_t|s_t) θt+1θt+αGtπ(atst)

除以 π \pi π 变成 Ln

单纯这样更新会有问题,因为如果 π \pi π被初始化为存在一个次优动作(具有正回报),并且概率很大,而最优动作的概率很小,那么这个次优动作就很可能被不断地强化,导致无法学习到最优动作。

如果有三个动作,奖励是10,5,-7,对应的概率和箭头长度相同,那么5这个动作会被不断强化,因为它的初始采样概率很大
因此我们要除一个动作的概率,得到修正后的版本:

θ t + 1 ← θ t + α G t ∇ π ( a t ∣ s t ) π ( a t ∣ s t ) \theta_{t+1} \leftarrow \theta_t + \alpha G_t \frac{\nabla \pi(a_t|s_t)}{\pi(a_t|s_t)} θt+1θt+αGtπ(atst)π(atst)

也就是
θ t + 1 ← θ t + α G t ∇ ln ⁡ π ( a t ∣ s t ) \theta_{t+1} \leftarrow \theta_t + \alpha G_t \nabla \ln{\pi(a_t|s_t)} θt+1θt+αGtlnπ(atst)

REINFORCE

如果这个 G t G_t Gt 是由 MC 采样整个序列得到的,那么就得到了 REINFORCE 算法:
在这里插入图片描述

带基线的 REINFORCE

在这里插入图片描述
唯一的区别:TD target 从 G t G_t Gt 变成 G t − v ^ ( S t , w ) G_t - \hat v(S_t,\mathbf{w}) Gtv^(St,w),并且多一个价值网络,也进行跟更新。
好处:

  1. 减小方差
  2. 加快收敛速度

基线的直觉:
把 TD target 从全为正变成有正有负,更新的时候更有区分度。

Actor-Critic

在这里插入图片描述
再把 TD target 变化一下,从多步(MC)变成单步(TD),其他和 REINFORCE 一样。
之所以叫做 Actor-Critic 就是把基线 v ^ ( S , w ) \hat v(S,\mathbf{w}) v^(S,w) 当作评论家,它评价状态的好坏;而 π ( A ∣ S ) \pi(A|S) π(AS) 当作演员,尝试去按照评论家的喜好(体现为 TD target 用评论家来进行估计)来做动作。

总结

REINFORCE:MC,更新慢
δ = G t \delta =\red{ G_t} δ=Gt
θ t + 1 ← θ t + α δ ∇ ln ⁡ π ( A t ∣ S t ) \theta_{t+1} \leftarrow \theta_t + \alpha \delta \nabla \ln{\pi(A_t|S_t)} θt+1θt+αδlnπ(AtSt)
基线 REINFORCE:MC,更新慢,但是有基线,方差较小,收敛快,调参难度大一些
δ = G t − v ^ ( S t , w ) \delta = \red{G_t-\hat v(S_{t},\mathbf{w})} δ=Gtv^(St,w)
w t + 1 ← w t + α w δ ∇ v ^ ( S t ) \blue{\mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + \alpha_{\mathbf{w}} \delta \nabla {\hat v(S_t)}} wt+1wt+αwδv^(St)
θ t + 1 ← θ t + α θ δ ∇ ln ⁡ π ( A t ∣ S t ) \theta_{t+1} \leftarrow \theta_t + \alpha_{\theta} \delta \nabla \ln{\pi(A_t|S_t)} θt+1θt+αθδlnπ(AtSt)
Actor-Critic:TD,更新快,调参难度大一些
δ = R t + γ v ^ ( S t ′ , w ) − v ^ ( S t , w ) \delta = \red{R_t+\gamma \hat v(S'_{t},\mathbf{w})-\hat v(S_{t},\mathbf{w})} δ=Rt+γv^(St,w)v^(St,w)
w t + 1 ← w t + α w δ ∇ v ^ ( S t ) \blue{\mathbf{w}_{t+1} \leftarrow \mathbf{w}_t + \alpha_{\mathbf{w}} \delta \nabla {\hat v(S_t)}} wt+1wt+αwδv^(St)
θ t + 1 ← θ t + α θ δ ∇ ln ⁡ π ( A t ∣ S t ) \theta_{t+1} \leftarrow \theta_t + \alpha_{\theta} \delta \nabla \ln{\pi(A_t|S_t)} θt+1θt+αθδlnπ(AtSt)

这篇关于【深度强化学习】策略梯度方法:REINFORCE、Actor-Critic的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/504457

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用