详解DQN训练技巧!带你回到深度强化学习「梦开始的地方」

简介: 详解DQN训练技巧!带你回到深度强化学习「梦开始的地方」
【新智元导读】DeepMind开始称霸强化学习的DQN算法,都有哪些训练技巧?

过去十多年里,DeepMind在人工智能的发展中绝对有着重要的地位,从AlphaGo, AlphaZero到AlphaStar,再到如今的AlphaFold 2,每次DeepMind发布新产品似乎都要彻底消灭该行业

 

围棋界天才少年柯洁都不再下传统围棋,跑去练习云顶之弈。弈一时,悟一世,切换赛道誓在新概念围棋夺生涯第九冠(bushi)。

 

 

DeepMind在围棋、星际争霸和德州扑克等取得的巨大成就,实际上都归功于DeepMind于2013年发布的DQN算法,也是深度学习和强化学习的首次成功结合。

 

Deep Q-Networks (DQN) 于 2013 年首次发布,仅将游戏的像素值作为网络的输入,成功在一套雅达利(Atari)游戏中超越之前的所有模型的得分,甚至有三个还超越了骨灰级玩家的得分。

 

论文链接:https://arxiv.org/pdf/1312.5602.pdf

 

智能体直接从经验中进行学习,并成功学习到有效的行动在当年是一项重大突破,也让通用人工智能AGI的重回大众视线:计算机在诸多任务中获得的智能,也许比人类更强!

 

不过DQN的训练并没有想象中那么简单!

 

Q-learning是什么?

 

Q-learning是强化学习(RL)的经典算法,简单来说,RL智能体与环境进行交互,如果采取的行动是「好」的,就会获得奖励,否则获得惩罚,强化学习算法的目标是最大化智能体获得的长期奖励总和。

 

 

在强化学习智能体和环境之间的交互循环中,每个时间步(timestep),智能体需要选择一个行动(action)来改变环境(environment)状态(state)。环境也提供一个奖励信号(reward signal)以表示智能体的行动是否有利。

 

处于一个特定的游戏状态或采取一个行动的未来奖励是不难估计的,难的是你的行动对环境的影响可能是不确定的,这也意味着你得到的奖励也是不确定的。尤其是在我们不知道环境的运行规则,或是在很遥远的未来且状态数很多的情况下,我们怎么能知道一个行动会带来什么奖励呢?

 

比如说,玩《超级马里奥》某一关时,最佳的行动可能是在第一帧跳跃,但如果奖励一直在关卡的最后阶段,要怎么才能知道这个行动的价值?

 

 

Q-learning采取的方法是学习一个行动-价值函数(action-value function),也被称为Q函数。

 

Q函数为每个(状态,行动)组合分配一个价值,用来表示在某一状态下采取某一行动时预期未来回报的估计,并且Q函数为所有状态都定义了一个价值。

 

在Q-learning中,智能体通过与环境互动和更新采取的(状态,行动)的Q值来学习Q-函数估计价值。在采取一个行动之后,用环境中新状态的Q值来更新所有Q值。重复迭代,最终可以估计出该状态的Q值,并根据这一估计采取行动。

 

 

一些简单的游戏通过这种方式可以估计出所有的(状态,行动)对的价值,但对于雅达利游戏来说,(状态,行动)的组合数量实在是太多了,想存储在一个简单的表格中基本是无法实现的。

 

比如说在打砖块游戏中,如果只用球拍和球,在一个300*800像素的屏幕上,状态的数量就达到了10的9次方到10的11次方,海量的状态空间情况下,引入深度神经网络就显得很必要了。

 

神经网络不好训

 

Q-Learning和神经网络的结合在理论上是非常强大的。Q-learning可以让智能体学习任何决策任务,而神经网络可以表示任何函数。如果成功训练,就会有大量的潜在应用场景得以实现,比如自动驾驶汽车、机器人技术等。

 

 

但要训练Q-learning和神经网络的组合是非常困难的。即使经过多次在不同状态下采取行动并获得奖励的迭代,有时性能也不会提高。常见的情况就是,智能体的性能在明显改进之后开始出现下降。

 

在DeepMind发布DQN论文后,这种情况仍然很常见。

 

 

Q-learning算法的每个更新步骤都是基于该步的经历,但是,如果每走一步就更新的话,算法会因为抽样误差(sampling error)而导致不稳定的更新,而抽样误差是由任意分布中抽取数据点导致的。

 

如果你在最近的数据点的序列上进行训练,那么你看到的数据肯定都是相似的,因为通常需要很多个时间步才能遍历到整个状态空间,所以你访问的下一个状态与你当前所处的状态基本上就算密切相关。样本之间的这种相关性会使得学习效率低下,而将它们打散后,通过打破相关性可以改善学习效果。

 

为了缓解这种情况,DeepMind在DQN算法中引入了一种新机制:经验重放(Experience Replay),其中经验指的是智能体在一个时间段内观察到的状态、行动、奖励和下一个状态。经验重放将每个时间段的状态、行动、奖励和后续状态存储在内存中,并在每个时间段从中随机选择一批。

 

对数据进行抽样训练,使每次更新使用的经验随机化,就可以打破数据点之间的关联性,能够降低更新的方差。由于每一步的经验都被用于许多权重的更新,这也意味着训练需要更少的数据。

 

 

在Q-Learning中,有三个使用Q函数的地方:

 

  1. 为了得到第一个状态的Q值
  2. 用于评估哪个后续状态的Q值最高,以选择一个行动
  3. 找到该后续状态的Q值  

 

