强化学习算法笔记之【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算法功能:给定一个加权连通图,选取一个 ...
随机推荐
- Linux内核信号SIGIO使用实例讲解
一.信号 1. 基本概念 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上, ...
- RDMA简介
RDMA(Remote Direct Memory Access) RDMA顾名思义是一种直接访问内存技术.它能够实现的是一台计算机内存到另一台计算机内存之间的通过网络直接访问,不涉及两台计算机的操作 ...
- 微软azure devops 如何搭建代理池服务器
如果你的pipeline使用微软azure的服务器进行编译失败,提示你不能进行并行任务的话,可以自己拿一台服务器来搭建编译服务器. 目标是让你的 Organization settings -> ...
- 传染病模型 SI
参考了这篇写的很好的[1],讲了各种模型 因为是各种模型都是用微分方程写的,所以又去学习了一下微分方程 ,真的忘了有没有学过这个,反正一点印象也没有了. 好在[2] 这个文章又把我带回去了. SI 的 ...
- netcore高级知识点,内存对齐,原理与示例
最近几年一直从事物联网开发,与硬件打交道越来越多,发现越接近底层开发对性能的追求越高,毕竟硬件资源相对上层应用来实在是太缺乏了.今天想和大家一起分享关于C#中的内存对齐,希望通过理解和优化内存对齐,可 ...
- c++ push_back()和emplace_back()区别
c++ push_back()和emplace_back()区别 References C++中push_back和emplace_back的区别 push_back v.s. emplace_bac ...
- CSS & JS Effect – Styling Input Radio
原生 Radio 的 Limitation <input type="radio" style="width: 25px; height: 25px; cursor ...
- C# – 6.0, 7.0, 8.0, 9.0 总结
前言 C# 这几年改了好几个版本, 多了许多语法糖,还带有 JavaScript / TypeScript 的味道了. 我觉得随着 blazor 的发展 (想取代前端开发 ?) 那 C# 必然需要更多 ...
- 搭建高效攻防靶场vulfocus与Docker仓库管理实战:从听说到入门系列
搭建高效攻防靶场vulfocus与Docker仓库管理实战:从听说到入门系列 vulfocus 简介 vulfocus,作为一款前沿的漏洞集成平台,它巧妙地将多种最新的CVE漏洞环境封装于Docker ...
- SpringMVC —— 请求参数
请求映射路径 请求方式 get请求传参 post请求传参 POST请求中文参数乱码问题 请求参数(五种类型数据参数) ...