AC网络深度强化学习实战:从零构建智能决策系统

1次阅读
没有评论

共计 1647 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

在连续动作空间的控制问题中(如机器人控制、自动驾驶),传统 DQN 需要离散化动作空间导致维度爆炸,而 AC 网络直接输出连续动作值,这种天然优势使其成为复杂决策场景的首选方案。DQN 的局限性在于:

AC 网络深度强化学习实战:从零构建智能决策系统

  1. 只能处理离散动作空间,对连续控制需人工离散化
  2. 单一价值网络难以同时评估状态价值和动作优势
  3. 高方差导致训练不稳定

双网络架构设计

AC 网络的核心是分离的 Actor-Critic 结构:

  • Actor 网络(策略网络):输入状态,输出动作概率分布

    class Actor(nn.Module):
        def __init__(self, state_dim, action_dim):
            super().__init__()
            self.fc1 = nn.Linear(state_dim, 64)
            self.fc2 = nn.Linear(64, action_dim)
    
        def forward(self, state):
            x = F.relu(self.fc1(state))
            return torch.tanh(self.fc2(x))  # 输出 [-1,1] 范围

  • Critic 网络(价值网络):评估状态价值 V(s)

    class Critic(nn.Module):
        def __init__(self, state_dim):
            super().__init__()
            self.fc1 = nn.Linear(state_dim, 64)
            self.fc2 = nn.Linear(64, 1)
    
        def forward(self, state):
            x = F.relu(self.fc1(state))
            return self.fc2(x)  # 输出标量价值

优势函数推导

策略梯度定理中引入优势函数 A(s,a)降低方差:
$$\nabla_\theta J(\theta) = \mathbb{E}\left[\nabla_\theta \log \pi_\theta(a|s) A(s,a)\right]$$

采用 TD 误差估计优势:
$$A(s_t,a_t) = r_t + \gamma V(s_{t+1}) – V(s_t)$$

实际实现时添加 GAE(λ)平衡偏差与方差:
$$ A^{GAE}(s_t,a_t) = \sum_{l=0}^{\infty}(\gamma\lambda)^l \delta_{t+l} $$

关键实现技巧

策略梯度更新

def update_actor(states, actions, advantages):
    mu = actor(states)
    log_probs = dist.log_prob(actions)  # 假设使用高斯分布
    actor_loss = -(log_probs * advantages).mean()

    optimizer_actor.zero_grad()
    actor_loss.backward()
    nn.utils.clip_grad_norm_(actor.parameters(), 0.5)  # 梯度裁剪
    optimizer_actor.step()

并行环境采样

使用 SubprocVecEnv 加速数据收集:

envs = [lambda: gym.make('Pendulum-v0') for _ in range(4)]
envs = SubprocVecEnv(envs)
states = envs.reset()  # 返回 shape=(4, state_dim)

典型问题解决方案

策略网络饱和

当 tanh 输出接近±1 时梯度消失:
– 在损失函数中添加熵正则项:
$$ \mathcal{L} += \beta \mathbb{H}(\pi(\cdot|s)) $$
– 初始化最后一层权重为小随机值

稀疏奖励场景

  • 设计基于状态的中间奖励
  • 采用 Curiosity-driven 探索机制

优化实验数据

学习率策略 最终得分 收敛步数
固定 0.001 185±12 35k
线性衰减 210±8 28k
余弦退火 225±6 22k

扩展思考

在多智能体竞争场景中,单个 AC 网络面临:
1. 非平稳环境问题
2. 信用分配难题
3. 策略协同与对抗的平衡

是否有更优雅的架构可以处理这些挑战?比如 MADDPG 中的集中式训练分布式执行思路或许值得借鉴。

正文完
 0
评论(没有评论)