我的目的是传递灵感,图片显示不出来请直接下载【免费】策略梯度和演员评论家传递灵感资源-CSDN文库
在强化学习中,基于价值函数的方法(例如Q-learning)是通过学习状态或动作价值函数来推导出一个策略,该策略通常选择具有最高预期奖励的动作。相比之下,基于策略的方法是通过直接学习策略函数来决定每个状态下动作选择的概率分布
在DQN中,输入是状态的特征向量与动作,输出是Q值 |
基于策略的方法同样使用神经网络处理状态输入,并输出动作概率分布 |
我们知道一个好的策略,应该是大概率选择最优动作,小概率选择次优动作,那么具体怎么操作可以改进策略?
策略梯度的思想是每次选择一个动作后,根据其获得的奖励调整策略。奖励高的动作将增加其被选择的概率,奖励低的动作将减少其被选择的概率。通过反复更新,可以逐步优化动作选择的概率分布,从而得到最优策略
策略近似:我们知道如果一个策略π很好,那么其状态价值 V π ( S )应该很高。那么可以定义一个目标函数 J(θ)表示策略 π 参数化后的性能度量。策略的好坏是通过所有状态下的期望价值来衡量的,不仅仅是当下状态的价值
V π ( S )仅能评估当前状态策略的好坏 J(θ)是状态分布的所有状态价值求期望 |
由定义可知目标函数为:J(θ)=Es [ Vπ(S)]
总结:在基于策略的方法中,我们希望在直接学习过程中逐步改善策略
1:策略π由θ参数化,因此所有的目标函数都是关于θ的方程
2:最大化目标函数J(θ),已知θ变化→π变化→V变化→J(θ)变化,并且J(θ)与状态分布也有关
总的来说,J(θ)的大小跟θ和状态分布都有关 ,我们希望能用一个参数θ来近似策略π
在讲策略梯度之前,先明确梯度的概念,以及为什么这里会使用到梯度
首先我们知道,梯度是多元函数的偏导数集合,是个向量,指向函数值更新最快的方向
例如
我一开始陷入一个误区,将J(θ)看作关于一个具体数值θ的函数,那么就不会涉及求多元的偏导数问题,只需要简单求导即可。但是θ是通过神经网络来参数化策略π的,那么θ应该是一个多维的参数向量,包括神经网络的隐层之间的连接权重与神经元的阈值
REINFORCE蒙特卡洛策略梯度:我们的目标是max J(θ),也就是求关于θ的函数J的最大化问题。策略梯度方法基于J(θ)对策略参数θ的梯度,优化算法是梯度上升
策略梯度定理:J(θ)的梯度与策略π的梯度及Q值的乘积成正比
详细推导见书p321 |
下面对这个式子变形以便使用真实回报G(t)
乘以再除以π(a|S,θ) |
μ是状态s出现的频率 |
更新部分为回报G(t)乘以动作被选择的概率的对数梯度 |
梯度上升 |
某数的对数的梯度会等于自身的梯度除以自身,d(lny)=dy/y |
更新部分可以这样直观理解:参数θ与回报成正比,意味着θ向着有利于产生最大回报的动作的方向更新 与动作选择概率成反比,主要是为了防止θ向着被频繁选择的动作的方向更新,因为这些动作可能并不是产生最大回报的动作 |
Actor-Critic(演员-评论家):在 Actor-Critic 方法中,Actor 负责生成动作,而 Critic 负责评估当前策略的价值。Critic 的反馈用于指导 Actor 改进其策略
在策略梯度中,策略函数就是我们的Actor,但是那里是没有Critic的,我们当时使用了蒙特卡罗法来采样得到真实回报G(t)。现在我们使用Critic网络拟合动作价值来替代G(t)
简单来说,分别用神经网络拟合两个函数:策略函数与价值函数
对于Critic的近似我们已经了解过了,在DQN中,使用TD error来更新Q值,更新好的Q值存入经验缓冲区以备训练,通过误差逆传播与梯度下降策略来更新参数w
对于Actor的近似,也是根据已有的训练数据(输入是状态,输出是策略)来训练一个策略网络能够近似表达输入与输出的关系。从而得到策略的参数向量θ
算法流程:
这里对于Critic网络参数w的更新使用的是误差逆传播算法,目标是最小化损失函数,使用梯度下降方法 |
某数的对数的梯度会等于自身的梯度除以自身,d(lny)=dy/y |
下面介绍策略梯度定理的三种形式:REINFORCE,Actor-Critic,Advantage Actor-Critic
REINFORCE:
Actor-Critic:
我们使用神经网络用来评估动作价值,而不是使用真实回报G(t),好处是可以缓解随机采样带来的回报方差大的问题
Advantage Actor-Critic(A2C):
A是动作的优势函数
这三种表达形式的区别与联系:
区别:
REINFORCE 使用的是从时间步 t开始的累积奖励 Gt ,即实际获得的回报。这种方法基于直接采样计算回报,简单但方差较大
Actor-Critic 方法使用动作值函数 Qπ(St,At)来替代真实回报 Gt。这种方法通过动作价值评估(由神经网络实现)来降低方差,提高了策略优化的稳定性
Advantage Actor-Critic (A2C) 方法进一步改进,通过引入优势函数 Aπ(St,At)优势函数表示动作相对于状态值函数 Vπ(St)的优势,进一步降低方差,使得策略优化的效率提高
联系:
这三种表达形式都是基于策略梯度定理,通过优化策略参数向量θ来max J(θ)
REINFORCE 方法是最基础的策略梯度方法,Actor-Critic 和 Advantage Actor-Critic 是在其基础上的改进,通过引入价值函数来降低方差
在写总结的时候逻辑比较混乱,原因是对梯度的理解不够深刻。接下来回答下面这几个我遇到的问题
第一个问题:策略梯度定理到底有什么用?
第二个问题:梯度上升是什么意思?
第三个问题:价值神经网络和策略神经网络该如何训练?
跟回报G(t)联系起来了,因此才能评判策略的表现 |
策略梯度定理到底有什么用?
答:策略梯度定理为我们提供了计算梯度的具体公式。这个公式告诉我们如何根据当前策略的表现来估计策略参数的梯度,此时得到的结果就是目标函数更新最快的方向
即:∇J(θ)=Eπ[Gt ∇logπ(At∣St,θ)],在策略梯度定理的不同表达形式中回报 Gt可以被Qπ(St,At)或Aπ(St,At)替代
梯度上升是什么意思?
策略梯度定理的结果看上去是一个标量,但实际上它是个维度与θ相同的向量 |
假设你在爬山,策略梯度定理告诉你在当前位置(当前状态)向哪个方向(∇J(θ)的值)走可以使你上升最快,但要真正到达山顶,你需要一步一步地沿着这个方向走(即不断更新参数θ)。每次更新参数的过程就是梯度上升算法
价值神经网络和策略神经网络该如何训练?
这个问题可以在Actor-Critic算法中找到答案
这里的w是Critic价值函数的神经网络的参数 梯度下降的更新规则可以直接写成梯度上升的形式,这是因为在优化问题中最小化损失函数函数,实际上就是最大化目标函数 也就是max J(θ)=min[−J(θ)] |
我在看AC算法流程注意到一个问题。这里的Actor网络参数θ的梯度上升公式跟我们上面提到的三种策略梯度定理的表达形式:REINFORCE,AC,A2C都不一样
公式为θ = θ + α∇J(θ)。∇J(θ)有三种表达形式:REINFORCE,AC,A2C
分别使用G(t),Q(St,At),A(St,At)
这个是梯度上升的REINFORCR表达形式 |
但是这里θ更新时,却使用状态价值的TD error去代替G(t),Q(St,At),A(St,At)
使用TD error或G(t)进行θ更新没有本质区别。其实就是在线更新和批量(延迟)更新的区别,在线更新更容易收敛,因为参数θ能够在每个时间步都进行调整
-------------------------------------------------------------------------------
回到最后一个问题,一开始看到w的更新式子的时候我觉得很奇怪,因为Critic价值网络训练方式我们在DQN中已经了解过了,是w对损失函数作梯度下降,但现在这里却是一个梯度上升的表达式,为什么?
首先Critic价值网络的损失函数L(w)通常定义为TD 误差δ的平方
对于梯度下降法,w的更新规则是:
又因为
这个等式其实是不严格成立的,是个约等号 但为什么是约等我也不太理解,这里不多解释 |
所以更新规则等价于:
Critic的训练:
Critic 的目标通常是通过最小化 TD 误差的平方来更新参数 𝑤
更新规则:𝑤←𝑤−𝛼∇𝐿(𝑤),其中 𝐿(𝑤)是损失函数
目标是让 Critic 更准确地预测状态价值或动作价值
Actor的训练:
Actor 通过梯度上升更新参数 𝜃,以最大化长期奖励的期望
更新规则:𝜃←𝜃+𝛼∇𝐽(𝜃)
DDPG和A3C这里就不介绍了,运用的思想之前已经了解过了
参考资料: 强化学习(十四) Actor-Critic - 刘建平Pinard - 博客园 (cnblogs.com)
强化学习入门笔记 | UCL silver RL | UC Berkely cs285 DRL_ucl强化学习课程-CSDN博客
强化学习极简入门:通俗理解MDP、DP MC TC和Q学习、策略梯度、PPO-CSDN博客
强化学习笔记(七)演员-评论家算法(Actor-Critic Algorithms)及Pytorch实现_Actor-Critic提出的论文-CSDN博客