强化学习:Q-learning与SARSA算法实战
1. Q-learning算法概述
在强化学习中,Q-learning算法是一种强大的工具,它能很好地解决两个重要问题。首先是信用分配问题,即确保导向胜利的每一步行动都能得到奖励,哪怕环境没有直接给予奖励。Q-learning的更新规则会将成功行动的奖励从导致胜利的最后一步反向传播到第一步。其次是探索与利用困境,通过使用ε-贪心或softmax策略,算法既能倾向于选择已被证明成功的行动(利用),也会偶尔尝试其他行动以探索新的可能性(探索)。
2. Q-learning在Flippers游戏中的应用
2.1 实验设置
为了测试Q-learning算法的性能,我们让其在一个不可预测的环境中学习玩Flippers游戏。具体设置如下:
-
参数设置
:
- 学习率α设为0.95,这意味着每次更新时每个单元格仅保留其旧值的5%,这样既能保留之前学习到的信息,又能期望新值基于改进后的Q表值而更优。
- 采用ε-贪心策略,ε设为0.1,即算法每10次行动中有1次会探索新的行动。
- 折扣因子γ设为0.2,因为每次行动后有10%的概率会有随机卡车经过并随机翻转一个瓷砖,这个较低的值表示由于随机事件的影响,我们仅20%确定未来每次的情况都相同,但γ值高于卡车引入的噪声水平(10%),因为大多数良好的游戏可能只需三到四步,相比10步或更多步的游戏,遇到随机事件的可能性更小。
-
实验过程
:
- 我们对512种可能的点和空白模式的起始棋盘各进行10次游戏,共进行5120场游戏,并将超过100步的游戏截断。
2.2 实验结果
- 300次训练后 :从图21 - 30可以看出,算法已经找到了很多快速获胜的方法。“即时获胜”(即起始棋盘已有三个点排成垂直列或水平行)的情况出现在第一列,对应零步。由于有六种可能的获胜游戏配置,且每种棋盘配置运行了10次,所以我们有60次从获胜棋盘开始。同时,没有游戏达到100步的截断值,说明算法没有陷入长周期循环,可能是因为系统“发现”循环无法导向胜利且没有奖励,所以学会了避免。
- 3000次训练后 :最长游戏现在仅需20步,大多数游戏在10步或更少步数内获胜,且在四到五步处有更密集的聚类。但从图21 - 32中一个典型游戏来看,算法似乎是随机翻转瓷砖,最终偶然找到解决方案,结果并不理想。
- 6000次训练后 :与3000次训练的结果相比,最长游戏从20步减少到18步,3步和4步的短游戏变得更频繁。图21 - 34显示之前需要8步获胜的同一游戏现在只需4步,这表明算法性能有了显著提升。
3. SARSA算法
3.1 算法原理
Q-learning虽然表现出色,但存在一个缺陷,即其更新规则假设下一步会选择得分最高的行动,并基于此计算新的Q值。然而,实际情况中策略可能会选择其他行动,导致计算使用了错误的数据,降低了新Q值的准确性。为了解决这个问题,我们引入了SARSA算法。
SARSA是“state - action - reward - state - action”的缩写,它通过使用策略选择下一个单元格(而不是直接选择最大的那个)并记住行动选择(即最后的额外“A”)来解决从下一个状态选择错误单元格的问题。在构建新的Q值时,它使用实际会使用的行动的值。与Q-learning相比,SARSA只是移动了行动选择步骤并记住所选行动,但这可能会对学习速度产生很大影响。
3.2 SARSA的行动步骤
- 第一步 :如图21 - 35所示,使用策略选择当前行动,然后再使用策略选择下一步行动,并根据下一步行动的Q值更新当前行动的Q值。
- 第二步 :如图21 - 36所示,执行上一步选择的行动,然后选择第三步的行动,并使用其Q值更新当前行动的Q值。
- 第三步 :如图21 - 37所示,执行第二步确定的行动,选择第四步的行动,并使用其Q值改进当前行动的Q值。
可以证明SARSA也会收敛,虽然不能保证收敛所需的时间,但它通常比Q-learning更快产生良好结果并快速改进。
3.3 SARSA在Flippers游戏中的应用
- 3000次训练后 :从图21 - 38可以看出,大多数值集中在4附近,最长游戏仅15步,超过8步的游戏很少。一个典型游戏(图21 - 39)需要7步获胜,虽然不是很理想,但有改进空间。
- 6000次训练后 :最长游戏从15步降至14步,3步和4步的短游戏数量更加明显,超过6步的游戏不多。图21 - 41显示之前需要7步获胜的同一游戏现在只需3步。
4. Q-learning与SARSA的比较
4.1 6000次训练后比较
图21 - 42显示了Q-learning和SARSA在6000次训练后所有5120场可能游戏的长度。两者大致相当,但Q-learning产生了一些比SARSA最长12步更长的游戏。
4.2 60000次训练后比较
图21 - 43显示,在60000次训练后,SARSA在Flippers游戏中表现出色,几乎所有游戏都在6步或更少步数内完成(很少有游戏需要7步)。Q-learning整体表现稍差,有些游戏最多需要16步,但也主要集中在4步及以下。
4.3 平均游戏长度比较
图21 - 44展示了从1到100000次训练(以1000次为增量)的平均游戏长度。可以看出,两种算法的平均游戏长度都迅速下降然后趋于平稳,但经过一段波动期后,SARSA始终表现更好,最终平均每场游戏节省近半步(即平均每两场游戏少走一步)。到100000次训练时,两种算法似乎都停止了改进,可能是因为它们的Q表已进入稳定状态,只是由于环境引入的随机翻转而略有变化。
5. 强化学习的宏观视角
强化学习的基本框架包括环境和智能体。环境为智能体提供两个数字列表(状态变量和可用行动),智能体根据其策略,结合内部保存的私有信息,从行动列表中选择一个值并返回给环境。作为响应,环境会给智能体返回一个数字(奖励)和两个新列表。
虽然将这些列表解释为棋盘和移动让我们可以从学习玩游戏的角度思考Q-learning,但智能体并不知道自己在玩游戏或存在规则,它只知道输入两个数字列表,选择一个值,然后得到一个奖励值。如果我们能找到一种用数字集描述环境和对环境的行动的方法,并且能找到一种粗略区分好行动和坏行动的方法,这个算法就能学习如何执行高质量的行动。
然而,Q表的实际应用存在一定局限性。以不同规模的游戏为例:
| 游戏名称 | 棋盘规模 | 状态数量 | Q表单元格数量 |
| ---- | ---- | ---- | ---- |
| Flippers | 3×3 | 512 | 4608 |
| 井字棋(3×3) | 3×3 | 20000 | 180000 |
| 井字棋(4×4) | 4×4 | 超过4300万 | 约3.9亿 |
| 井字棋(5×5) | 5×5 | 近8500亿 | - |
| 井字棋(13×13) | 13×13 | 超过可见宇宙中的原子数 | - |
| 围棋 | 19×19 | - | 行标签需173位数字 |
可以看到,随着游戏复杂度的增加,Q表的规模会变得非常庞大,存储变得不切实际。但DeepMind团队通过将强化学习与深度学习相结合,构建了AlphaGo,它著名地击败了人类世界冠军。这种深度强化学习方法的一个关键见解是消除Q表的显式存储,将Q表视为一个函数,输入棋盘状态,输出移动编号和Q值,而神经网络在学习预测这类事情方面表现出色。
mermaid流程图如下:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(环境提供状态和行动列表):::process
B --> C{智能体选择行动}:::decision
C --> D(智能体执行行动):::process
D --> E(环境给予奖励和新列表):::process
E --> F{是否结束游戏}:::decision
F -->|否| B
F -->|是| G([结束]):::startend
综上所述,Q-learning和SARSA算法在学习玩Flippers游戏中都表现良好,但SARSA通常能使游戏步数更短。同时,深度强化学习为解决复杂游戏中Q表存储问题提供了有效的解决方案。
6. 强化学习算法的优势与挑战
6.1 优势
- 适应性强 :Q-learning和SARSA算法能够在具有一定不确定性的环境中学习,如在Flippers游戏中,即使存在随机卡车翻转瓷砖的干扰,算法仍能通过不断训练找到较好的解决方案。
- 自主学习 :智能体无需明确知道游戏规则,仅通过环境提供的状态、行动和奖励信息,就能自主学习如何选择最优行动,这使得算法具有广泛的应用潜力。
- 可扩展性 :虽然简单的Q表在处理复杂游戏时会面临存储问题,但通过结合深度学习等技术,如DeepMind团队的AlphaGo,强化学习可以应用于更复杂的场景。
6.2 挑战
- Q表存储问题 :随着游戏复杂度的增加,Q表的规模呈指数级增长,导致存储和计算成本变得不可接受。例如,在大型棋盘游戏中,Q表的状态数量可能超过可见宇宙中的原子数,这使得传统的Q表存储方式不再可行。
- 训练时间长 :从Flippers游戏的实验结果可以看出,算法需要大量的训练次数才能达到较好的性能。例如,Q-learning和SARSA算法在经过100000次训练后才似乎停止改进,这在实际应用中可能需要耗费大量的时间和计算资源。
- 参数调整困难 :Q-learning和SARSA算法中的参数(如学习率α、折扣因子γ和探索率ε)对算法的性能有重要影响,但这些参数的选择通常需要通过试错实验来确定,缺乏明确的理论指导。在实际应用中,不同的环境和任务可能需要不同的参数设置,这增加了算法的使用难度。
7. 强化学习的应用领域展望
7.1 游戏领域
除了上述的Flippers和井字棋等简单游戏,强化学习在更复杂的游戏中也有广泛的应用前景。例如,在电子竞技游戏中,智能体可以通过强化学习学习到最优的策略,与人类玩家进行对抗。此外,在角色扮演游戏中,智能体可以根据玩家的行为和环境的变化,动态调整自己的行动,提供更加丰富和真实的游戏体验。
7.2 机器人领域
在机器人控制中,强化学习可以帮助机器人学习如何在复杂的环境中完成任务。例如,机器人可以通过强化学习学习如何避开障碍物、抓取物体等。通过不断地与环境交互并获得奖励,机器人可以逐渐优化自己的行动策略,提高任务完成的效率和准确性。
7.3 金融领域
在金融投资中,强化学习可以用于构建投资策略。智能体可以根据市场的历史数据和实时信息,学习如何选择最优的投资组合,以实现收益最大化。此外,强化学习还可以用于风险管理,帮助金融机构识别和应对潜在的风险。
7.4 交通领域
在交通系统中,强化学习可以用于优化交通流量。例如,智能交通信号灯可以通过强化学习根据实时交通情况调整信号灯的时间,以减少交通拥堵。此外,自动驾驶汽车也可以利用强化学习学习如何在不同的路况和交通规则下安全、高效地行驶。
8. 强化学习算法的优化建议
8.1 结合深度学习
如前文所述,结合深度学习可以有效解决复杂游戏中Q表存储的问题。通过使用神经网络来近似Q表,智能体可以在不存储大量Q值的情况下学习到最优策略。例如,AlphaGo通过深度卷积神经网络学习棋盘状态和行动之间的映射关系,取得了很好的效果。
8.2 自适应参数调整
为了减少参数调整的难度,可以采用自适应参数调整方法。例如,在训练过程中,根据智能体的性能动态调整学习率、折扣因子和探索率等参数。当智能体的性能提升缓慢时,可以适当增大学习率;当智能体陷入局部最优时,可以增加探索率。
8.3 多智能体协作
在一些复杂的任务中,可以采用多智能体协作的方式。多个智能体可以通过相互协作和竞争,共同学习如何完成任务。例如,在团队游戏中,多个智能体可以通过协作制定团队策略,提高团队的整体性能。
9. 总结
强化学习是一种强大的机器学习方法,Q-learning和SARSA算法作为其中的代表,在学习玩Flippers游戏等简单任务中表现出了良好的性能。然而,这些算法在处理复杂问题时面临着Q表存储、训练时间长和参数调整困难等挑战。
为了克服这些挑战,深度强化学习应运而生,通过结合深度学习技术,有效地解决了Q表存储问题,并在复杂游戏如围棋中取得了显著的成果。此外,强化学习在游戏、机器人、金融和交通等领域都有广阔的应用前景。
在未来的研究和应用中,我们可以进一步探索强化学习算法的优化方法,如结合深度学习、自适应参数调整和多智能体协作等,以提高算法的性能和适用性。同时,我们也需要不断拓展强化学习的应用领域,为解决更多实际问题提供有效的解决方案。
以下是一个关于强化学习算法选择的决策表格:
| 场景特点 | 推荐算法 | 原因 |
| ---- | ---- | ---- |
| 环境确定性高,探索需求低 | Q-learning | 简单直接,能快速收敛到最优策略 |
| 环境不确定性高,需要实时调整策略 | SARSA | 更能适应实际选择的行动,减少误差 |
| 复杂游戏或大规模问题 | 深度强化学习 | 解决Q表存储问题,提高学习效率 |
mermaid流程图展示强化学习算法优化流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(选择基础算法):::process
B --> C{是否为复杂问题}:::decision
C -->|是| D(结合深度学习):::process
C -->|否| E(选择Q-learning或SARSA):::process
D --> F(训练模型):::process
E --> F
F --> G{性能是否满足要求}:::decision
G -->|否| H(自适应参数调整):::process
H --> F
G -->|是| I(考虑多智能体协作):::process
I --> J([结束]):::startend
总之,强化学习为我们提供了一种强大的工具,帮助智能体在各种环境中学习和决策。通过不断的研究和创新,我们有望进一步挖掘强化学习的潜力,推动其在更多领域的应用和发展。
超级会员免费看

被折叠的 条评论
为什么被折叠?



