TD3 算法详解
双延迟深度确定性策略梯度算法(Twin Delayed Deep Deterministic Policy Gradient, TD3)是强化学习领域针对连续动作空间问题设计的一种重要算法。它由 Fujimoto 等人在 2018 年提出,旨在解决深度确定性策略梯度(DDPG)算法在实际应用中存在的训练不稳定和 Q 值过估计问题。
DDPG 的局限性
DDPG 结合了 Actor-Critic 架构与确定性策略梯度,在连续控制任务中表现优异,但在实际训练中暴露出几个关键缺陷:
- Q 值过估计:Critic 网络容易高估动作价值,导致 Actor 基于错误的反馈更新策略。
- 策略噪声敏感:确定性策略直接输出动作,缺乏探索性噪声,容易陷入局部最优。
- 训练震荡:Actor 和 Critic 同步更新时,相互干扰可能导致参数震荡。
为了解决这些问题,TD3 引入了三项核心改进机制。
核心思想
1. 双 Critic 网络(Twin Critics)
借鉴 Double Q-Learning 的思想,TD3 维护两个独立的 Critic 网络 $Q_{\theta_1}$ 和 $Q_{\theta_2}$。在计算目标 Q 值时,取两者的最小值作为最终目标。这种保守策略有效缓解了因函数近似误差导致的 Q 值高估偏差。
2. 延迟更新(Delayed Policy Updates)
为了避免 Actor 在 Critic 尚未收敛时频繁更新,TD3 降低了策略网络的更新频率。通常每执行两次 Critic 更新才进行一次 Actor 更新。这使得策略优化建立在更稳定的价值评估基础之上。
3. 目标策略平滑(Target Policy Smoothing)
在计算目标动作时,向目标策略的输出添加截断的高斯噪声。这不仅增加了鲁棒性,防止策略对极端动作过拟合,还起到了正则化的作用,使 Q 值估计更加平滑。
数学细节
TD3 的目标值计算融合了上述改进。对于状态 $s'$ 和目标动作 $a'$,目标 Q 值 $y$ 定义为:
$$ y = r + \gamma \min \big( Q_{\theta_1'}(s', a'), Q_{\theta_2'}(s', a') \big) $$
其中 $a' = \pi_{\phi'}(s') + \text{clip}(\epsilon, -c, c)$,$\epsilon \sim \mathcal{N}(0, \sigma)$ 是高斯噪声。
Actor 网络的优化目标依然是最大化 Critic 的 Q 值估计:
$$ \nabla_\phi J(\pi_\phi) = \mathbb{E}{s \sim \rho^\pi} \left[ \nabla\phi \pi_\phi(s) \nabla_a Q^{\pi_\phi}(s, a) \big|{a=\pi\phi(s)} \right] $$
Python 实现
以下是基于 PyTorch 的完整 TD3 实现,包含网络定义、经验回放及训练逻辑。
环境配置与参数
import argparse
import os
import random
import numpy as np
import gym
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
collections deque
device = torch.cuda.is_available()
parser = argparse.ArgumentParser()
parser.add_argument(, default=)
parser.add_argument(, default=, =)
parser.add_argument(, default=, =)
parser.add_argument(, default=, =)
parser.add_argument(, default=, =)
parser.add_argument(, default=, =)
parser.add_argument(, default=, =)
parser.add_argument(, default=, =)
parser.add_argument(, default=, =)
args = parser.parse_args()


