• 深度学习-强化学习(RL)概述笔记


    强化学习(Reinforcement Learning)简介

      强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益。其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的预期,产生能获得最大利益的习惯性行为。

      它主要包含四个元素,环境状态,行动,策略,奖励, 强化学习的目标就是获得最多的累计奖励。RL考虑的是智能体(Agent)与环境(Environment)的交互问题,其中的agent可以理解为学习的主体,它一般是咱们设计的强化学习模型或者智能体,这个智能体在开始的状态试图采取某些行动去操纵环境,它的行动从一个状态到另一个状态完成一次初始的试探,环境会给予一定的奖励,这个模型根据奖励的反馈作出下一次行动(这个行动就是当前这个模型根据反馈学来的,或者说这就是一种策略),经过不断的行动、反馈、再行动,进而学到环境状态的特征规律。一句话概括:RL的目标是找到一个最优策略,使智能体获得尽可能多的来自环境的奖励。

      例如赛车游戏,游戏场景是环境,赛车是智能体,赛车的位置是状态,对赛车的操作是动作,怎样操作赛车是策略,比赛得分是奖励。在论文中中常用观察(Observation)而不是环境,因为智能体不一定能得到环境的全部信息,只能得到自身周围的信息。https://www.jianshu.com/p/6436b99dcaef
    *************************************************************
    转自https://www.jianshu.com/p/6436b99dcaef

     在每个时间步(timestep),智能体在当前状态根据观察来确定下一步的动作,因此状态和动作之间存在映射关系,这种关系就是策略,用pi表示:
            pi:S
