基于深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)算法的强化学习过程
题目描述
深度确定性策略梯度(DDPG)算法是一种结合了深度Q网络(DQN)和确定性策略梯度(DPG)思想的无模型、离线策略的深度强化学习算法。它旨在解决连续动作空间的决策问题,例如机器人控制、自动驾驶等任务。本题目将详细描述DDPG算法的核心思想、网络结构、目标函数定义、学习与优化过程,以及其如何利用“经验回放”和“目标网络”等关键技术来稳定训练。理解DDPG的关键在于掌握如何将价值函数(Critic)和确定性策略函数(Actor)的优化过程结合,以实现在高维连续动作空间中的高效学习。
解题过程
-
问题定义与核心思想
- 背景:在标准的强化学习中,智能体在一个环境中通过执行动作与环境交互,以获得最大累积奖励。对于连续动作空间(例如,机器人的关节角度、车辆的转向角度和油门),传统的DQN难以直接输出连续的、无限维度的动作值。确定性策略梯度定理则告诉我们,在给定策略是确定性函数的情况下,如何计算性能目标相对于策略参数的梯度。
- DDPG的核心思想:
- Actor-Critic架构:DDPG使用两个深度神经网络。一个是Actor网络(策略网络,μ),它以环境状态s为输入,直接输出一个确定性的动作a。另一个是Critic网络(价值网络,Q),它以状态s和Actor网络输出的动作a为输入,评估这个“状态-动作对”的价值Q(s, a)。Actor负责决策,Critic负责评判。
- 确定性策略:策略函数a = μ(s|θ^μ) 是一个确定性的映射,而非随机策略。这简化了动作选择,也使得Critic能够更直接地评估策略的质量。
- 离线策略与经验回放:智能体与环境交互产生的转移数据(状态s, 动作a, 奖励r, 下一个状态s', 是否终止done)被存储在一个经验回放缓冲区中。训练时,从中随机抽取小批量(mini-batch)样本来更新网络,这打破了数据间的序列相关性,提高了数据利用率和训练稳定性。
- 目标网络:为了防止Q值估计和目标之间的相关性(类似于DQN中的“移动目标”问题),DDPG引入了目标Actor网络(θ^μ‘)和目标Critic网络(θ^Q’)。它们的参数是通过“软更新”的方式缓慢跟踪主网络的参数,从而为Critic网络的学习提供一个稳定的目标。
-
算法组件与网络结构
- Actor网络 (μ):
- 输入:状态向量s。
- 输出:一个确定的、在动作空间允许范围内的动作向量a。通常,输出层会使用tanh激活函数(输出范围[-1, 1]),然后通过线性变换缩放到实际的动作空间。
- 参数:θ^μ。
- Critic网络 (Q):
- 输入:状态向量s和动作向量a的拼接(concatenate)。
- 输出:一个标量,代表状态-动作价值Q(s, a)。
- 参数:θ^Q。
- 目标Actor网络 (μ') 和 目标Critic网络 (Q'):
- 结构与主网络完全相同,但具有独立的参数θ^μ‘ 和 θ^Q’。它们不参与梯度更新,只用于计算目标Q值。
- 经验回放缓冲区 (R):
- 一个固定大小的队列,存储了智能体的经验元组 (s, a, r, s’, done)。当缓冲区满时,删除最旧的经验。
- Actor网络 (μ):
-
学习与优化过程
DDPG的优化是交替进行的,核心是通过最小化Critic的TD误差来更新Critic,然后通过最大化Critic的Q值估计来更新Actor。-
步骤A:收集与存储经验
智能体在环境中使用当前Actor网络(加入噪声,如OU噪声,以进行探索)与环境交互,产生经验元组 (s, a, r, s', done),并将其存入经验回放缓冲区R。 -
步骤B:从缓冲区采样
当缓冲区中有足够的数据后,从R中随机抽取一个小批量的N个经验样本 {(s_i, a_i, r_i, s_i', done_i)}。 -
步骤C:计算Critic网络的损失(更新Critic)
- 计算目标Q值 (y_i):
- 利用目标Actor网络 μ' 根据下一个状态 s_i' 预测下一个动作 a_i' = μ'(s_i'|θ^μ‘)。
- 利用目标Critic网络 Q' 来评估下一个状态-动作对的价值:Q’(s_i', a_i'|θ^Q‘)。
- 计算TD目标:
y_i = r_i + γ * (1 - done_i) * Q‘(s_i', a_i'|θ^Q’)。
其中,γ是折扣因子,done_i是终止标志(1表示终止,此时y_i = r_i)。
- 计算Critic损失:
计算当前Critic网络对当前状态-动作对的估计值:Q_current = Q(s_i, a_i|θ^Q)。
定义损失函数为均方误差(MSE):
L_critic = (1/N) * Σ_i (y_i - Q_current)^2。
这个损失衡量了Critic当前估计与“更稳定”的目标之间的差距。
- 计算目标Q值 (y_i):
-
步骤D:计算Critic梯度并更新
计算损失L_critic关于Critic网络参数θ^Q的梯度,并使用梯度下降法(如Adam)更新θ^Q,以最小化这个损失。这使得Critic网络能更准确地评估状态-动作对的价值。 -
步骤E:计算Actor网络的策略梯度(更新Actor)
- 计算策略目标:Actor的目标是最大化Critic网络评估的Q值。即,我们希望找到一组策略参数θ^μ,使得在当前状态分布下,由策略μ(s|θ^μ)生成的动作a所获得的Q值最大化。
- 计算策略梯度:
根据确定性策略梯度定理,性能目标J相对于Actor参数的梯度为:
∇{θ^μ} J ≈ (1/N) * Σ_i [∇a Q(s, a|θ^Q) |{s=s_i, a=μ(s_i|θ^μ)} * ∇{θ^μ} μ(s|θ^μ) |_{s=s_i}]。- 公式解释:首先,固定Critic网络的参数,计算Critic输出Q相对于输入动作a在a=μ(s_i)处的梯度(∇_a Q)。这指示了“在当前位置,哪个方向的微小动作变化能使Q值增加”。
- 然后,计算Actor网络的输出动作相对于自身参数θ^μ的梯度(∇_{θ^μ} μ)。
- 这两个梯度的点积方向,就是更新Actor参数以使Q值增大的方向。
- 计算Actor梯度:在实际计算中,我们通常构建一个损失函数 L_actor = -(1/N) * Σ_i Q(s_i, μ(s_i|θ^μ)|θ^Q)。对这个损失函数求关于θ^μ的梯度,等价于计算上述的策略梯度(求最大化的梯度方向是梯度上升,而梯度下降是最小化,加负号即可)。
-
步骤F:计算Actor梯度并更新
计算损失L_actor关于Actor网络参数θ^μ的梯度,并使用梯度下降法更新θ^μ。这相当于沿Q值增大的方向微调Actor的策略。 -
步骤G:软更新目标网络
在更新完主网络后,通过“软更新”的方式,缓慢地将目标网络的参数向主网络参数靠拢,以稳定训练:
θ^Q‘ ← τ * θ^Q + (1 - τ) * θ^Q’
θ^μ‘ ← τ * θ^μ + (1 - τ) * θ^μ’
其中,τ是一个很小的常数(如0.001或0.005),称为目标网络更新率。这种更新方式使得目标网络的参数变化非常缓慢,避免了Q值目标的剧烈波动。
-
-
训练流程总结
DDPG的训练是一个迭代过程。在每一轮(episode)中,智能体与环境交互,收集数据存入缓冲区。在每一步(step)或每收集固定步数后,从缓冲区采样一批数据,依次执行步骤C到G,完成一次Actor和Critic网络参数的更新。这个过程不断重复,直到策略性能收敛或达到预设的训练轮数。
关键要点:DDPG巧妙地结合了深度学习的表示能力、DQN的经验回放/目标网络稳定技术,以及确定性策略梯度理论,使其成为解决连续控制问题的一个经典而强大的深度强化学习算法。其核心在于Actor生成动作,Critic评估动作价值,两者通过梯度信息协同优化,最终学到一个在连续动作空间上表现优异的确定性策略。