zoukankan      html  css  js  c++  java
  • 强化学习例子

    Flappy Bird Q-learning

    Q-learning

    走出房间

    一个强化学习 Q-learning 算法的简明教程 

    强化学习概念

    http://www.cnblogs.com/yifdu25/p/8169226.html

    强化学习是一种不同于监督学习和无监督学习的在线学习技术。它把学习看作是一个“试探一评价”的过程,首先学习系统感知环境状态,采取某一个动作作用于环境,环境接受该动作后状态发生变化,同时给出一个强化信号(奖赏值)反馈给学习系统,强化学系统根据强化信号和环境的当前状态再选择下一个动作,选择的原则是使受到奖励的概率增大。强化学习的目的就是寻找一个最优策略,使得Agent在运行中所获得的累计奖赏值最大。

    image

    强化学习系统的主要组成要素

    除了Agent和环境,一个强化学习系统还有四个主要的组成要素:策略、奖赏函数、值函数以及可选的环境的模型。

    Q学习关键点

    Q--learning中,每个Q(s,a)对应一个相应的Q值,在学习过程中根据Q值,选择动作。Q值的定义是如果执行当前相关的动作并且按照某一个策略执行下去,将得到的回报的总和。最优Q值可表示为Q+,其定义是执行相关的动作并按照最优策略执行下去,将得到的回报的总和,其定义如下:

    image

    其中:s表示状态集,A表示动作集,T(s,a,s’)表示在状态s下执行动作a,转换到状态s’的概率,r(s,a)表示在状态s下执行动作a将得到的回报,表示折扣因子,决定时间的远近对回报的影响程度。

     下面给出Q—learning算法的描述:

    preview

    每次更新我们都用到了 Q 现实和 Q 估计, 而且 Q-learning 的迷人之处就是 在 Q(s1, a2) 现实 中, 也包含了一个 Q(s2) 的最大估计值, 将对下一步的衰减的最大估计和当前所得到的奖励当成这一步的现实, 很奇妙吧.

    最后我们来说说这套算法中一些参数的意义.

    ε greedy 是用在决策上的一种策略, 比如 ε= 0.9 时, 就说明有90% 的情况我会按照 Q 表的最优值选择行为, 10% 的时间使用随机选行为.

    α是学习率, 来决定这次的误差有多少是要被学习的, α是一个小于1 的数.

    γ是对未来 reward 的衰减值.

    其中有两个值得注意的地方

    1.“根据当前Q和位置S,使用一种策略,得到动作A,这个策略可以是ε-greedy等。”

    这里便是题主所疑惑的问题,如何在探索与经验之间平衡?假如我们的小鸟在训练过程中,每次都采取当前状态效用值最大的动作,那会不会有更好的选择一直没有被探索到?小鸟一直会被桎梏在以往的经验之中。而假若小鸟在这里每次随机选取一个动作,会不会因为探索了太多无用的状态而导致收敛缓慢?

    于是就有人提出了ε-greedy方法,即每个状态有ε的概率进行探索(即随机选取飞或不飞),而剩下的1-ε的概率则进行开发(选取当前状态下效用值较大的那个动作)。ε一般取值较小,0.01即可。当然除了ε-greedy方法还有一些效果更好的方法,不过可能复杂很多。

    以此也可以看出,Q-learning并非每次迭代都沿当前Q值最高的路径前进。

    2. Q(S,A) leftarrow (1-alpha)*Q(S,A) + alpha*[R + gamma*max_aQ(S',a)]

    这个就是Q-learning的训练公式了。其中α学习速率(learning rate),γ折扣因子(discount factor)。根据公式可以看出,学习速率α越大,保留之前训练的效果就越少。折扣因子γ越大,max_aQ(S', a)所起到的作用就越大。但max_aQ(S', a)指什么呢?

    以flappy bird为例:

    小鸟在对状态进行更新时,会考虑到眼前利益(R),和记忆中的利益max_aQ(S', a))。

    max_aQ(S', a)指的便是记忆中的利益。它是指小鸟记忆里下一个状态S'的动作中效用值的最大值。如果小鸟之前在下一个状态S'的某个动作上吃过甜头(选择了某个动作之后获得了50的奖赏),那么它就更希望提早地得知这个消息,以便下回在状态S可以通过选择正确的动作继续进入这个吃甜头的状态S'

    可以看出,γ越大,小鸟就会越重视以往经验,越小,小鸟只重视眼前利益(R)。

  • 相关阅读:
    JAVA Unsafe类
    进程通信的五种普通方法
    监控API的实现 周末补
    INLINE HOOK 简单实现
    跨域资源请求方式
    在博客园放入“可运行”javascript代码
    一些学习资源
    XXE篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题
    Mongodb注入
    SSRF篇-本着就了解安全本质的想法,尽可能的用通俗易懂的语言去解释安全漏洞问题
  • 原文地址:https://www.cnblogs.com/34fj/p/8919295.html
Copyright © 2011-2022 走看看