漫谈DQN之Q-Learning

DeepMind于2013年12月份在arixv上发表了一篇论文Playing Atari with Deep Reinforcement Learning,该论文介绍了一种将传统的强化学习与深度学习相结合的模型,它可以直接根据屏幕像素点输出游戏动作。随后,2015年2月份DeepMind文章 Human-level Control through Deep Reinforcement Learning作为Nature封面被刊登,该文章的深度强化学习模型无需修改直接玩49种游戏,而且有一半游戏的表现已经超越人类,同时,DeepMind也被Google立即收购。

虽然早在上个世纪就有学者提出将强化学习与神经网络进行结合,但是深度强化学习无疑是DeepMind带火的,也算是DeepMind的“专利”,而AlphaGo则是彻底让大众也了解了这个“专利”。近日,DeepMind宣布将于今年5月份在中国乌镇挑战围棋冠军柯洁并增加人机团队赛,届时我们拭目以待。我们不禁要问一个问题,为什么深度强化学习如此高效?传统的强化学习需要对所有状态空间进行迭代,但是现实中很多问题的状态空间接近无穷,使用传统的迭代方法已经无法取得进展。由于深度神经网络具有强大的表征能力,并且随机梯度下降算法也可以很好地保证神经网络易于学习、收敛,当然,这其中还涉及很多技巧,例如经验回放、策略网络、价值网络、价值截断等等,因此,二者结合是必然的趋势,毕竟强化学习的未来不仅仅只是玩游戏而已,面对现实错综复杂的环境,如果不能有效地对环境状态进行模拟,那强化学习是没有实用价值的。

未来一段时间博客将聚焦于DQN的算法以及实践,今天先介绍一下Q-Learning算法基础。

在Q-Learning中,函数Q(s,a)是代表机器人在状态s时采取动作a所得到的未来价值回报,可能有读者就有疑问了,当前我采取了动作a,我怎么知道我当前这个做法在未来的价值回报是多少?确实不能,如果我们仅仅知道当下的状态、动作,而不知道紧接下来的动作及其回报。

怎么求Q(s,a)是一个摆在我们面前的大问题,虽然我们无法确切的知道Q(s,a)是多少,但是我们可以在心里面假想这个Q(s,a)一定是存在的,一旦Q(s,a)存在,于是我们在每一个状态s时,只需采取满足Q(s,a)最大的那个动作a了。

如何计算Q(s,a)?我们可以回顾一下Bellman方程,即前后两个相邻的Q(s,a)必须满足的关系,简单说就是当前采取的行动的最大价值回报等于瞬时回报加上下一个状态的最大回报。顺此思路,Q-Learning的做法就是使用此Bellman方程不断逼近Q(s,a)

Q-Learning最简单最直接的做法就是构建一个状态-动作表,该表中存储着每个状态采取每个动作时候的Q值。该做法的流程可以总结如下:

假设状态数目为A,动作数目为B

  • 随机初始化数组Q[A, B]


  • 定义或获取初始状态s


  • 重复以下步骤直到数组Q收敛


    (1) 选取一个动作a并且执行


    (2) 接受回报R,同时转移到下一个状态s’


    (3) 更新Q[s , a]的值


    (4) 状态变为s’,并返回到步骤(1)

可以看到,使用Q[s,a]来进行Q-Learning的算法流程非常简单,不过上述算法中有以下几个值得思考的关键点:
第一,如何选取动作a?

如果仅仅是采取贪婪的算法,在每个状态s处挑选让此状态达到最大值的动作a,这种做法眼光太狭隘,只注重眼前利益,不顾长远回报,其使得expoitation达到了最大,exploration却最小,最终陷入局部最优。因此比较好的办法是在选取动作a的时候,既要注重expoitation,又要考虑exploration,可以采取e-greedy算法,设定一定的概率让机器人随机采取动作,其余时候贪婪做出决策。

第二,如何更新Q[s,a]的值?

前面说了,由Bellman方程可知,Q[s,a]=R+max(Q[s',:]),从梯度下降的角度看,这个新的Q[s,a]是在s状态下求出的最大未来回报,也是我们渴望逼近的值,但是我们在更新旧的Q[s,a]的时候,不能将此新的Q[s,a]直接替代旧的Q[s,a],因为这个新的Q[s,a]只是我们的一种估计,甚至是一种带噪声的估计。因此,不能直接使用新的Q[s,a]去取代旧的Q[s,a],而应该是让旧的Q[s,a]朝着新的Q[s,a]走一小步,用公式描述就是:

Q[s,a]=Q[s,a]+lr*(R+gamma*max(Q[s',:])-Q[s,a])
其中lr是学习率,gamma是折扣因子,之所以使用折扣因子是因为,环境可能是随机的,我们无法完全确保在下一次采取同样的动作还是会得到同样的回报值。折扣因子一般介于0和1之间。

第三,除了使用e-greedy算法选取动作,是否还可以使用其他技巧?

答案是可以的,比如,在每一个状态s时,当我们计算Q[s,:]的最大值时可以先随机添加一点高斯噪声到Q[s,:]上再求最大值,这样也可以起到了exploration的作用,这种方法的好处就是我们在鼓励exploration的同时也照顾了Q值,而不是纯粹的随机选取。我想,在训练的不同阶段,我们可以组合这两种技巧,比如在训练开始的时候,采取e-greedy算法,而一定周期以后,就采取添加噪声的算法。

由于本次讲的Q-Learning算法较为基础,因此代码演示就由下次一起讲解。Q-Learning算法是一种离策略算法(off-policy),即其Q函数更新不同于选取动作时遵循的策略,换句话说,Q函数更新时计算了下一个状态的最大价值,但是取那个最大值的时候的行动与当前策略是无关的。下次将讲解sarsa算法,它是一种在策略算法(on-policy),并且逐步介绍如何使用深度神经网络来替代数组Q[s,a]进行学习,平台采用OpenAI的gym。


题图:The First Google Team in 1999


你可能会感兴趣的文章有:

漫谈DQN之基础概念

漫谈DQN之GridWorld代码实现

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了小程序应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值