强化学习系列(7):软演员 - 评论家(Soft Actor-Critic,SAC)算法及其优势

强化学习系列(7):软演员 - 评论家(Soft Actor-Critic,SAC)算法及其优势

一、软演员 - 评论家(SAC)算法原理

背景与动机

在传统的强化学习算法用于连续动作空间场景时,如DDPG和PPO等,虽然能取得一定成果,但往往侧重于最大化累计奖励,对探索和利用的平衡以及动作的多样性考虑不够全面。SAC算法引入了最大熵原理,旨在在最大化累计奖励的同时,尽可能增加动作的不确定性(熵),使得智能体在探索过程中能更充分地覆盖动作空间,找到更优的策略,尤其适用于复杂、动态的连续动作空间环境。

核心思想

SAC基于Actor-Critic架构,融合了最大熵强化学习的思想。它希望智能体在学习过程中不仅要追求高奖励,还要使策略的熵尽可能大,也就是让动作的分布更加均匀、多样化,避免过早陷入局部最优策略,通过这种方式来提升探索效率和最终策略的质量。

最大熵原理的融入

在传统的强化学习目标(如最大化累计奖励的期望)基础上,SAC添加了一个熵项来衡量策略的不确定性。具体来说,其目标函数变为最大化一个包含奖励和策略熵的综合量,公式如下:
[
J(\pi) = \mathbb{E}{\tau \sim \pi}\left[\sum{t = 0}^{T} \gamma^{t} (r(s_{t}, a_{t}) + \alpha H(\pi(\cdot|s_{t})))\right]
]
其中,(r(s_{t}, a_{t}))是在状态 (s_{t}) 下采取动作 (a_{t}) 获得的奖励,(H(\pi(\cdot|s_{t}))) 是策略 (\pi) 在状态 (s_{t}) 下的熵,(\alpha) 是一个调节熵的权重系数,用于平衡奖励和熵在目标函数中的重要性。


二、SAC的关键组件

策略网络(Actor)

  • 功能与结构特点:和其他Actor-Critic架构中的策略网络类似,SAC的策略网络接收环境状态作为输入,输出连续的动作值。不过,它的输出通常是动作的概率分布相关参数(比如对于高斯分布,输出均值和方差等),以便通过采样得到具体的动作,同时这个分布会受到熵调节机制的影响,以鼓励动作的多样性。示例网络结构代码如下:
import torch
import torch.nn as nn

class PolicyNetwork(nn.Module):
    def __init__(self, input_size, output_size):
        super(PolicyNetwork, self).__init__()
        self.fc1 = nn.Linear(input_size, 128)
        self.fc2 = nn.Linear(128, 128)
        self.fc_mean = nn.Linear(128, output_size)
        self.fc_std = nn.Linear(128, output_size)

    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = torch.relu(self.fc2(x))
        mean = self.fc_mean(x)
        std = torch.sigmoid(self.fc_std(x))  # 确保方差为正
        return mean, std
  • 动作采样方式:利用输出的均值和方差参数,通过重参数化技巧(Reparameterization Trick)从高斯分布中采样动作,这样便于在反向传播时计算梯度,示例代码如下:
mean, std = policy_net(state)
noise = torch.randn_like(mean)
action = mean + std * noise  # 重参数化采样动作
action = torch.tanh(action)  # 限制动作在合理范围,比如[-1, 1]

价值网络(Critic)

  • 双价值网络设计:SAC采用了两个价值网络((Q_1) 和 (Q_2))来估计状态 - 动作对的价值,这样做可以减少价值估计的方差,提高估计的准确性和稳定性。两个网络结构相似,输入都是状态和动作的联合信息,输出对该状态 - 动作对的价值估计,示例代码如下:
class QNetwork(nn.Module):
    def __init__(self, input_size, action_size):
        super(QNetwork, self).__init__
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值