我是靠谱客的博主 开心豆芽,最近开发中收集的这篇文章主要介绍q learning 参数_强化学习:Deep Q-Learning个人理解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

v2-13f5ed835abf82343c6dd05a2c4de508_1440w.jpg?source=172ae18b
前言:
本文算是个人笔记,如有不足或需要讨论的,欢迎交流。
有大佬知道如何搭网络的(如多少层和每层多少个神经元等参数怎么调),求请教。

了解DQN必须从Q-learning讲起。不过先说明一点,不论是DQN还是Q learnging 都是基于值的方法,至于基于值和基于策略的区别,我打算放在下一章。(因为这不是我要讲的重点)

Q-learning不会的话可以去翻下我的前一篇,

宇宙大魔王:强化学习:Q-Learning详解​zhuanlan.zhihu.com
v2-d588cb01860b8c90a27c4594bf94c897_ipico.jpg

(说实话,本文主要也是承接前文来写的,如果有不懂的地方建议先看下前文)

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的方法。

如果对你有帮助,请点个赞,如果有问题,请提出。

照常:

v2-7982b35229fb88509a3774680fee4f49_b.jpg

最后

以上就是开心豆芽为你收集整理的q learning 参数_强化学习:Deep Q-Learning个人理解的全部内容,希望文章能够帮你解决q learning 参数_强化学习:Deep Q-Learning个人理解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部