目录

  • 基本思想
  • 不同分类方式
  • 基本方法
    • Q-learning
      • 更新过程
      • 算法步骤
    • Sarsa
      • 更新过程
      • 算法步骤
    • Sarsa(λ)
      • 更新过程
      • 算法步骤
    • Deep Q Network(DQN)
    • Policy Gradients
    • Actor-Critic
    • Deep Deterministic Policy Gradients(DDPG)
    • Asynchronous Advantage Actor-Critic(A3C)
    • Distributed Proximal Policy Optimization(DPPO)

基本思想

强化学习又称为再励学习,是机器学习领域中一个重要的分支,其理论基础主要围绕四个元素展开,即智能体、环境状态、激励、动作。

在每一次迭代中,智能体做出动作,通过与环境进行交互得到状态,评价函数通过该状态给出奖励(或者惩罚),从而在下一次迭代中调整动作,使得能够获得的奖励最大化。

不同分类方式


这其中,不理解环境的强化学习方法较为简单经典,依靠现实环境提供奖惩。而理解环境的强化学习方法是近些年比较强大复杂的方法,比不理解环境的强化学习方法多了一个对环境进行建模的步骤,同时拥有现实和虚拟两个环境可以提供反馈,智能体(agent)可以通过在虚拟环境中进行动作-状态的预判断,来避免在现实环境中“遭殃”。

本篇文章只介绍较为经典的依靠现实环境提供奖惩的Q learning、Saras、Deep Q Network等算法。

这些方法根据选择行为的依据可分为基于概率和基于价值,以及结合两者优势的Actor-Critic。

其中,基于概率的方法为每个行为产生一个概率,意味着每个行为都有概率被选中,可以对执行连续的动作。基于价值的方法为每个行为拥有一个价值,选择最大价值的行为执行,这种方式只能针对离散的动作值建立价值表。

而Actor-Critic是一种结合两种方法优势的方法,其可以根据概率选定动作,然后根据选定的动作给出其获得的价值。

Deep Q Network通过建立神经网络的方式,可以生成动作的概率,也可以生成执行动作产生的价值,可以很好地扩展到各类基于概率、价值的方法上,提高这些方法的效能。

而强化学习在参数或者价值表的更新方式上,可分为回合更新和单步更新两种方式,各有利弊。

回合更新从游戏开始玩到游戏结束,记录所有的状态对应的奖励,回合结束后再对强化学习方法中的参数进行更新,这样更新的方向有一定的保障。

单步更新每一步都进行参数或价值表的更新,可以更有效率地学习(在回合没结束前不会毫无进步地瞎转)。并且有些任务并不属于回合问题(比如把小推车学会把一根杆子立起来的问题),这种方式更有适应性一些。

此外,强化学习还有在线和离线学习两种方式。

在线学习主要是下一状态将要执行的动作的价值,会影响当前状态的价值更新(当前状态已经确定下一状态会发生什么动作和带来的价值),如Sarsa,Sarsa(λ)等。

离线学习只关注下一状态的最优价值,不理会下一状态具体决策了哪个动作,将动作间的联系切断,故可以线下通过以往经验进行更新学习,这些经验可以是自己玩的也可以是别人玩的,如Q-learning,经典的Deep Q network等。

基本方法

Q-learning

Q-learning 是一种基于二维Q表记录动作和状态对应的价值的强化学习方法。

当有一个需要完成作业的任务时,由上图可知在 S1 状态下可以做出两个动作,当选择写作业 a1 时得到的价值为1,选择看电视 a2 时得到的价值为-2,则根据最大价值法则最有可能会选择 a1。

选择 a1 之后得到下一个状态 S2,同样在这个状态下也有两个动作,根据最大价值法同样最有可能选择 a1。

更新过程

当上一轮迭代结束获得了一个这样的Q表

则当智能体再一次走到了 S1 状态,并通过价值判断选择了动作 a1。在通过执行动作 a1 知道了下一个状态应该是 S2 之后,开始了对 Q(S1) 的更新步骤。

