68、深度Q学习变体及其他流行强化学习算法介绍

深度Q学习变体及其他流行强化学习算法介绍

1. 深度Q学习算法变体

深度Q学习算法有一些变体可以稳定并加速训练过程,下面为你详细介绍几种重要的变体。

1.1 固定Q值目标

在基本的深度Q学习算法中,模型既用于预测,又用于设定自身目标,这就像狗追自己的尾巴一样,会形成反馈循环,导致网络不稳定,可能出现发散、振荡、冻结等情况。

为了解决这个问题,研究人员使用了两个深度Q网络(DQN):
- 在线模型 :在每一步进行学习,并用于控制智能体的行动。
- 目标模型 :仅用于定义目标。目标模型是在线模型的克隆体,通过以下代码实现克隆和权重复制:

target = tf.keras.models.clone_model(model)  # 克隆模型架构
target.set_weights(model.get_weights())  # 复制权重

training_step() 函数中,计算下一个状态的Q值时,使用目标模型而非在线模型:

next_Q_values = target.predict(next_states, verbose=0)

在训练循环中,需要定期(例如每50个回合)将在线模型的权重复制到目标模型:

if episode % 50 == 0:
    target.set_weights(model.get_weights())

由于目标模型的更新频率远低于在线模型,Q值目标更加稳定,反馈循环得到抑制,其影响也不那么严重。为了进一步稳定训练,还可以使用较小的学习率(如0.00025),每10000步更新一次目标模型,使用包含100万条经验的大型回放缓冲区,缓慢降低epsilon值(从1在100万步内降至0.1),并让算法运行5000万步。此外,DQN可以采用深度卷积网络。

1.2 双深度Q网络(Double DQN)

目标网络容易高估Q值。例如,当所有动作的Q值理论上相同时,由于近似误差,目标模型可能会随机选择一个略大的Q值,从而高估真实的Q值。

为了解决这个问题,研究人员提出了双深度Q网络(Double DQN)。在选择下一个状态的最佳动作时,使用在线模型;仅使用目标模型来估计这些最佳动作的Q值。以下是更新后的 training_step() 函数:

def training_step(batch_size):
    experiences = sample_experiences(batch_size)
    states, actions, rewards, next_states, dones, truncateds = experiences
    next_Q_values = model.predict(next_states, verbose=0)  # ≠ target.predict()
    best_next_actions = next_Q_values.argmax(axis=1)
    next_mask = tf.one_hot(best_next_actions, n_outputs).numpy()
    max_next_Q_values = (target.predict(next_states, verbose=0) * next_mask
                        ).sum(axis=1)
    [...]  # 其余部分与之前相同

1.3 优先经验回放(Prioritized Experience Replay)

传统的经验回放是从回放缓冲区中均匀采样经验,而优先经验回放则更频繁地采样重要经验。重要经验是指那些可能导致快速学习进展的经验,可以通过测量时间差分(TD)误差δ = r + γ·V(s′) – V(s)的大小来估计。

当经验被记录到回放缓冲区时,其优先级被设置为一个非常大的值,以确保至少被采样一次。每次采样后,计算TD误差δ,并将经验的优先级设置为p = |δ|(加上一个小常数以确保每个经验都有非零的采样概率)。采样优先级为p的经验的概率P与pζ成正比,其中ζ是一个超参数,控制重要性采样的贪婪程度:
- 当ζ = 0时,等同于均匀采样。
- 当ζ = 1时,是完全的重要性采样。

由于样本会偏向重要经验,在训练时需要通过降低经验的权重来补偿这种偏差。每个经验的训练权重定义为w = (n P)–β,其中n是回放缓冲区中的经验数量,β是一个超参数,控制对重要性采样偏差的补偿程度:
- β = 0表示不补偿。
- β = 1表示完全补偿。

1.4 对决深度Q网络(Dueling DQN)

对决深度Q网络(DDQN)与双深度Q网络不同,但两者可以轻松结合。状态 - 动作对(s, a)的Q值可以表示为Q(s, a) = V(s) + A(s, a),其中V(s)是状态s的值,A(s, a)是在状态s下采取动作a相对于其他可能动作的优势。

在对决DQN中,模型同时估计状态的值和每个可能动作的优势。由于最佳动作的优势应为0,模型会从所有预测的优势中减去最大预测优势。以下是一个使用函数式API实现的简单DDQN模型:

input_states = tf.keras.layers.Input(shape=[4])
hidden1 = tf.keras.layers.Dense(32, activation="elu")(input_states)
hidden2 = tf.keras.layers.Dense(32, activation="elu")(hidden1)
state_values = tf.keras.layers.Dense(1)(hidden2)
raw_advantages = tf.keras.layers.Dense(n_outputs)(hidden2)
advantages = raw_advantages - tf.reduce_max(raw_advantages, axis=1,
                                            keepdims=True)
Q_values = state_values + advantages
model = tf.keras.Model(inputs=[input_states], outputs=[Q_values])

这些变体可以相互结合,例如可以构建双对决DQN并结合优先经验回放。

1.5 变体总结表格

