强化学习算法笔记之【DDPG算法】
强化学习笔记之【DDPG算法】
前言:
本文为强化学习笔记第二篇,第一篇讲的是Q-learning和DQN
就是因为DDPG引入了Actor-Critic模型,所以比DQN多了两个网络,网络名字功能变了一下,其它的就是软更新之类的小改动而已
本文初编辑于2024.10.6
CSDN主页:https://blog.csdn.net/rvdgdsva
博客园主页:https://www.cnblogs.com/hassle
博客园本文链接:

真 · 图文无关
原论文伪代码

- 上述代码为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_std=0.1):
state = torch.FloatTensor(state.reshape(1, -1))
action = self.actor(state).cpu().data.numpy().flatten()
# 添加噪音,上面两个文档的代码都没有这个步骤
noise = np.random.normal(0, noise_std, size=action.shape)
action = action + noise
return 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_action,state实际上是batch_state,而batch_action != actor(batch_state)
因为actor是频繁更新的,而采样是随机采样,不是所有batch_action都能随着actor的更新而同步更新
Critic网络的更新是一发而动全身的,相比于Actor网络的更新要复杂要重要许多
代码核心更新公式
\\target\underline{~}Q = reward + (1 - done) \times gamma \times target\underline{~}Q.detach()
\]

- 上述代码与伪代码对应,意为计算预测Q值
\\critic\underline{~}optimizer.zero\underline{~}grad()
\\critic\underline{~}loss.backward()
\\critic\underline{~}optimizer.step()
\]

- 上述代码与伪代码对应,意为使用均方误差损失函数更新Critic
\\actor\underline{~}optimizer.zero\underline{~}grad()
\\ actor\underline{~}loss.backward()
\\ actor\underline{~}optimizer.step()
\]


- 上述代码与伪代码对应,意为使用确定性策略梯度更新Actor
\\
actor\underline{~}target.parameters().data=(tau \times actor.parameters().data + (1 - tau) \times actor\underline{~}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多了两个网络
强化学习算法笔记之【DDPG算法】的更多相关文章
- 强化学习读书笔记 - 02 - 多臂老O虎O机问题
# 强化学习读书笔记 - 02 - 多臂老O虎O机问题 学习笔记: [Reinforcement Learning: An Introduction, Richard S. Sutton and An ...
- 强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods)
强化学习读书笔记 - 05 - 蒙特卡洛方法(Monte Carlo Methods) 学习笔记: Reinforcement Learning: An Introduction, Richard S ...
- 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)
强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...
- 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)
强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...
- 强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces)
强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces) 学习笔记: Reinforcement Learning: An Introduction, Richard S. S ...
- 强化学习读书笔记 - 09 - on-policy预测的近似方法
强化学习读书笔记 - 09 - on-policy预测的近似方法 参照 Reinforcement Learning: An Introduction, Richard S. Sutton and A ...
- 算法笔记之KMP算法
本文是<算法笔记>KMP算法章节的阅读笔记,文中主要内容来源于<算法笔记>.本文主要介绍了next数组.KMP算法及其应用以及对KMP算法的优化. KMP算法主要用于解决字符串 ...
- 强化学习读书笔记 - 11 - off-policy的近似方法
强化学习读书笔记 - 11 - off-policy的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton and ...
- 强化学习读书笔记 - 10 - on-policy控制的近似方法
强化学习读书笔记 - 10 - on-policy控制的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton an ...
- 算法笔记_071:SPFA算法简单介绍(Java)
目录 1 问题描述 2 解决方案 2.1 具体编码 1 问题描述 何为spfa(Shortest Path Faster Algorithm)算法? spfa算法功能:给定一个加权连通图,选取一个 ...
随机推荐
- python报错:ImportError: cannot import name 'Literal' from 'typing'
原因: Literal 只支持python3.8版本以上的环境,需要把python3.7升级到3.8版本以上. 参考: https://blog.csdn.net/yuhaix/article/det ...
- Ubuntu18.04系统下 临时使用 socks5代理apt-get的方法
参考: https://www.cnblogs.com/iwetuan/p/13567810.html ------------------------------------------------ ...
- 华为高性能计算(HPC)文档——技术支持>智能计算解决方案>高性能计算>HPC
链接地址: https://support.huawei.com/enterprise/zh/server-solutions/hpc-pid-253585671 ================== ...
- 在国产超算平台上(aarch64架构)安装pytorch-cuda失败,究其原因竟是官方未提供对应的cuda版本——pip方式和conda方式均无法获得相应cuda版本
最近在国产超算平台上安装pytorch,但是怎么弄都会报错: raise AssertionError("Torch not compiled with CUDA enabled" ...
- baselines算法库common/atari_wrappers.py模块分析
common/atari_wrappers.py模块代码如下: import numpy as np import os os.environ.setdefault('PATH', '') from ...
- THUPC2024 初赛
<南开大学数分I月考III在初赛开始四十分钟时结束> 早晨试图速成泰勒展开失败了 考试前 zsy 把 yzf 接到学校了,应该是国赛后第一次见 yzf 考完试发现 yzf 已经买好 KFC ...
- 超越Perplexity的AI搜索引擎框架MindSearch
超越Perplexity的AI搜索引擎框架MindSearch 介绍 MindSearch 是InternLM团队的一个开源的 AI 搜索引擎框架,由中科大和上海人工智能实验室联合打造的,具有与 Pe ...
- bfs优化
层次单调性 走地图 双重bfs 1.模块性 2.方案:外层bfs逆推,内层bfs重新跑 A.每次代价0/1:双端队列bfs B.每次代价任意数值:优先队列bfs(dijikstra).迭代(SPFA) ...
- uniapp中,getApp()返回的实例到底是什么?为什么getApp()返回的实例无法访问vuex的$store
按uniapp官方手册中说,getApp()函数用于获取当前应用实例.当前应用,也就是说当前应用程序.因为getApp()返回的实例可以用于访问app.vue中的globaldata,因此这个当前应用 ...
- CentOS 7 yum无法使用解决方法Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=
在centos7中使用yum命令时候报错: Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http: ...