zoukankan      html  css  js  c++  java
  • Reinforcement Learning学习笔记|从Q-Learning到Actor Critic

    Reinforcement Learning NOTE

    最近,Deep Reinforcement Learning的应用和发现十分广泛,如Alpha GO。

    我们将关注于学习解决增强学习的不同结构。包括Q-learning、Deep Q-Learning、Policy Gradient、Actor Critic 和 PPO。

    Introduction

    三个问题:

    • What Reinforcement Learning is, and how rewards are the central idea
    • The three approaches of Reinforcement Learning
    • What the “Deep” in Deep Reinforcement Learning means

    Answer:

    • 增强学习的观念是:agent通过与环境交互和接受对于特定动作的奖励(或者惩罚)来从环境中学习。

    • 我们的目标是最大化累计期待奖励。但是实际情况中,更早发生的奖励会更容易发生。因此我们定义奖励折扣gamma,是一个基于0-1之间的数字。

    即,随着时间的流逝,奖励会以指数形式不断打折扣(减少)

    • 学习的情景分类中,有带有起始状态的,和不带结束状态的。

    • 我们有两种学习方法:

      • 在每一个回合结束收集奖励之后计算最大的期待未来奖励:Monte Carlo Approach。

        在Monte Carlo方法中,只会在游戏的最后计算奖励,之后会开启新的游戏。

        公式1

      • 在每一步后计算奖励:TD Learning。

        TD method的目标是一个估计,实际上,要用之后一步的目标去更新之前的估计。

        公式2

    • The Exploration/Exploitation Trade-off.

      • Exploration是在寻找环境中的更多的信息
      • Exploitation是利用已知只是去最大化奖励
      • 我们的目的是最大化期望积累奖励,但是可能会进一个怪圈。
    • 学习的是三种方法

      • value-based,目标是优化值函数,值函数是用来告诉我们未来最大期待奖励的,对于某一个特定的状态。
      • policy-based,这个方法就是直接给出要选择哪个动作,而不需要值函数。有两中策略:
        • 决定性的:在特定状态,每次都会返回同样的动作
        • 随机的:根据状态对应的概率来返回动作
      • model-based:NULL
    • Deep RL Learning

      因为使用了深度神经网络,所以加了Deep。

    Diving deeper into Reinforcement Learning with Q-Learning

    Q-Learning是一个基于值的增强学习算法。内容如下:

    • What Q-Learning is
    • How to implement it with Numpy

    Q-table是如果在特定状态下,选择最优策略的情况下,未来最大的的期待奖励的值。

    为了学习Q-table,要用到Q Learning算法。

    • Q-learning:Action-Value Function(也叫作Q function)输入是state和action。这个函数会返回在特定状态执行特定动作的期待奖励。img

      在我们未探索环境之前,Q-table的值是随机的。当我们探索环境时,Q-table会通过不断运用Bellman等式更新,来给我们越来越好的估计值。

    • Q-Learning算法过程:imgimg

      1. 初始化Q-table所有的值,一般为0

      2. 3-5重复进行,知道我们到了最大回合或者人为停止

      3. 选择一个动作。但是开始的时候选择哪一个呢,大家都是零。

        这里用到了exploration/exploitation trade-off 。即epsilon greedy strategy。

        设置一个变量epsilon,初始为1,表示不使用Q-tbale的概率,因为此时Q-table不够可信。但是随着时间推移,epsilon会不断降低。

      4. 估计:

        根据第三步的选择,我们执行动作并返回新的state和reward,通过Bellman 等式更新Q(s,a):

      img

    Deep Q-learning

    我们不再使用Q-table,我们使用了神经网络来评估给定状态的各个action的Q值。

    • What is Deep Q-Learning (DQL)?
    • What are the best strategies to use with DQL?
    • How to handle the temporal limitation problem
    • Why we use experience replay
    • What are the mathematics behind DQL
    • How to implement it in Tensorflow

    对于炒鸡大的环境,如果建立Q-table肯定不现实。最好的方法是建立一个神经网络会大致给出给定状态不同动作的Q值。

    img

    • The Architecture

      img

      DQNN输入四个帧,他们通过神经网络输出每一个动作可能的Q值。我们需要选择向量中最大的值。开始的话表现差,但是一切都会好起来的

    • 预处理部分。可以来减少运算量。

    • 我们要关注时序信息,则要需要更多的信息。

    • 使用卷积神经网络。

    • 经验重现。

    • 避免忘记之前的经验。

    Policy Gradients

    在Policy-based方法中,不是学习值函数来告诉我们期待奖励,我们直接学习策略函数,可以将状态和放多对应起来。

    In this article you'll learn:

    • What is Policy Gradient, and its advantages and disadvantages
    • How to implement it in Tensorflow.

    有两种方法:决定性的随机的。

    • 决定性的策略是状态对应行为的那种,适用于确定性环境中。

    • 随机的输出转移概率,反之。

    • 大多数情况是用随机的

    • 优势?

      • 收敛性更好。
      • 在高维空间中更加高效。
      • 可以学习随机策略。我们不需要使用exploration/exploitation trade off,因为有随机的情况存在。也可以摆脱感知混淆的问题。
    • 劣势?

      • 收敛在局部最优而非全局最优(好吧)
    • π(a|s)=P[a|s],将其看做优化问题,我们必须寻找最好的参数来最大化J(θ),共计两步

      img

      • 使用J来衡量π的好坏
      • 用策略梯度上升的方法寻找最好的参数。
    • 第一步:

      • 我们使用目标函数(策略得分函数)计算策略的期待奖励。有三个差不多效果的方法,根据环境进行选择。

        1. 在一个情节环境中,如果从s1出发,总奖励是多少?

          img

        2. 在连续环境中,我们使用平均值,因为我们不能以来一个特定开始状态。

          img

        3. 第三种,我们使用每一个时间步骤的平均奖励。我们想得到每一步的最大奖励。

    • 第二步:梯度上升

      • 我们已经找到了评价标准,现在需要去最大化得分函数。需要梯度上升。

      • 为什么是梯度上升而不是下降?因为我们想最大化而非最小化。img

      • 我们想找的最合适的theta:img

      • 我们的目标是求J的梯度:img

        但是偏导一个概率很难,除非是对数形式。因此,我们使用似然比例技巧:

        img

        之后转换为期望形式:

        img

        我们只需要计算log策略函数的偏导。我们对于策略梯度:

        img

    Advantage Actor Critic Method

    Policy Gradient有着很大的问题,如果我们在一个Monte Carlo的序列情景中,等待序列结束来计算奖励。就算过程中有坏的action(reward)我们也会计算在其中。

    因此,为了有一个最优的策略我们不得不去做大量的采样。这是一个缓慢的过程,因为需要很长时间才可以去收敛。那么如果对于Monte Carlo序列,在每一个步骤都进行更新呢。

    • 我们在每一步进行更新:TD Learning。

      img

      因此,我们不需要总的reward,而是我们需要去训练一个Critic模型,这个模型可以大致相当于值函数。这个值函数代替了Policy Gradient中只在回合结束的时候计算奖励的奖励函数。

    • Actor Critic有着两个神经网络。img

      Actor:策略函数,控制agent如何行动

      img

      Critic:值函数,衡量动作的价值。

      这两个网络是并行运行的。而且,两个网络,两套参数,必须分开优化。

      img

    • 算法过程:

      1. 在每一个时间步骤,我们取现在的状态,将这个作为输入输入到Actor和Critic中。

      2. 策略部分输出一个策略,得到新状态和奖励。

      3. Critic计算在该状态执行该动作的值,而Actor用这个q值更新权重。

        img

      4. Actor在更新完参数后,产生下一个状态,Critic利用这个状态更新它的值参数。

      img

      Advantage Actor Critic

      以值为基础的方法有这高变动性的,为了解决这个问题,我们使用Advantage function而非值函数,定义如下:

      img

      这个函数会告诉我们,与一般的动作相比,该动作在该状态执行下的提升有多少,即额外奖励。如果大于0,则梯度朝向该方向前进,否则反之。

      我们可以将TD error作为Advantage function的很好的估计。

      img

    • A2C是Advantage Actor Critic,A3C是异步,Asynchronous Advantage Actor Critic。

      A3C算法中建立多个Agent,共同运行并实时更新全局网络的权重值。

      英文原文

  • 相关阅读:
    maven 常用命令
    navicat 破解
    linux命令
    Git常用命令
    关于近期工作的总结
    ES6新特性学习
    Hadoop初步学习
    串行、并行与并发的理解
    通过Spring profile方式实现多环境部署
    使用MySQL乐观锁解决超卖问题
  • 原文地址:https://www.cnblogs.com/billdingdj/p/10631363.html
Copyright © 2011-2022 走看看