变体名称 解决的问题 主要实现方式
固定Q值目标 网络不稳定 使用两个DQN,定期更新目标模型权重
双深度Q网络 目标网络高估Q值 用在线模型选动作,目标模型估Q值
优先经验回放 均匀采样效率低 按经验重要性采样并补偿偏差
对决深度Q网络 分离状态值和动作优势 模型同时估计状态值和动作优势

1.6 深度Q学习变体流程图

graph LR
    A[基本深度Q学习算法] --> B[固定Q值目标]
    A --> C[双深度Q网络]
    A --> D[优先经验回放]
    A --> E[对决深度Q网络]
    B --> F[稳定网络训练]
    C --> F
    D --> F
    E --> F

2. 其他流行的强化学习算法

除了深度Q学习的变体,还有许多其他流行的强化学习算法,下面为你逐一介绍。

2.1 AlphaGo

AlphaGo使用基于深度神经网络的蒙特卡罗树搜索(MCTS)变体,在围棋比赛中击败了人类冠军。MCTS会进行多次模拟,从当前位置反复探索搜索树,在最有希望的分支上花费更多时间。当到达一个未访问过的节点时,它会随机下棋直到游戏结束,并根据最终结果更新每个访问节点的估计值。

AlphaGo基于相同的原理,但使用策略网络来选择移动,而不是随机下棋。这个策略网络使用策略梯度进行训练。最初的算法涉及三个以上的神经网络,后来在相关改进中,使用单个神经网络来选择移动和评估游戏状态。相关算法还得到了进一步推广,使其不仅能处理围棋,还能处理国际象棋和将棋。

2.2 演员 - 评论家算法

演员 - 评论家算法是一类将策略梯度与深度Q网络相结合的强化学习算法。一个演员 - 评论家智能体包含两个神经网络:策略网络和深度Q网络(DQN)。

DQN通过从智能体的经验中学习进行正常训练。策略网络的学习方式与常规策略梯度不同且更快,它依赖于DQN估计的动作值,就像运动员在教练的帮助下学习一样。

2.3 异步优势演员 - 评论家(A3C)

这是DeepMind研究人员在2016年引入的一种重要的演员 - 评论家变体。多个智能体并行学习,探索环境的不同副本。每个智能体定期但异步地将一些权重更新推送到主网络,然后从该网络拉取最新权重。这样,每个智能体都有助于改进主网络,并从其他智能体的学习中受益。此外,DQN估计每个动作的优势,而不是Q值,这有助于稳定训练。

2.4 优势演员 - 评论家(A2C)

A2C是A3C算法的变体,它消除了异步性。所有模型更新都是同步的,因此梯度更新在更大的批次上进行,这使得模型能够更好地利用GPU的计算能力。

2.5 软演员 - 评论家(SAC)

SAC是2018年由相关研究人员提出的演员 - 评论家变体。它不仅学习奖励,还最大化其动作的熵,即尽可能地不可预测,同时尽可能多地获得奖励。这鼓励智能体探索环境,加速训练,并减少在DQN产生不完美估计时反复执行相同动作的可能性。与之前的算法相比,SAC具有惊人的样本效率。

2.6 近端策略优化(PPO)

PPO算法由OpenAI的研究人员提出,基于A2C,但对损失函数进行裁剪,以避免过大的权重更新,从而防止训练不稳定。它是之前的信任区域策略优化(TRPO)算法的简化版本。OpenAI在2019年4月推出了基于PPO算法的AI“OpenAI Five”,在多人游戏Dota 2中击败了世界冠军。

2.7 基于好奇心的探索

强化学习中一个常见的问题是奖励的稀疏性,这使得学习非常缓慢和低效。研究人员提出了一种有趣的方法来解决这个问题:让智能体对探索环境充满好奇心,使奖励成为智能体内在的驱动力,而不是来自环境。

智能体不断尝试预测其动作的结果,并寻找结果与预测不匹配的情况。如果结果可预测,它会去其他地方;如果结果不可预测但智能体无法控制,它也会逐渐感到无聊。通过这种方式,研究人员成功地在许多视频游戏中训练了智能体。

2.8 开放式学习(OEL)

OEL的目标是训练能够不断学习新的、有趣任务的智能体,这些任务通常是程序生成的。例如,相关算法会生成多个包含颠簸和孔洞的模拟2D环境,并为每个环境训练一个智能体,智能体的目标是尽可能快地行走同时避开障碍物。

算法从简单的环境开始,逐渐增加难度。每个智能体只在一个环境中训练,但需要定期与其他环境中的智能体竞争,获胜者会被复制并替换原环境中的智能体。这样,知识在不同环境之间转移,最终训练出的智能体比在单一任务上训练的智能体更优秀,能够应对更具挑战性的环境。

2.9 其他流行算法总结表格

算法名称 主要特点 优势
AlphaGo 基于MCTS和深度神经网络 在棋类游戏中表现出色
演员 - 评论家算法 结合策略梯度和DQN 学习速度较快
A3C 多智能体异步学习 加速训练并稳定网络
A2C 同步更新模型 更好利用GPU计算能力
SAC 最大化动作熵 样本效率高
PPO 裁剪损失函数 避免训练不稳定
基于好奇心的探索 以好奇心驱动探索 解决奖励稀疏问题
开放式学习 不断生成新任务 训练通用能力强的智能体