ightarrow A
    记作a=π(s),a表示系统可以做出动作action的集合,s:系统所处状态state的集合。

      学习开始时往往采用随机策略进行实验得到一系列的状态、动作和奖励样本,算法根据样本改进策略,最大化奖励。由于奖励越来越大的特性,这种算法被称作增强学习。

    Markov decision processes 

    马尔可夫性:系统的下一个状态仅与当前状态有关,而与历史状态无关。

          此处的状态是指完全可观察的全部的环境状态

    回报(Return)

      为最大化长期累积奖赏,定义当前时刻后的累积奖赏为回报(Return),考虑折扣因子(避免时间过长时,总回报无穷大):
    R_{t}=r_{t+1}+gamma r_{t+2}+gamma^{2} r_{t+3}+ldots=sum_{k=0}^{infty} gamma^{k} r_{t+k+1}

    值函数(Value Function)

    强化学习的目标是学习到一个策略来最大化期望,即希望智能体执行一系列的动作来获得尽可能多的平均回报。为评估一个策略的期望回报,需要定义值函数.

    状态值函数:在状态s下获得的期望回报。

    V^{pi}(s)=E_{pi}left[R_{t} | s_{t}=s
ight]=E_{pi}left[sum_{k=0}^{infty} gamma^{k} r_{t+k+1} | s_{t}=s
ight]

    状态-动作值函数:在状态s下执行动作a后获得的期望回报。

    Q^{pi}(s, a)=E_{pi}left[R_{t} | s_{t}=s, a_{t}=a
ight]=E_{pi}left[sum_{k=0}^{infty} gamma^{k} r_{t+k+1}| s_{t}=s,a_{t}=a
ight]

    根据马尔可夫特性,二者有如下关系:

    Q^{pi}(s, a)=mathbb{E}left[ r_{t+1}+gamma V^{pi}left(s_{t+1}
ight)
ight]

    V^{pi}(s)=mathbb{E}_{a sim pi(a | s)}left[Q^{pi}(s, a)
ight]
    即状态值函数V^{pi}(s)是动作-状态值函数Q^{pi}(s, a)关于动作a的期望。

    贝尔曼方程(Bellman equation)

    egin{aligned} V^{pi}(s_{t})&=Eleft[R_{t} | s_{t}=s
ight]=Eleft[r_{t+1}+gamma r_{t+2}+ldots | s_{t}=s
ight] \&=E[ r_{t+1}+gammaleft(r_{t+2}+gamma r_{t+3}+ldots
ight) | s_{t}=s ] \&=Eleft[r_{t+1}+gamma R_{t+1} | s_{t}=s
ight] \&=Eleft[r_{t+1}+gamma V^{pi}left(s_{t+1}
ight) | s_{t}=s
ight] end{aligned}

    其意义在于当前状态的值函数可以通过下一状态的值函数来计算。同理,状态-动作值函数也有类似关系。
    Q^{pi}(s_{t}, a_{t})=E_{pi}left[r_{t+1}+gamma Q^{pi}left(s_{t+1},a_{t+1}
ight)| s_{t}=s, a_{t}=a
ight]

    计算状态值函数的目的是为了构建学习算法从数据中得到最优策略,每个策略对应着一个状态值函数,最优策略对应着最优状态值函数。

    基于值函数的学习方法

      求解最优策略等价于求解最优的值函数,这是求解最优策略的一种方法,称为基于值函数的学习方法,DQN采用该算法。
    Q^*(s,a) = E_{s^prime}[r+lambda max _{a^prime}Q^*(s^prime,a^prime)|s,a]
    最优的Q值必然为最大值,故等式右侧的Q值必然为使a^′取最大的Q值。

    由于值函数是对策略的评估,为不断优化直至选出最优策略,一种可行的方式是依据值函数选取策略更新的方式。常见的策略有两种:

    • 贪婪策略
      pi^{*}(a | s)=left{egin{array}{ll}{1} & {	ext { if } a=underset{a}{arg max } Q^{pi}(s, a)} \ {0} & {	ext { otherwise }}end{array}
ight.
      贪婪策略是一个确定性策略,即始终选取使值函数最大的策略。这是智能体对已知知识的利用(exploitation),不好更新出更好的Q值,但可以得到更好的测试效果用于判断算法是否有效。

    • ε-greedy策略:

      选取不使值函数最大的动作表示智能体对未知知识的探索(exploration),探索未知的动作会产生的未知的效果,有利于更新Q值,有可能获得更好的策略,故ε-greedy策略平衡了探索和利用。

    分类

    马尔科夫链过程

    • 基于模型的(Model-based):动态规划
    • 无模型的(Model-free):强化学习
      • 基于值函数的(Value-based)
      • 基于策略梯度的(Policy-gradient)
      • 基于模型的(Model-based)
    无模型强化学习方法

      基于模型的强化学习方法(动态规划)的前提是知道环境的状态转移概率,但在实际问题中,状态转移的信息往往无法获知,由此需要数据驱动的无模型(model-free)的方法。

    蒙特卡罗(Monte Carlo)方法

      在无模型时,一种自然的想法是通过随机采样的经验平均来估计期望值,此即蒙特卡罗法。其过程可以总结如下:

    • 智能体与环境交互后得到交互序列
    • 通过序列计算出各个时刻的奖赏值
    • 将奖赏值累积到值函数中进行更新
    • 根据更新的值函数来更新策略

      在动态规划中,为保证算法的收敛性,算法会逐个扫描状态空间中的状态,计算值函数时用到了当前状态的所有后继状态的值函数。而蒙特卡罗利用经验平均估计状态的值函数,此处的经验是指一次试验,而一次试验要等到终止状态出现才结束,因此学习速度慢,效率不高。下图较直观展示了二者的不同。

    动态规划:

    蒙特卡罗方法:

      在蒙特卡罗中,如果采用确定性策略,每次试验的轨迹都是一样的,因此无法进一步改进策略。为了使更多状态-动作对参与到交互过程中,即平衡探索和利用,常用ε-greedy策略来产生动作 ,以保证每个状态-动作对都有机会作为初始状态,在评估状态-动作值函数时,需要对每次试验中所有状态-动作对进行估计。

    时序差分方法(Temporal Difference)

      由于蒙特卡罗需要获得完整轨迹,才能进行策略评估并更新,效率较低。时序差分法结合了动态规划和蒙特卡罗,即模拟一段轨迹(一步或者几步),然后利用贝尔曼方程进行自迭代更新,如下图所示:

    时序差分:

    对该方法的通俗理解:
      你需要从A点出发,经过B点后到C点,你有两个路段(A-B,B-C)的估计用时,在一次实验中,经过A-B路段后得到一个准确用时,根据这个准确用时和B-C路段的估计用时即可得到新的全路段估计用时(即更新)。

      上述例子体现了TD学习的主要原则:不必等到实验结束再沿着实验路径进行更新。

    区别

      蒙特卡罗使用的是值函数最原始的定义,即利用所有奖赏的累积和来估计值函数;
      动态规划和时序差分则利用一步预测方法来计算当前状态值函数,不同的是,动态规划利用模型计算后继状态,时序差分利用实验得到后继状态。

    *************************************************************

    强化学习的算法简介

    (1)通过价值选行为:

      Q learning,Sarsa,Deep Q Network

    (2)直接选行为:

      Policy Gradients

    (3)想象环境,并从中学习:

      Model based RL

    强化学习方法汇总--强化学习算法分类

    分类一:

    (1)不理解环境(Model-Free RL)

        代表方法--Q learning,Sarsa,Policy Gradients

        例如机器人在现实世界的探索只能按部就班一步一步等待现实世界的反馈,决定下一次的行动

    (2)理解环境(Model-Based RL)

        为现实世界建模,Model-Based比Model-Free多出了一个虚拟环境,它采用的方式依然是Model-Free RL中的方法Q learning,Sarsa,Policy Gradients,它的优势就是可以通过想象预判接下来要发生的所有情况,然后根据所有情况中最好的一种进行采取下一步的策略,例如AlphaGo

    分类二:

    (1)基于概率(Policy-Based RL)

        是强化学习最直接的一种,它能通过 感官分析所处的环境,直接输出下一步所采取的行动的概率,然后根据概率采取行动,所以每种行动都有可能被选中,只是可能性不同。

        代表方法--Policy Gradients...

    (2)基于价值(Value-Based RL)

        它输出所有动作的价值,然后根据最高价值来选择动作

        代表方法--Q learning,Sarsa...

        相比Policy-Based RL的方法,Value-Based RL更为坚定,毫不留情,就选价值最高的,而对Policy-Based RL来说即使概率最高也不一定被选择到。

        对于连续的动作基于价值的方法是无能为力的。对于连续的动作确定其分布就能选择特定动作,这也是基于概率方法的优点之一。

    (3) Actor-Critic--结合Policy-Based RL与Value-Based RL的优点

        Policy Gradients...----(Actor)基于概率作出动作

        Q learning,Sarsa...----(Critic)给出动作的价值

      结合 基于概率(Policy-Based RL)--Policy Gradients...与基于价值(Value-Based RL)--Q learning,Sarsa...创造出更有利的方法Actor-Critic

      (Actor)基于概率做出动作,(Critic)对于做出的动作给出动作的价值,这样在原有的基础上加速了学习过程。

     分类三:

    (1)回合更新(Monte-Carlo update)

        每回合等待游戏结束再更新

        代表方法--基础版Policy Gradients,Monte-Carlo Learning...

    (2)单步更新(Temporal-Difference update)

        每回合中的每一步都进行更新,这样就可以边玩边学习

        代表方法--Q Learning,Sarsa,升级版Policy Gradients...

     分类四:

    (1)在线学习(On-Policy)

        必须本人在场,并且一定是本人边玩边学习

        代表方法--Sarsa,Sarsa(λ)

    (2)离线学习(off-Policy)

        可以选择自己玩也可以选择看着别人玩,通过看着别人玩来学习别人的行为准则,它同样是从过往经验中学习,但是这些过往的经历没有必要自己经历,任何人的经历都能被学习,或者也不必要边玩边学习,可以白天先储存下来玩耍时的记忆,等到晚上再通过离线学习来学习白天的记忆。

        代表方法--Q Learning,Deep Q Network

  • 相关阅读:
    .Net使用分布式缓存 C# 使用Redis
    微信申请退款API~~开发
    微信支付和支付宝支付分账接口文档
    Android xUtils3.0使用手册(一)- 基础功能使用
    支付宝支付开发——当面付条码支付和扫码支付
    vue开源项目汇总
    Azure和插件发布
    SqlServer数据库优化笔记
    企业微信通过PostMan获取accesstoken与管理员信息方法
    VisualStudio插件自动加载
  • 原文地址:https://www.cnblogs.com/yang901112/p/11979656.html
Copyright © 2020-2023  润新知