强化学习系列(6):深度确定性策略梯度(DDPG)算法及其应用
一、深度确定性策略梯度(DDPG)算法原理
背景与目标
在处理连续动作空间的强化学习问题时,虽然像PPO等算法能发挥一定作用,但存在一些局限。DDPG算法旨在利用深度神经网络结合确定性策略,更高效地处理连续动作空间场景,使得智能体能够根据确定的策略输出连续的动作,并且通过学习不断优化这个策略以最大化累计奖励。
核心思想
DDPG采用了Actor-Critic架构,它将策略学习(Actor)和价值估计(Critic)分开进行,同时利用深度神经网络来逼近策略函数和价值函数。与基于策略梯度的一些方法不同,DDPG输出的是确定性的动作,而不是动作的概率分布,这样在连续动作空间中能更直接地给出具体的动作值,便于控制类等实际应用。
Actor-Critic结构
- Actor(策略网络):它接收环境的状态作为输入,经过神经网络的多层变换后,直接输出一个连续的动作值,代表在当前状态下要采取的动作。例如在机器人关节控制场景中,输出就是具体的关节角度值等。其网络结构可以类似如下代码所示:
import torch
import torch.nn as nn
class ActorNetwork(nn.Module):
def __init__(self, input_size, output_size):
super(ActorNetwork, self).__init__()
self.fc1 = nn.Linear(input_size, 64)
self.fc2 = nn.Linear(64, 64)
self.fc3 = nn.Linear(64, output_size)
def forward(self, x):
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
return torch.tanh(self.fc3(x)) # 输出动作,常通过tanh等变换限制在合理范围
- Critic(价值网络):以状态和动作作为联合输入,输出一个对当前状态 - 动作对的价值估计。它的作用是评估Actor所选择的动作在当前状态下的好坏程度,帮助Actor进行策略更新。示例网络结构如下:
class CriticNetwork(nn.Module):
def __init__(self, input_size, action_size):
super(CriticNetwork, self).__init__()
self.fc1 = nn.Linear(input_size + action_size, 64)
self.fc2 = nn.Linear(64, 64)
self.fc3 = nn.Linear(64, 1)
def forward(self, x, action):
x = torch.cat([x, action], 1)
x = torch.relu(self.fc1(x))
x = torch.relu(self.fc2(x))
return self.fc3(x)
经验回放与目标网络
- 经验回放:和DQN等算法类似,DDPG也运用经验回放机制。智能体在与环境交互过程中,将经历的状态、动作、奖励、下一个状态等信息存储到一个回放缓冲区中,在训练时从中随机采样一批经验来更新网络,打破数据相关性,提高数据利用率,使得训练更加稳定。
- 目标网络:DDPG为Actor和Critic都设置了目标网络。目标网络的参数是从对应的主网络(Actor和Critic)缓慢更新过来的,在计算目标价值等时使用目标网络,这样可以使训练过程更加稳定,避免价值估计等的波动过大,有助于收敛。例如,目标Critic网络的更新可以如下代码实现:
# 假设tau是一个较小的更新系数,用于缓慢更新目标网络参数
tau = 0.001
for target_param, param in zip(target_critic_net.parameters(), critic_net.param

最低0.47元/天 解锁文章
1281

被折叠的 条评论
为什么被折叠?