将Q-learning与神经网络结合起来,如果直接将同一个网络用于这三个地方,也就意味着如果模型高估了一个状态的价值,那前面的状态也会被高估,因为Q-learning使用最大行动价值作为最大预期行动价值的估计,可能会导致学习到一个错误的Q-函数估计。

 

不过在学习过程中,数值估计不精确是很正常的,也就是说,高估是很常见的。

 

 

如果对Q值的高估在各个状态都是一致的,那这就不是一个问题。如果所有的Q值都有类似的变化,那么我们选择的行动也会是一样的。但从经验上看,实际运行通常不是这样的,也就意味着由近似的Q值产生的策略(policy)不一定会收敛到最佳策略。

 

解决高估问题的方法是使用Double DQN,也是DeepMind在2015年发表的另一篇论文中提出的。

 

论文链接:https://arxiv.org/pdf/1509.06461.pdf

 

Double DQN指的是模型拥有两个深度神经网络,模型使用正在训练的网络在与环境互动时进行行动选择,Q-函数估计更新使用后续状态的Q值,这就是第二个目标网络派上用场的地方。

 

目标网络通常是网络的一个旧版本,用来寻找具有后续状态的最大Q值的行动,而原始网络用来评估这个后续行动的Q值。通过将用于行动选择和行动评估的Q值解耦,就不太可能选择到高估的值了。

 

 

自此,训练DQN的坑基本都被填上了,不过强化学习后续还取得了其他重大进展,比如围棋领域的AlphaGo,星际争霸、德州扑克等领域都被攻克。

 

但一切都是自DQN发布之后,深度强化学习才进入春天,DQN也展现了其解决通用问题的潜力。

参考资料:https://blog.delta-academy.xyz/why-deepmind-dqn-hard-to-train

相关文章
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
大模型开发:解释强化学习以及它与监督学习的不同之处。
强化学习(RL)是机器学习的一种,通过智能体与环境交互学习最优策略,以获取最大回报,常用于动态环境如游戏和机器人。与之不同,监督学习(SL)使用有标签的训练数据来预测新数据,适用于如图像分类等稳定问题。两者关键区别在于学习方式和应用场景:RL侧重环境交互和策略优化,适合未知动态环境;SL依赖已知标签数据,适合标签明确的任务。在大模型开发中,两者各有优势,并不断融合创新,推动人工智能发展。
264 2
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
C++构建 GAN 模型:生成器与判别器平衡训练的关键秘籍
生成对抗网络(GAN)是AI领域的明星,尤其在C++中构建时,平衡生成器与判别器的训练尤为关键。本文探讨了GAN的基本架构、训练原理及平衡训练的重要性,提出了包括合理初始化、精心设计损失函数、动态调整学习率、引入正则化技术和监测训练过程在内的五大策略,旨在确保GAN模型在C++环境下的高效、稳定训练,以生成高质量的结果,推动AI技术的发展。
68 10
|
2月前
|
机器学习/深度学习 存储 人工智能
强化学习与深度强化学习:深入解析与代码实现
本书《强化学习与深度强化学习:深入解析与代码实现》系统地介绍了强化学习的基本概念、经典算法及其在深度学习框架下的应用。从强化学习的基础理论出发,逐步深入到Q学习、SARSA等经典算法,再到DQN、Actor-Critic等深度强化学习方法,结合Python代码示例,帮助读者理解并实践这些先进的算法。书中还探讨了强化学习在无人驾驶、游戏AI等领域的应用及面临的挑战,为读者提供了丰富的理论知识和实战经验。
70 5
|
3月前
|
机器学习/深度学习 监控 数据可视化
深度学习中实验、观察与思考的方法与技巧
在深度学习中,实验、观察与思考是理解和改进模型性能的关键环节。
60 5
|
5月前
|
机器学习/深度学习
神经网络中权重初始化的重要性
【8月更文挑战第23天】
173 0
|
8月前
|
机器学习/深度学习 算法
大模型开发:解释反向传播算法是如何工作的。
反向传播算法是训练神经网络的常用方法,尤其适用于多层前馈网络。它包括前向传播、计算损失、反向传播和迭代过程。首先,输入数据通过网络层层传递至输出层,计算预测值。接着,比较实际输出与期望值,计算损失。然后,从输出层开始,利用链式法则反向计算误差和权重的梯度。通过梯度下降等优化算法更新权重和偏置,以降低损失。此过程反复进行,直到损失收敛或达到预设训练轮数,优化模型性能,实现对新数据的良好泛化。
270 4
|
8月前
|
机器学习/深度学习 算法 关系型数据库
PyTorch深度强化学习中蒙特卡洛策略梯度法在短走廊环境(CartPole-v0)中的实战(超详细 附源码)
PyTorch深度强化学习中蒙特卡洛策略梯度法在短走廊环境(CartPole-v0)中的实战(超详细 附源码)
90 0
|
机器学习/深度学习
深度学习/花书:第十章(序列建模:循环和递归网络)
深度学习/花书:第十章(序列建模:循环和递归网络)
81 2
|
机器学习/深度学习 并行计算 Ubuntu
怎样让ChatGPT在其内部训练神经网络?先让它想象自己有4块3090
怎样让ChatGPT在其内部训练神经网络?先让它想象自己有4块3090
176 0
|
机器学习/深度学习 算法 搜索推荐
零障碍合并两个模型,大型ResNet模型线性连接只需几秒,神经网络启发性新研究
零障碍合并两个模型,大型ResNet模型线性连接只需几秒,神经网络启发性新研究
249 0