强化学习:Deep Deterministic Policy Gradient (DDPG) 学习笔记

一、DDPG 是什么?

1.1 核心概念

  • DDPG = Deep + Deterministic + Policy Gradient
    • Deep:使用深度神经网络和类似DQN的技术(经验回放、目标网络)
    • Deterministic:输出确定的动作(而不是概率分布)
    • Policy Gradient:基于策略梯度的方法,优化策略以最大化累积奖励

1.2 算法特点

特性 说明
连续动作空间 直接输出连续动作值(如方向盘角度、机器人关节扭矩)
离线学习 使用经验回放(Replay Buffer)
目标网络 使用目标网络提高稳定性(类似DQN)
Actor-Critic结构 结合策略网络(Actor)和价值网络(Critic)

二、为什么需要 DDPG?

2.1 解决的核心问题

问题 传统方法局限 DDPG 解决方案
连续动作控制 DQN 无法直接处理连续动作 输出连续动作值
高方差 Policy Gradients 高方差 使用 Critic 网络降低方差
稳定性差 Actor-Critic 难收敛 引入目标网络和经验回放

2.2 与相关算法对比

添加确定性
添加连续动作
Policy Gradients
Deterministic Policy Gradients
DQN
DDPG
DDPG

三、DDPG 核心原理

3.1 网络结构

DDPG 包含四个神经网络:

Critic
Actor
评估状态-动作价值Q
Critic Eval Net
延迟更新
Critic Target Net
输出确定性动作
Actor Eval Net
延迟更新
Actor Target Net

3.2 工作流程

强化学习:Deep Deterministic Policy Gradient (DDPG) 学习笔记_第1张图片

