概述
前言:
本文算是个人笔记,如有不足或需要讨论的,欢迎交流。
有大佬知道如何搭网络的(如多少层和每层多少个神经元等参数怎么调),求请教。
了解DQN必须从Q-learning讲起。不过先说明一点,不论是DQN还是Q learnging 都是基于值的方法,至于基于值和基于策略的区别,我打算放在下一章。(因为这不是我要讲的重点)
Q-learning不会的话可以去翻下我的前一篇,
宇宙大魔王:强化学习:Q-Learning详解zhuanlan.zhihu.com(说实话,本文主要也是承接前文来写的,如果有不懂的地方建议先看下前文)
DQN与Q learning最大的区别在于Q表,在Q learning中这是一个表,输入(s,a)即可查询对应的Q值,在DQN中,这是一个由神经网络替代的函数,输入(s,a)即可输出对应Q值。
使用DQN的原因:在动作a的种类少的时候,可以使用一张表表示。每次选择a都是通过比较Q值,选Q值最大的a。但当a变多的时候,这种比较就变得相当耗时。比如Q learning可以接受 A(向左,向右),但很难接受 A(向左多少米,向右多少米)这种连续动作。
如何获得/定义Q函数呢,和Q learning一样,两种基本方法--蒙特卡洛(MC)和时间差分法(TD)。
如何去更新Q函数呢?用梯度上升/下降的方法。
先说下如何去更新网络。
Q函数定义为Q(s,a|θ),参数为状态s、动作a,以及定义网络的各种未知数θ,输出为此状态的Q值。
我们当前状态s,进行动作a,对应Q值为Q(s,a),我们在经过MC或者TD方法获得的新的奖励所更新的Q值设为Q'。ps:当然是求偏导
很明显,这里的就相当于监督学习中的loss,为什么要这么定义呢?我打算放到文章末尾。
蒙特卡洛(MC):
- 0:初始化Q函数(神经网络)
- 1:随机选取一个状态S开始游戏
- 2:直到游戏终或者行动步数到达最大时,获得一个(s,a)序列,以及每个对应的奖励。
- 3:对序列中的(s,a),利用(s,a)所能获得的奖励值R以及本身的(s,a)值,计算新的Q值,写为Q',利用Q'更新Q网络的参数θ。
- 4:重复1步骤,直到收敛(即Q值不再变化,或变化很小),但要求每个状态s都能够被选到。
时间差分法(TD)
- 1:随机选取一个状态S开始游戏
- 2:此s状态下选取a(根据贪婪 或者 ε-贪婪),并在动作a的状态下获得s',即下一状态,继续在s'使用策略获得a'。
- 3:使用(s,a)状态下的反馈奖励r以及(s',a')的未来奖励(Q值)计算(s,a)的新的Q值(Q'),利用Q'更新Q网络的参数θ。
- 4:重复1步骤,(但要求每个状态s都能够被选到。)
为什么设置为'loss':
此处要提及Q-learning的收敛的定义是什么:在一个静态任务中,Q表存在一个或多个确定的最优解。 ps:找不到原文,按照个人理解说的。
举个例子,在一个棋盘里,左上角是起点,右下角是终点,所有格子都可以走,但一次只能走一格。这些条件都不会改变,所以最优的走法之一就是沿着边向下然后向右,当然同路程的走法也还有很多,但所消耗的步数都是相同的,所以都是一样的最优解。
Q'为我们更新后的值,Q为我们目前的值,如果在更新到某次之后,Q'==Q的话,那就说明Q不会再改变,那也就意味着其达到最优解之一,即为收敛。所以更新以Q'-Q(s,a)为loss,使用梯度方法使Q逼近Q'。
目前为止,DQN所要讲的都讲完了。接下来就是police gradient,这是一种policy-base的方法。
如果对你有帮助,请点个赞,如果有问题,请提出。
照常:
最后
以上就是开心豆芽为你收集整理的q learning 参数_强化学习:Deep Q-Learning个人理解的全部内容,希望文章能够帮你解决q learning 参数_强化学习:Deep Q-Learning个人理解所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复