首先取出Q(S1, a1)的值,记为 q_eval,现在通过Q表中的S2行的数据来反推理想现实状态下的Q(S1, a1),记为 q_target
q_target=R+γ∗maxQ(S2)q\_target = R + \gamma * maxQ(S2) q_target=R+γ∗maxQ(S2)
其中,R 是指到达状态 S2 后获得的奖励,γ\gammaγ 是衰减量,表明Q值在反推前一状态的Q值时应该有适当的衰减(因为 Q(S2) 中包含着 S3 状态下获得的奖励,直观上来说 S1 对这份奖励的贡献没有 S2 大)。

强化学习的目标在于通过学习使得 q_evalq_target 趋于一致,即若下一状态奖励高或者价值高,则抬高 q_eval 的值,若下一状态较差则调低 q_eval 的值,以便在下一次迭代时搜索 Q(S1) 来决定动作时能得到更加准确的判断

学习的过程通过以下公式实现,首先计算 q_evalq_target 的差异:
TD_error=q_target−q_evalTD\_error = q\_target - q\_eval TD_error=q_target−q_eval
然后定义学习率 α\alphaα 进行差异学习:
q_eval=q_eval+α∗TD_errorq\_eval = q\_eval + \alpha * TD\_error q_eval=q_eval+α∗TD_error
以上就是对 Q(S1) 的更新过程,到达下一状态 S2 后,再通过同样的步骤选择动作,更新 Q(S2) 值。

