强化学习笔记之【DDPG算法】
前言:
本文为强化学习笔记第二篇,第一篇讲的是Q-learning和DQN
就是因为DDPG引入了Actor-Critic模型,所以比DQN多了两个网络,网络名字功能变了一下,其它的就是软更新之类的小改动而已
本文初编辑于2024.10.6
CSDN主页:https://blog.csdn.net/rvdgdsva
博客园主页:https://www.cnblogs.com/hassle
博客园本文链接:
本文为强化学习笔记第二篇,第一篇讲的是Q-learning和DQN
就是因为DDPG引入了Actor-Critic模型,所以比DQN多了两个网络,网络名字功能变了一下,其它的就是软更新之类的小改动而已
本文初编辑于2024.10.6
CSDN主页:https://blog.csdn.net/rvdgdsva
博客园主页:https://www.cnblogs.com/hassle
博客园本文链接:
真 · 图文无关
需要先看:
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
注意!!!这个图只展示了Critic网络的更新,没有展示Actor网络的更新
大白话解释:
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网络的更新要复杂要重要许多
Actor和Critic的角色:
更新逻辑:
个人理解:
DQN算法是将q_network中的参数每n轮一次复制到target_network里面
DDPG使用系数(tau)来更新参数,将学习到的参数更加soft地拷贝给目标网络
DDPG采用了actor-critic网络,所以比DQN多了两个网络