TD3 (Twin Delayed Deep Deterministic Policy Gradient) 是一种先进的深度强化学习算法,专门针对连续动作空间问题设计。它是DDPG算法的改进版本,通过多项技术创新解决了DDPG存在的高估偏差问题。
1. TD3算法核心思想
1.1 算法关键创新点
-
双Q网络 (Twin Critic):使用两个独立的Q函数估计器,取最小值作为目标值,减少高估偏差
-
延迟策略更新 (Delayed Policy Updates):策略(Actor)更新频率低于Q函数(Critic)更新
-
目标策略平滑正则化 (Target Policy Smoothing):在目标动作中添加噪声,防止策略在尖锐的Q函数峰值处过拟合
1.2 与DDPG的主要区别
| 特性 | DDPG | TD3 |
|---|---|---|
| Critic数量 | 单Q网络 | 双Q网络 |
| 策略更新频率 | 每次迭代都更新 | 延迟更新(每n次) |
| 目标策略噪声 | 无 | 添加平滑噪声 |
| 高估偏差 | 较严重 | 显著减少 |
2. TD3算法数学原理
2.1 关键公式
-
目标Q值计算:
text
-
y = r + γ * min(Q₁'(s',ã), Q₂'(s',ã)) ã = clip(π'(s') + ε, a_low, a_high), ε ~ clip(N(0,σ), -c, c)
-
Critic损失函数:
text
-
L(θᵢ) = E[(Qᵢ(s,a) - y)²], i ∈ {1,2} -
策略更新(仅更新一个Q函数):
text
-
∇J(ϕ) = E[∇aQ₁(s,a)|a=π(s) ∇ϕπ(s)]
2.2 算法伪代码
text
初始化Critic网络Qθ1, Qθ2和Actor网络πϕ
初始化目标网络Qθ1', Qθ2', πϕ'
初始化回放缓冲区D
for 回合 = 1 to M do
初始化状态s
for 时间步 = 1 to T do
选择动作a = π(s) + 噪声(探索)
执行a,观察r, s'
存储(s,a,r,s')到D
采样小批量{(s,a,r,s')}~D
ã = π'(s') + 裁剪的噪声
y = r + γ * min(Qθ1'(s',ã), Qθ2'(s',ã))
更新Qθ1和Qθ2最小化(Q - y)²
if 时间步 % d then
更新πϕ最大化Qθ1(s,π(s))
软更新目标网络:
θ' ← τθ + (1-τ)θ'
ϕ' ← τϕ + (1-τ)ϕ'
end if
end for
end for
3. TD3的PyTorch实现
以下是完整的TD3实现代码:
python
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
from torch.optim import Adam
from collections import deque
import random
class ReplayBuffer:
def __init__(self, capacity):
self.buffer = deque(maxlen=capacity)
def push(self, state, action, reward, next_state, done):
self.buffer.append((state, action, reward, next_state, done))
def sample(self, batch_size):
state, action, reward, next_state, done = zip(*random.sample(self.buffer, batch_size))
return np.stack(state), np.stack(action), np.stack(reward), np.stack(next_state), np.stack(done)

最低0.47元/天 解锁文章

1378

被折叠的 条评论
为什么被折叠?