算法步骤

  1. 初始化Q表,取出开始状态的 Q(S);
  2. 按照概率 ϵ\epsilonϵ 选择 Q(S) 中最大值对应的动作或者随机选择一个动作(避免陷入局部最优);
  3. 采取动作 a,得到下一状态 S 和环境在 S 下回报的奖励 R;
  4. 更新 Q(S,a) 的值:q_eval=Q(S,a)q_target=R+γ∗maxQ(S′)Q(S,a)←q_eval+α∗(q_target−q_eval)q\_eval = Q(S, a)\\ q\_target = R + \gamma * maxQ(S^{'})\\ Q(S, a) \leftarrow q\_eval + \alpha * (q\_target-q\_eval) q_eval=Q(S,a)q_target=R+γ∗maxQ(S′)Q(S,a)←q_eval+α∗(q_target−q_eval)
  5. S ←\leftarrow← S
  6. 重复 2 - 5 直到终止(成功找到终点或者掉进坑里);
  7. 反复迭代直到智能体能够又快又好地执行任务。

通过下一状态不断更新上一状态的价值表,使得智能体越来越有远见(因为下一状态包含下下个状态的信息),使它不仅能看到眼前的利益,也能看到长远的未来。

Sarsa

Sarsa 是 Q-learning 的姊妹篇,它俩的不同只在于 Sarsa 是一种说到一定做到的强化学习方法。

更新过程

前面说到,Q-learning 根据下一状态 S 下的最大价值 maxQ(S ) 来更新当前状态下所做动作的价值 Q(S,a) 。这里 Q(S ) 的最大价值所对应的动作,不一定是智能体位于 S 状态时决定做出的动作(因为有 1 - ϵ\epsilonϵ 的概率会随机选择一个动作)。

而 Sarsa 根据下一状态 S 下**将会执行的动作对应的价值Q(S , a)**来更新当前状态下所做动作的价值 Q(S,a) 。

使用 Sarsa 方法时,智能体非常清楚下一状态会做出什么动作和带来什么后果(有可能是不好的结果,因为并不是最大价值决定的动作)。因此当前状态所做动作的价值 Q(S,a) 在依据 Q(S,a) 进行更新时,可能会得到过分抑制

如下图,因为下一状态 S 有可能会出现 Q(S ,a2) = -4 的结果,之后不再尝试走到 S ,从而错过可能带来非常大价值的 Q(S ,a1) = 8。

算法步骤

  1. 初始化Q表,取出开始状态的 Q(S);
  2. 根据 Q(S) 按照概率 ϵ\epsilonϵ 选择一个动作;
  3. 采取动作 a,得到下一状态 S 和环境在 S 下回报的奖励 R;
  4. 根据 Q(S ) 按照概率 ϵ\epsilonϵ 选择一个动作 a
  5. 更新 Q(S,a) 的值:q_eval=Q(S,a)q_target=R+γ∗Q(S′,a′)Q(S,a)←q_eval+α∗(q_target−q_eval)q\_eval = Q(S, a)\\ q\_target = R + \gamma * Q(S^{'},a^{'})\\ Q(S, a) \leftarrow q\_eval + \alpha * (q\_target-q\_eval) q_eval=Q(S,a)q_target=R+γ∗Q(S′,a′)Q(S,a)←q_eval+α∗(q_target−q_eval)
  6. S ←\leftarrow← S ,a ←\leftarrow← a
  7. 重复 3 - 6 直到终止(成功找到终点或者掉进坑里);
  8. 反复迭代直到智能体能够又快又好地执行任务。

这种说到做到的学习方式规定了它在选择动作的时候会非常保守谨慎,在一些决策失败会带来非常大损失的场景下,这种学习方式可以尽可能减小失败的机率,保存了智能体的“生命”,但同时也意味着它会很难尝试新的机遇和挑战,收敛很慢。

反观 Q-learning 为了尽早成功,不惧怕失败,是一种贪婪的算法。智能体很容易掉坑里,也很容易发现宝藏。

Sarsa(λ)

Sarsa(λ) 是基于 Sarsa 的升级高效版,每次智能体在得到奖励 reward 之后,算法会对从出发点到当前点的所有走过的状态的价值都进行更新,指导智能体下次还能够找到该 reward。

更新过程

该算法的关键在于定义一个路径表 E,记录从每次迭代时从出发到结束的所有路径(状态-动作)。每走一步时,当前的 E(S, a) 记为1,然后走下一步时,E 中所有路径的权重衰减为
E=E∗γ∗λE = E * \gamma*\lambda E=E∗γ∗λ
下图表明当 γ=0.9\gamma=0.9γ=0.9,λ=0.9\lambda=0.9λ=0.9时,智能体每走一步 E 表的变化情况。

可以看到,离当前状态越近的路径的权重越大,之后在对 Q 表进行更新时,依照 E 表中路径的远近亲疏关系,对每一个 Q(S,a) 都进行路径加权更新。

算法步骤

  1. 初始化 Q 表,取出开始状态的 Q(S);
  2. 初始化一个全零的 E 表;
  3. 采取动作 a,得到下一状态 S 和环境在 S 下回报的奖励 R;
  4. 根据 Q(S ) 按照概率 ϵ\epsilonϵ 选择一个动作 a
  5. 计算误差项:q_eval=Q(S,a)q_target=R+γ∗Q(S′,a′)TD_error=q_target−q_evalq\_eval = Q(S, a)\\ q\_target = R + \gamma * Q(S^{'},a^{'})\\ TD\_{error} = q\_target-q\_eval q_eval=Q(S,a)q_target=R+γ∗Q(S′,a′)TD_error=q_target−q_eval
  6. E 表记录路径:E(S,:)=0andE(S,a)=1E(S, :) = 0~and~E(S, a) = 1\\ E(S,:)=0 and E(S,a)=1
  7. 整个 Q 表根据路径加权进行更新(走过的路径才有数值,没走过的为0)Q←Q+α∗TDerror∗EQ \leftarrow Q + \alpha * TD_{error} * E\\ Q←Q+α∗TDerror​∗E
  8. 对 E 表进行衰减E←E∗γ∗λE \leftarrow E *\gamma*\lambda\\ E←E∗γ∗λ
  9. S ←\leftarrow← S ,a ←\leftarrow← a
  10. 重复 3 - 9 直到终止(成功找到终点或者掉进坑里);
  11. 反复迭代直到智能体能够又快又好地执行任务。

以上步骤 6 中,在对 E 表进行更新时,先对当前状态所有动作记录进行清零再记录当前路径方向,是为了避免环形路径的情况,如下图所示

若当前路径中出现环形,也就是在这条路径中,从一个点出发有两个不同方向的动作时,显然越往后出现的动作越靠近通往终点的道路,于是只保留后一个出现的动作,以保证网络学习的高效性。

Deep Q Network(DQN)

前面介绍的 Q-learning、Sarsa 之流通过搜索 Q 表进行动作决策。可如果问题趋于复杂,Q 表变得无比大,占内存不说,每次决策和更新时都得查找一遍表格,时间消耗也很大

如果这个时候有一个拥有无限知识的“智多星”,你走到每一步都能告诉你下一步走哪里最合适就好了。于是我们构建一个“大脑”,输入当前的状态,可以直接输出对应的 Q 值,这就是 DQN。

DQN 之所以发挥了强大的作用,在于它创新性地提出了两个策略。

  • Experience Replay:创建一个记忆库,存储以往的经历,神经网络在一定间隔后随机从中抽取以往的一些经历进行学习(类似于batch)。这种方式打乱了以往经历的时间顺序,切断相关性,以获得更大的回归能力。
  • Fixed q_target:对于 Q(S) 和 Q(S),采用两个结构相同,参数不同的神经网络给出。其中 Q(S) 指当前状态下执行每个动作对应的价值,使用的是单步更新的神经网络 Eval-Net 进行预测。而 Q(S) 指下一状态下执行每个动作对应的价值,使用参数比较旧的神经网络 Next-Net 进行预测,然后每隔一定代数再用 Eval-Net 的参数更新 Next-Net 的参数。

传统的 DQN 基于 Q-learning 的框架,其求取误差的方式与 Q-learning 一致q_eval=Q(S,a)q_target=R+γ∗max(Q(S′))TD_error=q_target−q_evalq\_eval = Q(S, a)\\ q\_target = R + \gamma * max(Q(S^{'}))\\ TD\_error = q\_target - q\_evalq_eval=Q(S,a)q_target=R+γ∗max(Q(S′))TD_error=q_target−q_eval
对 TD_error 以学习率 α 进行网络参数的梯度下降学习。

DQN 用两个网络以一定的时间差计算 q_eval 和 q_target,可以切断两者的相关性,有助于网络平稳地学习到预测 Q 值的本质(因为无论是新的网络还是旧网络,参数都要足够可信)。

Policy Gradients

前面介绍的 Q-learning、Sarsa 和基于 Q-learning 的 DQN 都是基于 Q 表进行动作决策的方法,而 Policy Gradients 破天荒地提出了基于概率直接决策动作的做法,即不分析每个动作的价值,只输出每个动作发生的概率,这样意味着可以用回归的方式预测连续的动作。

Policy Gradients 中没有误差的概念,靠的是动作执行后得到的奖励大小来决定每个动作学习的比重。


这里动作的概率可以由神经网络直接输出得到,Vt 的计算方式可以自行设计,比如对偏差大的地方加强学习(立杆子初期杆子位置偏差较大),也可以对拿到奖励的关键部分加大幅度更新(小车爬坡问题,拿到棋子才有奖励,然而很难拿到棋子)。

回合中每一步 Policy Gradients 都会将奖惩记下,每次回合结束(成功或者失败),才反推计算整个过程的 Vt 对网络参数进行一次更新,是一种回合更新的算法。

Actor-Critic

演员-评论家(Actor-Critic)是一种将 Q-learning 和 Policy Gradients 相结合的算法。基于概率选择动作(于是可以选择连续动作),利用 Q-learning 的方式给出评论(reward)指点动作,Policy Gradients 将 该reward 作为当前动作的 Vt值进行单步更新

这种方式由于是单步更新的方式,动作之间具有强相关性(网络的学习向同一个方向坍塌),网络很有可能学不到东西,难以收敛。

于是出现了 Actor-Critic 和 DQN 的结合算法:Deep Deterministic Policy Gradients。

Deep Deterministic Policy Gradients(DDPG)

首先回顾一下 DQN 最大的特点为:1、记忆库随机采样;2、两个结构相同参数不同的网络用来预测Q值。

再来点明 DDPG 中 Deterministic Policy Gradients 和传统 Policy Gradients 有什么区别。这里的 Deterministic 指的是确定性的,即传统 Policy Gradients 输出每个动作的概率,再通过概率选择动作,现在Deterministic Policy Gradients 直接给出了选哪个动作(确定性,但是没看出有什么好处),跳过了生成概率这一步。

将 DQN 和 Actor-Critic 相结合,则 Policy Gradients 和 Q-learning 部分都要分为两个结构相同但参数具有时间差的网络。

其中动作和价值两个部分分出来的两个网络按部就班的输出当前状态的动作和对应的价值,以及下一状态下将要输出的动作和对应的价值。

网络参数更新方式和 Actor-Critic 一样,利用价值估计网络输出的 Q 值作为 Vt更新动作估计网络, 并利用 TD_error 的公式更新价值估计网络。另外两个现实网络和 DQN 一样采取定时更新的方式更新参数。

这样一来,又通过 DQN 记忆库采样的方式,提高了 Actor-Critic 的稳定性和收敛性。

Asynchronous Advantage Actor-Critic(A3C)

这个算法在 莫烦Python-强化学习 中用一个平行宇宙的概念来形容,是一种利用并行化来加快强化学习训练的方法。

将一个智能体分为多个子智能体,在并行的环境下获取梯度,主智能体将各子体收集上来的梯度综合起来,进行自身的梯度更新。

这种方式不仅能加速智能体学习的速度,还因为各子智能体自由地“玩耍",而降低了它们收集上来的梯度的相关性,可以更加客观全面地训练网络。

Distributed Proximal Policy Optimization(DPPO)

这种算法是 OpenAI 的默认算法,能力已经十分强大。主要解决了Policy Gradients 中 Vt不好确定的问题,太大算法不收敛,太小学得太慢。

这里涉及到需要一个旧的动作估计网络 πold(at∣St)\pi_{old} (a_t|S_t)πold​(at​∣St​)(不经常更新参数)和一个实时的动作估计网络 πθ(at∣St)\pi_\theta (a_t|S_t)πθ​(at​∣St​)(经常更新参数)
LPPO=Et{πθ(at∣St)πold(at∣St)Vt−βKL[πold(.∣St),πθ(.∣St)]}.L_{PPO} =E_t\{\frac{\pi_\theta (a_t|S_t)}{\pi_{old} (a_t|S_t)}V_t-\beta KL[\pi_{old} (.|S_t), \pi_\theta (.|S_t)]\}. LPPO​=Et​{πold​(at​∣St​)πθ​(at​∣St​)​Vt​−βKL[πold​(.∣St​),πθ​(.∣St​)]}.
这里通过 πold(at∣St)\pi_{old} (a_t|S_t)πold​(at​∣St​) 和 πθ(at∣St)\pi_\theta (a_t|S_t)πθ​(at​∣St​) 的 KL 散度,来控制πθ(at∣St)\pi_\theta (a_t|S_t)πθ​(at​∣St​) 不要飘上天。

OpenAI 又给出下面这个式子,思路一致,但是效果更好。
LCLIP=Et{min[πθ(at∣St)πold(at∣St)Vt,clip(πθ(at∣St)πold(at∣St),1−ϵ,1+ϵ)Vt]}L_{CLIP} =E_t\{min[\frac{\pi_\theta (a_t|S_t)}{\pi_{old} (a_t|S_t)}V_t, clip(\frac{\pi_\theta (a_t|S_t)}{\pi_{old} (a_t|S_t)}, 1-\epsilon, 1+\epsilon)V_t]\} LCLIP​=Et​{min[πold​(at​∣St​)πθ​(at​∣St​)​Vt​,clip(πold​(at​∣St​)πθ​(at​∣St​)​,1−ϵ,1+ϵ)Vt​]}
这道公式相当于将 πθ(at∣St)πold(at∣St)\frac{\pi_\theta (a_t|S_t)}{\pi_{old} (a_t|S_t)}πold​(at​∣St​)πθ​(at​∣St​)​ 截断在一个区间内,控制这个比值不要太大,从而控制了学习率。

强化学习基础入门级介绍相关推荐

  1. 回溯法采用的搜索策略_强化学习基础篇(三十四)基于模拟的搜索算法

    强化学习基础篇(三十四)基于模拟的搜索算法 上一篇Dyna算法是基于真实经验数据和模拟经验数据来解决马尔科夫决策过程的问题.本篇将结合前向搜索和采样法,构建更加高效的搜索规划算法,即基于模拟的搜索算法 ...

  2. 深度强化学习主流算法介绍(二):DPG系列

    之前的文章可以看这里 深度强化学习主流算法介绍(一):DQN系列 相关论文在这里 开始介绍DPG之前,先回顾下DQN系列 DQN直接训练一个Q Network 去估计每个离散动作的Q值,使用时选择Q值 ...

  3. 强化学习基础知识梳理(4)

    顺序以周博磊老师强化学习纲要课程为主,增加王树森老师强化学习基础的知识补充,和蘑菇书的知识补充,作为学习记录 第四章:价值函数近似 主要内容包括: 价值函数近似基本原理介绍(Value Functio ...

  4. 强化学习基础篇(五):Dyna-Q 算法

    强化学习基础篇(五):Dyna-Q 算法 (Dynamic Programming) 1. 简介 2. Dyna-Q 3. Dyna-Q 代码实践 4. 小结 文章转于 伯禹学习平台-动手学强化学习 ...

  5. 股票操作之强化学习基础(二)(Q-learning、Sarsa、Sarsa-lambda)

    股票操作之强化学习基础(二)(Q-learning.Sarsa.Sarsa-lambda) 1. Q-learning Q-learning是强化学习一个比较基础的算法,很多强化学习的升级算法都是在q ...

  6. 强化学习基础总结(三)

    强化学习基础总结(三) @(Machine Learning) 覆盖以下几个主题: Markov过程 Markov奖励过程 Markov决策过程 MDPs扩展 MDP简介 MDP是用于正式描述强化学习 ...

  7. Task 01 强化学习基础

    文章目录 1. 理论部分 1.1 初探强化学习 1.2 强化学习基础 1.3 强化学习简史 1.4 强化学习应用 2. 实验部分 2.1 Gym 2.2 小车上山 (MountainCar-v0) 1 ...

  8. 深度强化学习基础知识 思维导图

    学习了王树森老师的深度强化学习入门课件,将各个算法整理在如下思维导图中. 深度强化学习基础知识 思维导图

  9. 强化学习——基础概念

    强化学习--基础概念 一.强化学习问题的提出 奖励 Reward 环境 Environment 状态 State 二.智能体 Agent 策略 Policy 价值函数 Value function 模 ...

  10. 强化学习基础知识梳理(5)

    顺序以周博磊老师强化学习纲要课程为主,增加王树森老师强化学习基础的知识补充,和蘑菇书的知识补充,作为学习记录 第五章:策略优化基础 主要内容: 基于策略优化的强化学习 常见策略优化算法:Policy ...

最新文章

  1. PowerDesigner 使用的一些技巧(转)
  2. 多重继承_Java语言编程第25讲——Java中多重继承,也会导致模棱两可的歧义
  3. 2020年信息系统项目管理师真题讲解
  4. Android 7.0 Nougat介绍
  5. linux基础文件管理软硬链接
  6. java中domain什么意思_java解析URL中domain、端口和协议的两种方法
  7. cesium获取模型实时坐标_Cesium 顶点着色器中解算模型坐标
  8. 使用PagedDataSource给Repeater、DataList增加分页
  9. ios8 gps定位不好用
  10. 男女之间的暗号,看看吧,说不定你喜欢的人正暗恋着你。
  11. java编程题代做,代做COMP 2406作业、代写Java语言作业、代做programming作业、代写Java程序实验作业...
  12. OEM AND ODM
  13. Failed to start component [Connector[HTTP/1.1-20001]]报错
  14. AI提取图片里包含的文字信息-解决文字无法复制的痛点
  15. 1.python性能优化
  16. Java微信扫码支付
  17. 美光投20亿美元扩产内存产能 还将研发13nm DRAM
  18. Python基础-08
  19. 保护网络空间安全,DHS依然面临挑战
  20. 岭深常得蛟龙在 梧高自有凤凰栖

热门文章

  1. Github 汉化插件教程
  2. Android Studio一键汉化,分享一个自己写的小工具
  3. 推荐系统中的前沿技术研究与落地:深度学习、AutoML与强化学习 | AI ProCon 2019
  4. win7计算机怎么重置,win7系统的电脑如何重置 win7重置电脑的方法
  5. VBScript 基础知识
  6. python实验原理_python实验报告5
  7. 达人评测 华为watch gt2和gt选哪个好
  8. Python漫画下载器
  9. 2021-2027全球与中国成像雷达市场现状及未来发展趋势
  10. 魔兽地图编辑器插件YDWE的使用与基本设置4 物体编辑器、启动游戏测试、查找物品