3.3 算法步骤

  1. 初始化

    • Actor网络 μ θ ( s ) \mu_\theta(s) μθ(s)、Critic网络 Q ϕ ( s , a ) Q_\phi(s,a) Qϕ(s,a) 及其目标网络 μ θ ′ ( s ) \mu_{\theta'}(s) μθ(s) Q ϕ ′ ( s , a ) Q_{\phi'}(s,a) Qϕ(s,a)
    • 经验回放缓冲区 D D D,容量为 N N N
    • 设置参数:学习率 α μ \alpha_\mu αμ(Actor)、 α Q \alpha_Q αQ(Critic),折扣因子 γ \gamma γ,软更新参数 τ \tau τ,探索噪声 N \mathcal{N} N
  2. 对于每个episode

    • 初始化状态 s 1 s_1 s1,重置探索噪声;
    • 对于每个时间步 t t t
      • 选择动作: a t = μ θ ( s t ) + N t a_t = \mu_\theta(s_t) + \mathcal{N}_t at=μθ(st)+Nt(添加噪声进行探索);
      • 执行动作 a t a_t at,获得奖励 r t r_t rt 和下一状态 s t + 1 s_{t+1} st+1
      • ( s t , a t , r t , s t + 1 ) (s_t,a_t,r_t,s_{t+1}) (st,at,rt,st+1) 存入缓冲区 D D D
      • D D D 中随机采样批次数据 B = { ( s , a , r , s ′ ) } B = \{(s,a,r,s')\} B={(s,a,r,s)}
      • 更新Critic
        计算TD目标: y i = r i + γ Q ϕ ′ ( s i ′ , μ θ ′ ( s i ′ ) ) y_i = r_i + \gamma Q_{\phi'}(s'_i, \mu_{\theta'}(s'_i)) yi=ri+γQϕ(si,μθ(si))
        通过最小化损失函数 L ( ϕ ) = 1 ∣ B ∣ ∑ i ∈ B ( y i − Q ϕ ( s i , a i ) ) 2 \mathcal{L}(\phi) = \frac{1}{|B|}\sum_{i\in B}(y_i - Q_\phi(s_i,a_i))^2 L(ϕ)=B1iB(yiQϕ(si,ai))2 更新Critic参数 ϕ \phi ϕ
      • 更新Actor
        通过最大化 Q ϕ ( s , μ θ ( s ) ) Q_\phi(s, \mu_\theta(s)) Qϕ(s,μθ(s)) 的期望更新Actor参数 θ \theta θ,即最小化损失: L ( θ ) = − 1 ∣ B ∣ ∑ i ∈ B Q ϕ ( s i , μ θ ( s i ) ) \mathcal{L}(\theta) = -\frac{1}{|B|}\sum_{i\in B}Q_\phi(s_i, \mu_\theta(s_i)) L(θ)=B1iBQϕ(si,μθ(si))
      • 软更新目标网络
        θ ′ ← τ θ + ( 1 − τ ) θ ′ \theta' \leftarrow \tau\theta + (1-\tau)\theta' θτθ+(1τ)θ ϕ ′ ← τ ϕ + ( 1 − τ ) ϕ ′ \phi' \leftarrow \tau\phi + (1-\tau)\phi' ϕτϕ+(1τ)ϕ

四、关键算法解析

4.1 目标Q值计算

y i = r i + γ Q ′ ( s i + 1 , μ ′ ( s i + 1 ∣ θ μ ′ ) ∣ θ Q ′ ) y_i = r_i + \gamma Q'(s_{i+1}, \mu'(s_{i+1}|\theta^{\mu'})|\theta^{Q'}) yi=ri+γQ(si+1,μ(si+1θμ)θQ)

  • Q ′ Q' Q:Critic 目标网络
  • μ ′ \mu' μ:Actor 目标网络
  • γ \gamma γ:折扣因子

4.2 Critic 更新(最小化损失)

L = 1 N ∑ i ( y i − Q ( s i , a i ∣ θ Q ) ) 2 L = \frac{1}{N} \sum_i (y_i - Q(s_i,a_i|\theta^Q))^2 L=N1i(yiQ(si,aiθQ))2

4.3 Actor 更新(策略梯度)

∇ θ μ J ≈ 1 N ∑ i ∇ a Q ( s , a ∣ θ Q ) ∣ s = s i , a = μ ( s i ) ∇ θ μ μ ( s ∣ θ μ ) ∣ s i \nabla_{\theta^\mu} J \approx \frac{1}{N} \sum_i \nabla_a Q(s,a|\theta^Q)|_{s=s_i,a=\mu(s_i)} \nabla_{\theta^\mu} \mu(s|\theta^\mu)|_{s_i} θμJN1iaQ(s,aθQ)s=si,a=μ(si)θμμ(sθμ)si

4.4 目标网络更新(软更新)

θ Q ′ ← τ θ Q + ( 1 − τ ) θ Q ′ \theta^{Q'} \leftarrow \tau \theta^Q + (1-\tau)\theta^{Q'} θQτθQ+(1τ)θQ
θ μ ′ ← τ θ μ + ( 1 − τ ) θ μ ′ \theta^{\mu'} \leftarrow \tau \theta^\mu + (1-\tau)\theta^{\mu'} θμτθμ+(1τ)θμ

五、DDPG 实现要点

5.1 探索策略

  • 在确定性动作上添加噪声:
    action = actor(state) + np.random.normal(0, exploration_noise)
    
  • 常用噪声:OU 噪声(时间相关的随机过程)、高斯噪声。

5.2 经验回放

  • 存储元组 (s, a, r, s', done)
  • 随机采样打破相关性

5.3 网络结构示例

Actor 网络

actor = tf.keras.Sequential([
    tf.keras.layers.Dense(400, activation='relu'),
    tf.keras.layers.Dense(300, activation='relu'),
    tf.keras.layers.Dense(action_dim, activation='tanh')  # 输出[-1,1]范围动作
])

Critic 网络

critic = tf.keras.Sequential([
    tf.keras.layers.Dense(400, activation='relu', input_shape=(state_dim+action_dim,)),
    tf.keras.layers.Dense(300, activation='relu'),
    tf.keras.layers.Dense(1)  # 输出Q值
])

六、优缺点分析 ⚖️

6.1 核心优势

优势 说明
连续动作控制 直接输出连续动作值
样本高效 经验回放允许重复利用经验
稳定训练 目标网络和软更新提高稳定性

6.2 主要挑战

挑战 解决方案
超参数敏感 需要仔细调整学习率、噪声参数等
训练速度慢 使用并行训练(如Ape-X)
探索不足 自适应噪声或课程学习

七、实战建议

7.1 超参数设置

ddpg_params = {
    'actor_lr': 0.0001,       # Actor学习率
    'critic_lr': 0.001,       # Critic学习率
    'gamma': 0.99,            # 折扣因子
    'tau': 0.005,             # 目标网络软更新系数
    'buffer_size': 100000,    # 经验回放大小
    'batch_size': 64,         # 批大小
    'noise_std': 0.1,         # 动作噪声标准差
}

7.2 训练技巧

  1. 奖励缩放:归一化奖励到合理范围
  2. 梯度裁剪:防止Critic梯度爆炸
  3. 延迟更新:Critic更新多次后更新Actor

八、扩展知识

8.1 改进算法

算法 创新点 优势
TD3 双Critic网络+延迟更新 减少Q值高估
SAC 最大熵强化学习 探索更充分
PPO 裁剪策略更新 训练更稳定

8.2 应用场景

  • 机器人抓取控制
  • 自动驾驶
  • 金融交易策略
  • 游戏AI(如足球机器人)

你可能感兴趣的:(强化学习,学习,笔记,算法,人工智能,机器学习)