第8章:强化学习与深度学习
深度Q网络(DQN)
1. DQN的核心思想
深度Q网络(Deep Q-Network, DQN)是强化学习与深度学习结合的里程碑式方法,其核心是通过神经网络近似Q值函数(动作价值函数)。传统Q学习在高维状态空间(如图像输入)中面临维度灾难问题,而DQN利用深度神经网络的表征能力解决了这一挑战。
2. 关键技术组件
2.1 经验回放(Experience Replay)
- 原理:将智能体的经验(状态、动作、奖励、新状态)存储在回放缓冲区中,训练时随机采样打破数据相关性。
- 优势:
- 提高数据效率
- 减少训练方差
- 避免时序样本的强相关性
2.2 目标网络(Target Network)
- 实现方式:使用独立的目标网络计算Q目标值,定期与主网络同步参数。
- 数学表达:其中为目标网络参数。
y_j = r_j + \gamma \max_{a'} Q(s_{j+1}, a'; \theta^-)
3. 算法流程
- 初始化:
- 主网络和目标网络
- 空回放缓冲区
- 迭代过程:
- 选择动作:-greedy策略
- 执行动作,存储经验到
- 从中随机采样mini-batch
- 计算损失:
- 梯度下降更新
- 每步同步
4. 改进与变体
| 方法 | 核心改进 | 典型论文 |
|---|---|---|
| Double DQN | 解耦动作选择与价值评估 | Hasselt et al. 2015 |
| Dueling DQN | 分离状态价值和优势函数 | Wang et al. 2016 |
| Prioritized Replay | 按TD误差优先级采样 | Schaul et al. 2015 |
5. 代码实现关键点
class DQNAgent:
def __init__(self, state_size, action_size):
self.memory = ReplayBuffer(capacity=10000)
self.model = build_dqn_model(state_size, action_size) # 主网络
self.target_model = build_dqn_model(state_size, action_size) # 目标网络
self.gamma = 0.95 # 折扣因子
self.epsilon = 1.0 # 探索率
def update_target_model(self):
self.target_model.set_weights(self.model.get_weights())
6. 典型应用场景
- 游戏AI:Atari游戏(Breakout, Pong等)
- 机器人控制:离散动作空间下的决策任务
- 资源分配:网络带宽分配、计算资源调度
7. 局限性
- 离散动作限制:难以处理连续动作空间
- 过估计问题:Q值倾向于高估(Double DQN可缓解)
- 样本效率:相比策略梯度方法仍需大量交互数据
经典论文:
Mnih V, et al. "Human-level control through deep reinforcement learning". Nature 2015.
(首次将DQN应用于Atari游戏并超越人类水平)
