DDPG算法的基础认识
DDPG 全称:Deep Deterministic Policy Gradient
深度确定性策略梯度,专门解决连续动作空间强化学习问题。
DDPG的网络结构
Actor 网络(策略网络):
输入:状态 s 输出:确定性动作 a
Target Actor 网络(目标策略网络):
输入:下一个状态 s' 输出:下一个确定性动作 a'
Critic 网络(Q 网络):
输入:状态 s + 动作 a 输出:Q 值 Q (s,a)
Target Critic 网络(目标 Q 网络):
输入:下一个状态 s' + 下一个动作 a' 输出:目标 Q 值 Q_target (s',a')
网络更新
Critic的更新
目的:让在线 Critic预测的 Q 值,尽可能贴合真实长期收益。
(1)使用经验回放缓冲区(Experience Replay)从中采样一批经验 (s, a, r, s'),即:当前状态、
动作、奖励、下一个状态。
(2)计算目标 Q 值(y_i):使用 Target Actor 网络 根据下一个状态 s' 生成下一个动作 a',
再使用 Target Critic 网络 估计 Q_target(s', a'),最终结合折扣因子计算目标 Q 值:
y_i = r + γ * Q_target(s', a')
(3)使用均方误差损失函数(MSELoss)更新 在线 Critic 网络 的参数,使得 Critic 网络预测的
Q (s,a) 尽可能逼近 目标 Q 值 y_i。
编辑
Actor的更新:
目的:让在线 Actor 输出的策略动作,尽可能最大化在线 Critic 评估的 Q 值,持续优化决策策
略。
(1)从经验回放缓冲区中采样一批状态样本 s。
(2)将当前状态 s 输入在线 Actor 网络,得到网络输出的策略动作 (a=(s))。
(3)将状态 s 与 Actor 输出动作 a 输入在线 Critic 网络,得到当前策略对应的评估 Q 值
(Q(s,a))。
(4)依据确定性策略梯度原理更新在线 Actor 网络参数,通过最大化 Critic 输出的 Q 值,不断优
化策略,使智能体在当前状态下输出更优的连续动作。
目标Actor和目标Critic
软更新(Polyak Averaging),每训练一步,把当前网络的参数缓慢 “挪一点点” 到目标网络,目
标网络参数始终更稳定、更平滑。目标网络保留 99.5% 自己原来的参数,只吸收 0.5% 来自当前
网络的新参数。
完整的结构:
手算DDPG
演员网络(策略网络)
输入:
state = [ 0.12, # x 横坐标 1.45, # y 高度 -0.05, # vx 水平速度 -0.30, # vy 垂直速度 0.08, # 角度 -0.02, # 角速度 0.00, # 左腿未触地 0.00 # 右腿未触地 ]
输出:
action = tanh(0.73) ≈ 0.62
评论家网络(价值网络)
输入 1:状态 state(8 个数字,飞船状态)
state = [ 0.12, # x 坐标 1.45, # y 高度 -0.05, # vx 水平速度 -0.30, # vy 垂直速度 0.08, # 角度 -0.02, # 角速度 0.00, # 左腿未触地 0.00 #右腿未触地 ]
输入 2:动作 action(1 个数字,来自 Actor)
action = [0.62] # 范围一定在 [-1, 1]
最终输出
q_value = 12.73
输入:8 个状态数字 + 1 个动作数字
输出:1 个 Q 值分数(评价这个动作好不好)
编辑
动作选择(choose_action)
观测(状态):随便给一组 8 维数字 observation = [0.1, 0.2, 0.05, -0.3, 0.02, -0.01, 0, 0]
Actor 输出(前向传播后):假设算出 0.4
噪声标准差:action_noise = 0.1
随机噪声:假设抽到 0.07(正态分布)
如果在测试阶段:a=0.4
如果在训练阶段:a=0.4+0.07=0.47
a=clip(0.47, −1, 1)=0.47
为了在训练时通过加噪声来探索环境、找到更好策略,同时在测试时直接使用确定性动作,保
证策略稳定可靠,所以设计了训练/测试两种模式。
网络更新
1️⃣ 计算目标 Q 值(target)
next_actions = target_actor(s') → 0.38
q_ = target_critic(s', next_actions) → 10.0
target = r + gamma * q_
target = 2.5 + 0.99 * 10.0
target = 2.5 + 9.9
target = 12.4
2️⃣ 计算当前 Q 值
q = critic(s, a) → 10.0
3️⃣ 计算 Critic 损失(均方误差)
critic_loss = MSE(q, target) = (q - target)²
critic_loss = (10.0 - 12.4)²
critic_loss = (-2.4)²
critic_loss = 5.76
反向传播:更新 Critic,让 q 逼近 12.4
4️⃣ 计算 Actor 损失
new_actions = actor(s) → 0.4
q = critic(s, new_actions) → 10.0
actor_loss = -q
actor_loss = -10.0
反向传播:更新 Actor,让 q 越大越好!
5️⃣ 软更新目标网络
target_actor = 0.005 * actor + 0.995 * target_actor
target_critic = 0.005 * critic + 0.995 * target_critic
目标Q值 target = 12.4
Critic 损失 = 5.76
Actor 损失 = -10.0
DDPG 是「单步采样、按批次更新」的方式。