策略网络-RL


在强化学习(Reinforcement Learning, RL)中,策略网络(Policy Network)是直接输出智能体(Agent)动作策略的神经网络模型,是策略梯度(Policy Gradient)类算法(如REINFORCE、PPO、TRPO等)的核心组件。其核心作用是将环境状态映射到动作的概率分布(或确定性动作),指导智能体在不同状态下做出决策。

策略网络的核心特点

  1. 输入:通常是环境的状态(State),可以是图像(如像素矩阵)、数值向量(如机器人关节角度)等。
  2. 输出
  3. 对于离散动作空间:输出各动作的概率分布(通过Softmax激活函数),例如动作空间为3时,输出形如 [0.2, 0.5, 0.3],表示选择三个动作的概率。
  4. 对于连续动作空间:通常输出概率分布的参数(如高斯分布的均值μ和方差σ),通过采样生成具体动作。
  5. 策略类型
  6. 随机策略(Stochastic Policy):输出概率分布,动作具有随机性(探索性强)。
  7. 确定性策略(Deterministic Policy):直接输出一个确定的动作(常用于连续动作空间,如DDPG算法)。

策略网络的训练目标

策略网络的目标是最大化智能体在环境中获得的期望累积回报(Expected Cumulative Reward)。数学上,策略网络的参数θ通过优化以下目标函数更新:
$$ J(\theta) = \mathbb{E}{\tau \sim \pi\theta} \left[ \sum_{t=0}^T \gamma^t r(s_t, a_t) \right] $$
其中:
- $\tau$ 是状态-动作轨迹(State-Action Trajectory);
- $\pi_\theta$ 是参数为θ的策略;
- $\gamma$ 是折扣因子(Discount Factor),用于平衡短期和长期回报;
- $r(s_t, a_t)$ 是时刻t的即时奖励(Reward)。

简单实现示例(PyTorch)

以下是一个用PyTorch实现的简单策略网络示例,适用于离散动作空间:

import torch
import torch.nn as nn
import torch.nn.functional as F

class PolicyNetwork(nn.Module):
    def __init__(self, state_dim, action_dim, hidden_dim=64):
        super(PolicyNetwork, self).__init__()
        self.fc1 = nn.Linear(state_dim, hidden_dim)  # 输入层:状态维度→隐藏层
        self.fc2 = nn.Linear(hidden_dim, action_dim) # 输出层:隐藏层→动作维度

    def forward(self, state):
        # 状态输入→隐藏层(ReLU激活)
        x = F.relu(self.fc1(state))
        # 输出各动作的概率(Softmax归一化)
        action_probs = F.softmax(self.fc2(x), dim=-1)
        return action_probs

# 使用示例
state_dim = 4   # 状态维度(如CartPole环境的状态维度)
action_dim = 2  # 动作维度(如左/右移动)
policy_net = PolicyNetwork(state_dim, action_dim)

# 输入一个状态(1维张量),输出动作概率
state = torch.tensor([0.1, -0.2, 0.3, -0.4])  # 示例状态
action_probs = policy_net(state)
print(f"动作概率:{action_probs.detach().numpy()}")  # 输出类似 [0.6, 0.4]

策略网络 vs 价值网络

  • 策略网络:直接输出动作(或动作概率),关注“做什么”。
  • 价值网络(如Q网络):评估某个状态或状态-动作对的价值(未来期望回报),关注“当前状态/动作有多好”。

策略网络的优势在于能直接处理连续动作空间,且通过梯度下降直接优化策略本身,适用于复杂决策场景(如机器人控制、游戏AI)。