强化学习系列(6):深度确定性策略梯度(DDPG)算法及其应用

强化学习系列(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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值