2.10 其他流行算法流程图

graph LR
    A[强化学习算法] --> B[AlphaGo]
    A --> C[演员 - 评论家算法]
    C --> D[A3C]
    C --> E[A2C]
    C --> F[SAC]
    A --> G[PPO]
    A --> H[基于好奇心的探索]
    A --> I[开放式学习]
    B --> J[棋类游戏应用]
    D --> K[稳定高效训练]
    E --> K
    F --> K
    G --> K
    H --> K
    I --> K

3. 强化学习相关问题及练习

3.1 常见问题解答

以下是一些强化学习中的常见问题及解答:
1. 如何定义强化学习,它与常规监督或无监督学习有何不同? :强化学习是智能体通过与环境交互,根据环境反馈的奖励来学习最优行为策略的过程。与监督学习不同,它没有明确的标记数据;与无监督学习不同,它有奖励信号引导学习。
2. 能否想出三个未提及的强化学习应用? :例如自动驾驶、资源管理、游戏AI等。以自动驾驶为例,环境是道路和交通状况,智能体是自动驾驶汽车,可能的动作包括加速、减速、转弯等,奖励可以是安全到达目的地、遵守交通规则等。
3. 折扣因子是什么,修改折扣因子会改变最优策略吗? :折扣因子用于权衡未来奖励的重要性。修改折扣因子可能会改变最优策略,因为它会影响智能体对短期和长期奖励的偏好。
4. 如何衡量强化学习智能体的性能? :可以通过累计奖励、成功率、完成任务的时间等指标来衡量。
5. 什么是信用分配问题,它何时发生,如何缓解? :信用分配问题是指在一系列动作后,难以确定每个动作对最终奖励的贡献。它通常在延迟奖励的情况下发生。可以通过使用合适的算法(如策略梯度)和设计合理的奖励函数来缓解。
6. 使用回放缓冲区的目的是什么? :回放缓冲区可以打破数据之间的相关性,提高数据的利用率,使训练更加稳定。
7. 什么是离策略强化学习算法? :离策略算法使用不同于当前正在学习的策略来生成数据,这可以使学习更加高效。

3.2 练习建议

如果你想进一步学习强化学习,可以尝试以下练习:
1. 使用策略梯度解决OpenAI Gym的LunarLander - v2环境。
2. 使用双对决DQN训练一个智能体,使其在著名的Atari Breakout游戏(“ALE/Breakout - v5”)中达到超人水平。需要将观察到的图像转换为灰度图,裁剪并下采样,合并两到三个连续图像形成每个状态,并且DQN主要由卷积层组成。
3. 如果你有一定预算,可以购买树莓派3和一些廉价的机器人组件,在上面安装TensorFlow,进行机器人相关的强化学习实验。例如,让机器人转动以找到最亮的角度或最近的物体,并向该方向移动;如果机器人有摄像头,可以尝试实现目标检测算法,使其检测到人并向人移动。

强化学习是一个快速发展且令人兴奋的领域,每天都有新的想法和算法涌现,希望这些介绍能激发你对这个领域的探索欲望。

课程设计报告:总体方案设计说明 一、软件开发环境配置 本系统采用C++作为核心编程语言,结合Qt 5.12.7框架进行图形用户界面开发。数据库管理系统选用MySQL,用于存储用户数据与小精灵信息。集成开发环境为Qt Creator,操作系统平台为Windows 10。 二、窗口界面架构设计 系统界面由多个功能模块构成,各模块职责明确,具体如下: 1. 起始界面模块(Widget) 作为应用程序的入口界面,提供初始导航功能。 2. 身份验证模块(Login) 负责处理用户登录与账户注册流程,实现身份认证机制。 3. 游戏主大厅模块(Lobby) 作为用户登录后的核心交互区域,集成各项功能入口。 4. 资源管理模块(BagWidget) 展示用户持有的全部小精灵资产,提供可视化资源管理界面。 5. 精灵详情模块(SpiritInfo) 呈现选定小精灵的完整属性数据与状态信息。 6. 用户名录模块(UserList) 系统内所有注册用户的基本信息列表展示界面。 7. 个人资料模块(UserInfo) 显示当前用户的详细账户资料与历史数据统计。 8. 服务器精灵选择模块(Choose) 对战准备阶段,从服务器可用精灵池中选取参战单位的专用界面。 9. 玩家精灵选择模块(Choose2) 对战准备阶段,从玩家自有精灵库中筛选参战单位的操作界面。 10. 对战演算模块(FightWidget) 实时模拟精灵对战过程,动态呈现战斗动画与状态变化。 11. 对战结算模块(ResultWidget) 对战结束后,系统生成并展示战斗结果报告与数据统计。 各模块通过统一的事件驱动机制实现数据通信与状态同步,确保系统功能的连贯性与数据一致性。界面布局遵循模块化设计原则,采用响应式视觉方案适配不同显示环境。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值