【机器学习】机器学习的基本分类-强化学习-Deep Q-Network (DQN)
Deep Q-Network (DQN) 是 Q-Learning 的扩展版本,通过使用深度神经网络来逼近 Q 函数,解决了 Q-Learning 在高维状态空间上的适用性问题。DQN 是深度强化学习的里程碑之一,其突破性地在 Atari 游戏上表现出了超过人类玩家的水平。
DQN 的核心思想
DQN 使用一个神经网络 来逼近状态-动作值函数 。通过不断地更新网络参数 θ\thetaθ,使其逼近真实的 。
其主要改进在于解决了传统 Q-Learning 中 不稳定性 和 发散性 的问题。
DQN 的改进与关键技术
-
经验回放(Experience Replay)
- 将智能体的交互数据存储到一个 回放缓冲区(Replay Buffer)中。
- 随机采样小批量数据进行训练,以减少样本之间的相关性,提高数据利用率。
-
目标网络(Target Network)
- 引入一个与主网络结构相同但参数固定的 目标网络 。
- 每隔一定步数,将主网络的参数 θ\thetaθ 同步到目标网络上,减缓更新的频繁波动。
-
奖励剪辑(Reward Clipping)
- 将奖励值裁剪到 ,防止过大值影响梯度更新的稳定性。
DQN 的工作流程
-
初始化
- 初始化主网络 和目标网络 。
- 初始化经验回放缓冲区 D。
-
采样交互数据
-
当前状态 sss 下,按照 -贪婪策略选择动作 a:
- 以 ϵ 的概率随机探索。
- 以 1−ϵ 的概率选择最大 的动作。
-
执行动作 a,观察即时奖励 R 和下一状态 s′。
-
将 (s, a, R, s') 存入经验回放缓冲区 D。
-
-
更新网络参数
- 从 D 中随机采样一个小批量 (s, a, R, s')。
- 计算目标值(TD 目标):
- 计算均方误差(MSE)损失:
[(y−Qθ(s,a))2] - 使用梯度下降更新主网络参数 θ。
-
同步目标网络
- 每隔固定步数,将主网络的参数 θ 同步到目标网络 θ′。
-
迭代训练
- 重复上述步骤,直到收敛。
伪代码
Initialize Q-network with random weights θ
Initialize target network Q_target with weights θ_target = θ
Initialize replay buffer D
for episode in range(max_episodes):
Initialize state s
for t in range(max_steps_per_episode):
# ε-greedy action selection
if random.random() < ε:
a = random_action()
else:
a = argmax(Q(s, a; θ))
# Execute action and observe next state and reward
s', R, done = environment.step(a)
# Store transition in replay buffer
D.append((s, a, R, s'))
# Sample random minibatch from replay buffer
minibatch = random.sample(D, batch_size)
# Compute target value
y = R + γ * max(Q_target(s', a'; θ_target)) if not done else R
# Compute loss and update Q-network
loss = (y - Q(s, a; θ))^2
Perform gradient descent on θ to minimize loss
# Update target network
if t % target_update_freq == 0:
θ_target ← θ
if done:
break
优缺点
优点
- 高效处理高维状态空间:使用神经网络学习 Q(s, a),适用于图像等复杂输入。
- 数据利用率高:经验回放缓冲区减少了样本相关性,提高了数据效率。
- 稳定性增强:目标网络缓解了更新发散问题。
缺点
- 不适用于连续动作空间:DQN 假设动作空间是离散的。
- 样本效率低于新方法:如基于策略的算法和 Actor-Critic 方法。
- 容易过拟合到训练环境:需要精心设计探索策略。
改进版本
-
Double DQN
- 解决 DQN 中 max 运算导致的 值过高估计 问题。
- 目标值:
-
Dueling DQN
- 将 Q 网络拆分为 状态价值函数 V(s) 和 优势函数 A(s, a):
Q(s, a) = V(s) + A(s, a)
- 将 Q 网络拆分为 状态价值函数 V(s) 和 优势函数 A(s, a):
-
Prioritized Experience Replay
- 通过为经验分配优先级,增加对高 TD 误差样本的采样频率。
-
Rainbow DQN
- 集成了多种改进,包括 Double DQN、Dueling DQN、Prioritized Replay、Noisy Networks 等。
应用场景
-
Atari 游戏
- 使用原始图像像素作为输入,DQN 在许多 Atari 游戏中实现了超越人类玩家的表现。
-
自动驾驶
- 处理离散决策问题,如车道选择。
-
动态资源分配
- 云计算中的任务分配和调度。
-
推荐系统
- 优化用户交互中的点击率。