DQN(Deep Q-Network)是由 DeepMind 在 2015 年提出的深度强化学习算法,将深度神经网络与 Q-Learning 结合,成功解决了高维状态空间的强化学习问题。
DQN 用深度神经网络 Q(s,a;θ) 来近似 Q 值函数,其中 θ 为网络参数。
L(θ)=E(s,a,r,s′)∼D[(r+γmaxa′Q(s′,a′;θ−)−Q(s,a;θ))2]
其中:
- D:经验回放缓冲区
- θ−:目标网络参数
- Q(s,a;θ):主网络 Q 值
∇θL(θ)=E(s,a,r,s′)∼D[(r+γmaxa′Q(s′,a′;θ−)−Q(s,a;θ))∇θQ(s,a;θ)]
| 特性 | DQN | Q-Learning |
|---|
| 函数近似 | 深度神经网络 | 查表法 |
| 状态空间 | 高维连续 | 离散有限 |
| 经验回放 | 必需 | 可选 |
| 目标网络 | 使用 | 不需要 |
| 收敛性 | 近似收敛 | 理论保证收敛 |
Q-Learning 更新:
Q(s,a)←Q(s,a)+α[r+γmaxa′Q(s′,a′)−Q(s,a)]
DQN 更新:
θ←θ−α∇θL(θ)
原理: 存储转移(st,at,rt,st+1)到缓冲区D,随机采样进行训练。
优势:
数学表示:
D={(si,ai,ri,si+1)}i=1N
每次从D中随机采样batch进行更新。
原理: 使用独立的目标网络Q(s,a;θ−)计算目标值。
更新策略:
θ−←τθ+(1−τ)θ−
或每C步硬更新:
θ−←θ
稳定性分析: 目标网络减少了目标值的变化,避免了"追逐移动目标"的问题。
典型结构:
输入层 → 卷积层 → 全连接层 → 输出层(动作数量)
| | | |
s 特征提取 状态表示 Q(s,a)
输出: 对于每个动作ai,输出Q(s,ai)
- 移动目标问题: 主网络更新导致目标值变化
- 样本相关性: 连续样本高度相关
- 灾难性遗忘: 网络忘记之前学到的经验
目标网络稳定性:
设ΔQ=Q(s′,a′;θ)−Q(s′,a′;θ−),则目标值方差:
Var(Yt)=Var(rt)+γ2Var(maxa′Q(st+1,a′;θ−))
目标网络使Var(maxa′Q(st+1,a′;θ−))在训练期间保持相对稳定。
解决过估计问题:
YtDoubleDQN=rt+γQ(st+1,argmaxa′Q(st+1,a′;θt);θt−)
分解Q值为状态价值和优势函数:
Q(s,a)=V(s)+A(s,a)−∣A∣1∑a′A(s,a′)
根据TD误差优先采样:
P(i)=∑kpkαpiα
其中pi=∣δi∣+ϵ,δi为TD误差。
def init_weights(layer):
if type(layer) == nn.Linear:
torch.nn.init.xavier_uniform_(layer.weight)
layer.bias.data.fill_(0.0)
def compute_loss(batch):
states, actions, rewards, next_states, dones = batch
current_q = main_net(states).gather(1, actions)
next_q = target_net(next_states).max(1)[0].detach()
target_q = rewards + gamma * next_q * (1 - dones)
return F.mse_loss(current_q.squeeze(), target_q)
| 参数 | 符号 | 推荐值 | 说明 |
|---|
| 学习率 | α | 1e-4 | Adam优化器学习率 |
| 批大小 | batch_size | 32-128 | 经验回放批大小 |
| 缓冲区大小 | $ | D | $ |
| 目标更新频率 | C | 1000-10000 | 步数或episode |
| 折扣因子 | γ | 0.99 | 长期奖励权重 |
- 平均奖励: 评估策略性能
- Q值变化: 监控学习进度
- 损失函数: 观察训练稳定性
- 探索率: ϵ 衰减情况
- Atari游戏: 原始DQN的成功案例
- 连续控制: 结合其他技术
- 推荐系统: 离散动作空间
- 样本效率: 需要大量样本
- 连续动作: 原始DQN不适用
- 部分可观测: 需要循环网络扩展
- 多智能体: 环境非平稳性
数学分析:
在线学习的样本相关性导致梯度估计偏差:
E[∇θL(θ)]=∇θE[L(θ)]
经验回放通过随机采样打破相关性,使梯度估计更准确:
∇θL(θ)≈B1∑i=1B∇θli(θ)
其中li(θ)为单个样本损失,B为批大小。
不稳定性证明:
不使用目标网络时,目标值为:
Yt=rt+γmaxa′Q(st+1,a′;θt)
参数θt同时影响当前估计和目标,导致:
∂θt∂Yt=0
这违背了监督学习中"标签固定"的假设,导致训练不稳定。