深度Q网络(DQN)的原理与训练过程
字数 1758 2025-10-28 00:29:09
深度Q网络(DQN)的原理与训练过程
题目描述
深度Q网络(Deep Q-Network, DQN)是一种将深度学习与强化学习结合的算法,用于解决高维状态空间的决策问题。其核心目标是训练一个神经网络(Q网络)来近似Q-learning中的动作价值函数Q(s, a),从而让智能体在环境中通过试错学习最优策略。DQN需解决两个关键挑战:一是神经网络训练需要独立同分布的数据,而强化学习的数据具有时序相关性;二是目标Q值随网络更新而变化,导致训练不稳定。DQN通过经验回放和目标网络机制解决这些问题。
解题过程
-
强化学习基础与Q-learning回顾
- 强化学习中,智能体在状态s_t选择动作a_t后,环境返回奖励r_t并转移到新状态s_{t+1}。
- Q-learning的目标是学习动作价值函数Q*(s, a),表示在状态s执行动作a后能获得的累积期望奖励。更新公式为:
Q(s_t, a_t) ← Q(s_t, a_t) + α [r_t + γ * max_{a} Q(s_{t+1}, a) - Q(s_t, a_t)]
其中α是学习率,γ是折扣因子,r_t + γ * max_{a} Q(s_{t+1}, a)称为目标Q值。
-
DQN的核心创新:经验回放与目标网络
- 经验回放(Experience Replay):
- 问题:智能体连续采集的数据(状态转移序列)存在强相关性,直接用于训练会导致网络震荡。
- 解决:将智能体的经验(s_t, a_t, r_t, s_{t+1})存储到回放缓冲区中,训练时随机采样一批数据(Minibatch)进行梯度下降。
- 作用:打破数据相关性,提高数据利用率,使训练更稳定。
- 目标网络(Target Network):
- 问题:Q-learning中目标Q值依赖当前网络参数,导致目标值频繁变化,如同"移动靶标"。
- 解决:使用一个独立的目标网络(参数为θ⁻)计算目标Q值,主网络(参数为θ)负责策略优化。目标网络的参数定期从主网络复制(例如每C步更新),其余时间保持固定。
- 作用:稳定训练过程,避免目标值振荡。
- 经验回放(Experience Replay):
-
DQN的算法流程详解
- 步骤1:初始化
- 创建主Q网络(参数θ)和目标Q网络(参数θ⁻ = θ),初始化回放缓冲区D。
- 步骤2:交互与环境探索
- 使用ε-贪婪策略(以概率ε随机动作,否则选择当前Q值最大的动作)平衡探索与利用。
- 每步存储经验(s_t, a_t, r_t, s_{t+1}, done)到缓冲区,其中done表示状态是否终止。
- 步骤3:网络训练
- 每隔一定步数,从缓冲区随机采样一个Minibatch(例如32个样本)。
- 对于每个样本,计算目标Q值:
- 若s_{t+1}是终止状态:目标值 = r_t
- 否则:目标值 = r_t + γ * max_{a} Q_target(s_{t+1}, a; θ⁻)
(Q_target表示目标网络的输出)
- 计算当前Q值:Q_current = Q(s_t, a_t; θ)
- 定义损失函数(均方误差):L(θ) = [目标值 - Q_current]²
- 通过梯度下降(如Adam优化器)更新主网络参数θ。
- 步骤4:更新目标网络
- 每训练C步后,将目标网络参数θ⁻更新为当前主网络参数θ(或使用软更新θ⁻ ← τθ + (1-τ)θ⁻,τ为较小系数)。
- 步骤1:初始化
-
DQN的改进与扩展
- 双DQN(Double DQN):解决Q值过高估计问题。将动作选择与价值评估分离:
目标值 = r_t + γ * Q_target(s_{t+1}, argmax_{a} Q(s_{t+1}, a; θ); θ⁻) - 优先级经验回放:根据时间差分误差(TD-error)为缓冲区中的样本分配优先级,重要样本更频繁被采样。
- Dueling DQN:将Q网络拆分为状态价值函数V(s)和优势函数A(s, a),提高对状态价值的建模能力。
- 双DQN(Double DQN):解决Q值过高估计问题。将动作选择与价值评估分离:
关键点总结
DQN通过经验回放化解数据相关性,利用目标网络稳定训练目标,使神经网络能够有效学习复杂环境中的最优策略。其设计奠定了深度强化学习的基础,后续算法(如Rainbow DQN)融合多项改进进一步提升了性能。