济南住建局官方网站,找国外人做网站,中国最大的企业培训公司,怎样修改静态公司网站页面电话强化学习笔记之【DDPG算法】 文章目录 强化学习笔记之【DDPG算法】前言#xff1a;原论文伪代码DDPG算法DDPG 中的四个网络代码核心更新公式 前言#xff1a;
本文为强化学习笔记第二篇#xff0c;第一篇讲的是Q-learning和DQN
就是因为DDPG引入了Actor-Critic模型#x…强化学习笔记之【DDPG算法】 文章目录 强化学习笔记之【DDPG算法】前言原论文伪代码DDPG算法DDPG 中的四个网络代码核心更新公式 前言
本文为强化学习笔记第二篇第一篇讲的是Q-learning和DQN
就是因为DDPG引入了Actor-Critic模型所以比DQN多了两个网络网络名字功能变了一下其它的就是软更新之类的小改动而已
本文初编辑于2024.10.6
CSDN主页https://blog.csdn.net/rvdgdsva
博客园主页https://www.cnblogs.com/hassle
博客园本文链接 真 · 图文无关 原论文伪代码 上述代码为DDPG原论文中的伪代码 DDPG算法
需要先看
Deep Reinforcement Learning (DRL) 算法在 PyTorch 中的实现与应用【DDPG部分】【没有在选择一个新的动作的时候给policy函数返回的动作值增加一个噪音】【critic网络与下面不同】
深度强化学习笔记——DDPG原理及实现pytorch【DDPG伪代码部分】【这个跟上面的一样没有加噪音】【critic网络与上面不同】
【深度强化学习】(4) Actor-Critic 模型解析附Pytorch完整代码【选看】【Actor-Critic理论部分】 如果需要给policy函数返回的动作值增加一个噪音实现如下 def select_action(self, state, noise_std0.1):state torch.FloatTensor(state.reshape(1, -1))action self.actor(state).cpu().data.numpy().flatten()# 添加噪音上面两个文档的代码都没有这个步骤noise np.random.normal(0, noise_std, sizeaction.shape)action action noisereturn action DDPG 中的四个网络 注意这个图只展示了Critic网络的更新没有展示Actor网络的更新 Actor 网络策略网络 作用决定给定状态 ss 时应该采取的动作 aπ(s)aπ(s)目标是找到最大化未来回报的策略。更新基于 Critic 网络提供的 Q 值更新以最大化 Critic 估计的 Q 值。 Target Actor 网络目标策略网络 作用为 Critic 网络提供更新目标目的是让目标 Q 值的更新更为稳定。更新使用软更新缓慢向 Actor 网络靠近。 Critic 网络Q 网络 作用估计当前状态 ss 和动作 aa 的 Q 值即 Q(s,a)Q(s,a)为 Actor 提供优化目标。更新通过最小化与目标 Q 值的均方误差进行更新。 Target Critic 网络目标 Q 网络 作用生成 Q 值更新的目标使得 Q 值更新更为稳定减少振荡。更新使用软更新缓慢向 Critic 网络靠近。
大白话解释
1、DDPG实例化为actor输入state输出action 2、DDPG实例化为actor_target 3、DDPG实例化为critic_target输入next_state和actor_target(next_state)经DQN计算输出target_Q 4、DDPG实例化为critic输入state和action输出current_Q输入state和actor(state)【这个参数需要注意不是action】经负均值计算输出actor_loss
5、current_Q 和target_Q进行critic的参数更新 6、actor_loss进行actor的参数更新
action实际上是batch_actionstate实际上是batch_state而batch_action ! actor(batch_state)
因为actor是频繁更新的而采样是随机采样不是所有batch_action都能随着actor的更新而同步更新
Critic网络的更新是一发而动全身的相比于Actor网络的更新要复杂要重要许多 代码核心更新公式 t a r g e t ‾ Q c r i t i c ‾ t a r g e t ( n e x t ‾ s t a t e , a c t o r ‾ t a r g e t ( n e x t ‾ s t a t e ) ) t a r g e t ‾ Q r e w a r d ( 1 − d o n e ) × g a m m a × t a r g e t ‾ Q . d e t a c h ( ) target\underline{~}Q critic\underline{~}target(next\underline{~}state, actor\underline{~}target(next\underline{~}state)) \\target\underline{~}Q reward (1 - done) \times gamma \times target\underline{~}Q.detach() target Qcritic target(next state,actor target(next state))target Qreward(1−done)×gamma×target Q.detach() 上述代码与伪代码对应意为计算预测Q值 c r i t i c ‾ l o s s M S E L o s s ( c r i t i c ( s t a t e , a c t i o n ) , t a r g e t ‾ Q ) c r i t i c ‾ o p t i m i z e r . z e r o ‾ g r a d ( ) c r i t i c ‾ l o s s . b a c k w a r d ( ) c r i t i c ‾ o p t i m i z e r . s t e p ( ) critic\underline{~}loss MSELoss(critic(state, action), target\underline{~}Q) \\critic\underline{~}optimizer.zero\underline{~}grad() \\critic\underline{~}loss.backward() \\critic\underline{~}optimizer.step() critic lossMSELoss(critic(state,action),target Q)critic optimizer.zero grad()critic loss.backward()critic optimizer.step() 上述代码与伪代码对应意为使用均方误差损失函数更新Critic a c t o r ‾ l o s s − c r i t i c ( s t a t e , a c t o r ( s t a t e ) ) . m e a n ( ) a c t o r ‾ o p t i m i z e r . z e r o ‾ g r a d ( ) a c t o r ‾ l o s s . b a c k w a r d ( ) a c t o r ‾ o p t i m i z e r . s t e p ( ) actor\underline{~}loss -critic(state,actor(state)).mean() \\actor\underline{~}optimizer.zero\underline{~}grad() \\ actor\underline{~}loss.backward() \\ actor\underline{~}optimizer.step() actor loss−critic(state,actor(state)).mean()actor optimizer.zero grad()actor loss.backward()actor optimizer.step() 上述代码与伪代码对应意为使用确定性策略梯度更新Actor c r i t i c ‾ t a r g e t . p a r a m e t e r s ( ) . d a t a ( t a u × c r i t i c . p a r a m e t e r s ( ) . d a t a ( 1 − t a u ) × c r i t i c ‾ t a r g e t . p a r a m e t e r s ( ) . d a t a ) a c t o r ‾ t a r g e t . p a r a m e t e r s ( ) . d a t a ( t a u × a c t o r . p a r a m e t e r s ( ) . d a t a ( 1 − t a u ) × a c t o r ‾ t a r g e t . p a r a m e t e r s ( ) . d a t a ) critic\underline{~}target.parameters().data(tau \times critic.parameters().data (1 - tau) \times critic\underline{~}target.parameters().data) \\ actor\underline{~}target.parameters().data(tau \times actor.parameters().data (1 - tau) \times actor\underline{~}target.parameters().data) critic target.parameters().data(tau×critic.parameters().data(1−tau)×critic target.parameters().data)actor target.parameters().data(tau×actor.parameters().data(1−tau)×actor target.parameters().data) 上述代码与伪代码对应意为使用策略梯度更新目标网络 Actor和Critic的角色
Actor负责选择动作。它根据当前的状态输出一个确定性动作。Critic评估Actor的动作。它通过计算状态-动作值函数Q值来评估给定状态和动作的价值。
更新逻辑
Critic的更新 使用经验回放缓冲区Experience Replay从中采样一批经验状态、动作、奖励、下一个状态。计算目标Q值使用目标网络critic_target来估计下一个状态的Q值target_Q并结合当前的奖励。使用均方误差损失函数MSELoss来更新Critic的参数使得预测的Q值target_Q与当前Q值current_Q尽量接近。 Actor的更新 根据当前的状态state从Critic得到Q值的梯度即对Q值相对于动作的偏导数。使用确定性策略梯度DPG的方法来更新Actor的参数目标是最大化Critic评估的Q值。 个人理解
DQN算法是将q_network中的参数每n轮一次复制到target_network里面
DDPG使用系数 τ \tau τ来更新参数将学习到的参数更加soft地拷贝给目标网络
DDPG采用了actor-critic网络所以比DQN多了两个网络