深度强化学习(Deep RL)发展出多个主流算法流派,包括基于值函数的 DQN、基于策略梯度的 REINFORCE/PPO,以及融合策略和值函数的 Actor-Critic 框架(如 A2C、DDPG、SAC)。每种方法适用于不同场景,选择合适算法将显著影响模型性能与训练效率。


三大算法流派对比

算法类型 特点 优点 局限
Value-based 学习 Q(s, a) 并通过贪婪策略选动作 样本利用率高,适合离散动作空间 不适用于连续/高维动作
Policy-based 直接建模并优化策略 π(a s) 适合连续动作,训练稳定 样本效率低,梯度方差大
Actor-Critic 同时训练策略和价值函数 综合两者优势,适用于复杂控制问题 架构复杂,对超参数敏感

一、DQN(Deep Q-Network)

类型:Value-based

损失函数(均方 TD 误差)

L(θ) = 𝔼ₜ [(rₜ + γ · maxₐ′ Qθ⁻(sₜ₊₁, a′) − Qθ(sₜ, aₜ))²]

其中:

  • θ 是 Q 网络参数
  • θ⁻ 是目标网络参数(定期同步)
  • 使用贪婪策略选择 a′ = argmax Q(s′, a′)

优化器:Adam 或 SGD,通过反向传播最小化 TD 误差更新 θ。


二、REINFORCE(Monte Carlo Policy Gradient)

类型:Policy-based

策略目标函数

J(θ) = 𝔼ₜ [log πθ(aₜ|sₜ) · Rₜ]

梯度公式(无偏估计)

∇θ J(θ) = 𝔼ₜ [∇θ log πθ(aₜ|sₜ) · Rₜ]

其中 Rₜ 是从当前时间步开始的累计回报。

训练策略

  • 对每个 episode 完成后,回顾整段轨迹,计算每个状态动作对的梯度贡献。
  • 对所有样本梯度求平均,得到期望梯度估计。
  • 使用优化器(如 Adam)进行如下更新:

θ ← θ + α ∇θ J(θ)

其中 α 是学习率。

方差控制:常引入 baseline(如 V(sₜ))改写为:

∇θ J(θ) = 𝔼ₜ [∇θ log πθ(aₜ|sₜ) · (Rₜ − b(sₜ))]

这样做可以减小梯度估计的方差,提高训练稳定性。


三、PPO(Proximal Policy Optimization)

类型:Actor-Critic

策略目标函数(Clipped Surrogate Objective)

L(θ) = 𝔼ₜ [min(rₜ(θ) Âₜ, clip(rₜ(θ), 1−ε, 1+ε) Âₜ)]

其中:

  • rₜ(θ) = πθ(aₜ|sₜ) / πθ_old(aₜ|sₜ)
  • Âₜ 是优势函数,通常估计为 GAE(广义优势估计)或 TD 误差形式

Critic 损失

Lᵥ = 𝔼ₜ [(V(sₜ) − Rₜ)²]

总损失函数

L_total = −L(θ) + c₁ · Lᵥ − c₂ · Entropy[πθ]

训练目标是最大化策略目标,最小化值函数误差,同时维持策略分布的多样性(熵奖励)。

优化器:Adam


四、DDPG / TD3(Deterministic Policy Gradient)

类型:Actor-Critic(off-policy)

Critic 损失函数(TD 误差)

L = 𝔼ₜ [(rₜ + γQθ⁻(sₜ₊₁, μθ⁻(sₜ₊₁)) − Qθ(sₜ, aₜ))²]

Actor 策略梯度

∇θ J = 𝔼ₜ [∇ₐ Qθ(s, a) |ₐ=μθ(s) ∇θ μθ(s)]

DDPG 是一种处理连续动作空间的强化学习算法,结合了 Actor-Critic 架构、确定性策略、经验回放和目标网络。 适用于动作是实数的环境.
DDPG = 深度 Actor-Critic + 连续动作 + Replay Buffer + 目标网络

训练流程

环境 → s_t
   ↓
Actor(s_t) → a_t
   ↓
执行 a_t → 得到 r_t, s_{t+1}
   ↓
存入 Replay Buffer

每 N 步:
  从 buffer 采样:
    → 用目标 Actor π' 生成 a'
    → 用目标 Critic Q' 计算目标 y
    → 更新 Critic(最小 MSE)
    → 更新 Actor(最大 Q)
    → 软更新 π', Q'
  1. 初始化网络
  • Actor 网络: π(s;θ^π)

  • Critic 网络: Q(s,a;θ^Q)

  • 同时复制两个目标网络:𝜋′ 、Q ′

  1. 与环境交互
  • 确定当前状态s_t, Actor 输出动作a_t = π(s_t) + N_t (加噪声探索)
  • 与环境执行动作, 得到r_t, s_(t+1)
  • 存入replay buffer:(s_t, a_t, r_t, s_(t+1))
  1. 从buffer随机采样一个batch

  2. 更新Critic网络

  • 目标值 y
  • 损失函数MSE
  • 反向传播优化Critic参数theta^Q
  1. 更新Actor网络(策略梯度)
  • 最大化期望Q值
  • 实际现实中通常写作L_actor = -1/N [sumQ(s_i, pi(s_i))]
  • 最小化负Q值,更新Actor参数

6.软更新目标网络(Polyak) θ^Q ←τθ^Q +(1−τ)θ^Q′ θ^π′ ←τθ^π +(1−τ)θ^π′

一般 τ=0.005

TD3 改进点

  • 使用双 Critic 网络 Q₁、Q₂,目标为 min(Q₁, Q₂)
  • Target Policy 加噪声,增强鲁棒性
  • 延迟 Actor 更新,先更新 Critic 多次

优化器:Adam,分别用于 Actor 和 Critic 网络


五、SAC(Soft Actor-Critic)

类型:Actor-Critic(off-policy)

策略目标函数(最大熵)

J(π) = 𝔼ₜ [Q(sₜ, aₜ) − α log π(aₜ|sₜ)]

Critic 损失函数

L = 𝔼ₜ [(rₜ + γ𝔼ₐ′[Q⁻(sₜ₊₁, a′) − α log π(a′|sₜ₊₁)] − Q(sₜ, aₜ))²]

训练策略

  • 策略网络输出动作分布(如高斯),通过 reparameterization trick(如 a = μ + σ · ξ)实现可导性
  • 自动调整温度系数 α 平衡探索与利用(鼓励高熵策略)

优化器:Adam,独立更新策略网络与两个 Critic 网络


总结:算法选择建议

任务场景 推荐算法
离散动作、规则清晰 DQN, Double DQN
连续动作、精细控制 DDPG, TD3, SAC
高稳定性、对泛化要求高 PPO, A2C
高维控制 + 探索重要性高 SAC

最后的建议

  • 新手推荐:从 PPO 开始,接口清晰、训练稳定
  • 高维连续控制:尝试 TD3 或 SAC,性能优于 DDPG
  • 低资源或验证思路:先跑通 DQN / REINFORCE,再考虑复杂结构

下一篇将介绍:

“如何保存训练好的模型?如何在真实环境中使用?”

上一篇:怎么训练一个 DRL 模型?需要准备哪些模块?