【2017CS231n】第十四讲:深度增强学习

一.概述


    强化学习:我们有一个代理,能够在其环境中采取行动,也可以因为其行动获得奖励,它的目标是学会如何行动以最大限度地获得奖励。

 

    这节主要讲了以下几个问题:什么是强化学习,马尔科夫决策过程(这是对强化学习问题的数学抽象),然后是两类主要的强化学习算法:Q-learning,策略梯度算法。

二.强化学习

    在强化学习中我们有一个代理和一个环境,环境赋予代理一个状态,反过来代理将采取行动,然后环境反馈一个奖励;不断重复这个过程,直到环境给出一个终端状态结束这个环节。

1.1强化学习的例子

    下面举几个强化学习的例子:

1.车载立柱问题


    这个问题的目标:杆子在可移动的车上保持平衡。

    现在的状态是对当前系统的描述:杆子的角度,角速度,位置,车的水平速度;可以采取的行动是施加在车上的横向力。通过来回移动小车来保持杆子的平衡,只要杆子没有完全倒下,每一步都能从环境中得到奖励,要做的就是尽可能保持杆子的平衡。

2.机器人运动


    类似于蚂蚁机器人的模型,我们的目标是让机器人向前移动。

    我们对系统状态的描述就是机器人的所有关节的角度和位置,可以采取的行动就是施加在这些关节上的力矩,使机器人向前移动来得到奖励,对左边的人形机器人来说,每一次站立都给予一次奖励。

3.游戏


    游戏也是处理强化学习的一大类问题。

    Atari游戏,目标是得到最高的分数;状态是游戏状态的原始像素,行动就是游戏的控制,例如左右上下移动,分数是每一次行动增加或减少的分数;目标就是在游戏中最大化得分。

四.围棋


    阿尔法GO,深度强化学习取得的巨大成就。
    目标就是赢得比赛,动作就是下一步的棋要下在哪,如果赢得比赛奖励就是1,否则就是0,


三.马尔科夫决策


    如何用数学语言来描述强化学习。
    一个马尔科夫决策过程(Markov Decision Process,以下简称MDP)就是强化学习问题的数学表达,马尔科夫决策过程满足Markov性,即当前状态完全刻画了全局状态。

    MDP由一组对象定义,这个对象元组中有S,也就是所有肯能状态的集合,A是所有行动的集合,R是奖励的分布函数。给定一个状态,一组行动,它就是一个从状态行为到奖励的函数映射。P表示下一个状态的转移概率分布,是给定一个状态行为组将采取的行动。γ是折扣因子,它对近期奖励以及远期奖励分配权重。


    马尔科夫决策过程的工作方式:
    令我们的初始时间步骤t等于0,然后环境从初始状态分布P(s)中采样,并将一些初始状态设为0,然后从t==0到完成遍历整个循环,代理将选择一个动作at,环境将从这里获得奖励,也就是在给定状态及刚刚采取的行动的条件下所获得的奖励。这也是抽样下一个状态,在时间t+1给定的概率分布,然后代理将收到奖励,然后进入下一个状态。继续整个过程。

    基于以上,我们可以定义一个策略π,它是一个从状态到行为的函数,它指定了在每个状态下要采取的行动,这可以是确定的也可以是随机的,现在的目标是找到最佳决策π*,最大限度提高你的配权之后的全部奖励之和。

例子:


    这里有一个网格,里面有网格任务的状态,根据状态采取行动,这些行动都很简单,向上下左右,每次行动都会得到一个负奖励,也就是R等于-1,目标是用最少的行动到达灰色网格中。


    这里有一个随机策略,随机策略包含在每一个单元格中,要做的只是随机抽样将要移动的方向,所有方向都有相同的概率。我们希望拥有最优的策略,采用最少的步骤到达目标单元格。那么如何确定这个最优的步骤,下面来说。


四.Q-learning


    通过给出的MDP描述,我们的目的是找出最佳策略π*,最大化策略能够最大化奖励总和。最佳策略在任意给定的状态下,我们应该采取怎样的行动来最大化我们得到的奖励。

    问题是如何处理MDP中的随机性,初始状态的抽样,转移概率分布都是随机的。转移概率分布会给出下一个状态的分布。我们要做的是最大化预期的奖励总和,写出最优的π*作为未来奖励决策的预期总和π的最大化,我们有初始状态,它采样于状态分布, 我们还有行动,行动是根据我们的决策和给定的状态采样的,然后我们从转移概率分布中抽取下一个状态。

4.1Value函数和Q-Value函数


    当我们遵循某一个策略时,每次迭代都要采样一组行为轨迹,并且我们把初始状态设为0,a0,r0,s1,a1,r1...这样我们会得到状态、行动和奖励的轨迹。
    目前我们所处的状态有多好,任何状态下的价值函数都是从状态s的决策到现在的决策之后的预期累计回馈,也就是从当前状态开始期望累计奖励的期望值。

    一个组的状态,行动有多好,在状态s时采取行动a有多好,我们用一个Q值函数来定义这个问题,遵循决策的期望累计奖励。这个函数表示在状态s下采取行动a。


    可以得到最优Q值函数就是Q*,这是我们从给定的状态动作组下得到的最大期望累积奖励,它的定义如图第一个式子。
    Bellman等式:这个Q值函数的最优策略Q*,这个最优策略Q*要满足Bellman等式,它的定义是图中第二个式子。它表示给定任何状态动作组s和a,这一组的价值就是你将要得到的回馈r加上最终进入的任何状态的价值s`。
    我们知道了最佳决策,也知道要在s`状态下执行我们能做的最好的行动,那么在状态s`上的值就会成为我们行动上的最大值。Q*在s`状态下的a`。然后我们可以得到最佳Q值的表达式。
    我们的最优策略是在任何状态下按照具体的Q*采取最好的行动,Q*告诉我们采取某一行动会带来最多的奖励。


    如何求解这个最佳策略,值迭代算法,我们通过Bellman方程作为迭代更新,在每一步中我们试图强化Bellman方程来改进我们对Q*的近似。在i趋近于无穷的条件下Qi将趋近于Q*。
    但这个解决方法不可扩展,我们必须计算每个状态动作组的s值,以便进行迭代更新。这就存在一个问题,例如前面提到的游戏,状态是像素,这是一个巨大的状态空间,去计算整个状态空间是不可行的。我们可以使用函数逼近器(例如神经网络)去估计Q的s,a。

4.2 Q-learning


    如上所述,计算整个状态空间不可行,我们可以使用函数逼近器(例如神经网络)去估计Q的s,a。
我们用函数逼近器来估计我们的动作值函数,这个函数逼近器是深度神经网络,被称为深度Q学习,这是深度强化学习常用的方法。
    我们有函数的参数θ,Q值函数由我们神经网络的这些权重θ决定。


    给出函数近似,如何求解最优策略。找一个满足Bellman方程的Q函数,我们想强制使这个Bellman方程成立,我们用神经网络逼近Q函数时,可以尝试训练这个损失函数并最小化Bellman方程的误差或s,a离目标的距离。

    用这些损失函数的前向传播来最小化这个误差,然后反向传播更新梯度。我们的目标是产生使Q函数更接近我们目标值的效果。

4.2.1 例子



    用于解决游戏问题的Q函数网络:带有权重θ的Q网络,输入状态s是现在游戏画面的像素(历史记录的4幅图像),做灰度转换、下采样及剪切。网络中有卷积层,全连接层。最后一个全连接层有一个输出向量,对应于给定输入状态时每个动作的Q值,对应于当前s的Q及a1 a2 a3 a4。
    优点:使用这个网络,通过一次前向传播就能根据当前状态计算出所有Q值,采用当前状态,将每个动作的Q值作为我们的输出层。

4.2.2 训练


    训练时我们使用之前的损失函数,试图执行Bellman方程,所以在前向传播中我们反复使用损失函数使Q值达到他的目标值;反向传播直接获取这个损失函数的梯度,采取梯度下降。


    下面说一下经验回放:
    从连续样本中学习的效果不好,因为游戏进行的时候状态、动作、奖励是连续采样的,我们再用这些连续样本训练,所有这些样本都是相关的,这就导致了低效的学习。所以我们现在的Q网络参数决定了我们将要遵循的决策,决策决定了下一个要用于训练的样本,这会导致不好的反馈循环。例如:如果当前最大化的行动是向左,那么这将使所有即将到来的训练样本偏向于向左的样本。解决的方法就是经验重放,这里我们要保持这个状态转换的重放记忆表,如状态、行为、奖励、下一个状态,我们在游戏中不断获得新的转换,当我们有了经验就可以不断更新这个表格。现在我们可以做的是训练Q网络,从回放记忆中取出一个小批量的转移样本,所以现在我们不是使用连续的样本,而是通过这些过度样本进行样本抽样。这样做的另一个好处是每个状态转移样本都可能对多次权重更新起作用,我们可以从表格中多次进行数据抽样,这样可以带来更高的数据效率。



    深度Q学习与经验重播完整算法:
    首先将重播记忆初始化,选择某个容量N,利用初始权重来初始化Q网络;接下来进行M次迭代,利用每次游戏开始的画面的像素初始化我们的状态;然后进入游戏开始的每一步,以一个小概率选择一个随机动作,要确保充分探索动作空间,我们要确保抽样状态空间的不同部分,否则将从当前决策的贪婪行为中进行选择,大多数情况下我们会采取贪婪行为,并将它视作下一步行动的较好的策略,也是我们通常在小概率情况下想要看到的状态;下面采取行动at,下一个奖励和下一个状态rt和st+1,然后把这个转换存储在我们正在构建的重放内存中,接着一点点训练网络,我们要执行经历回放,从重播内存中抽取一个随机小批量的过渡样本,然后执行一个梯度下降步骤。(连续玩游戏,抽取小批量,使用经历过的回放来更新我们的Q网络的权重)。

五.决策梯度

    Q-learning存在的问题,Q函数是非常复杂的,我们要学习每个状态行动组的价值。例如让机器人抓住一个东西,将会有一个非常高维度的状态,此时会拥有所有的关节、关节位置和角度,所以学习每个状态行动组的确切价值会很难做到;另外一个可能是你可能仅仅让机器人做一个简单的握手动作,所以能不能直接学习这个策略。

    我们想能不能从一系列策略中学习到最好的策略,而不是现在评估Q值的,然后用它来推断策略。


    我们定义一类参数化策略,通过权重θ进行参数化,对每个策略我们都定义了策略的价值,对于给定的θ,J就是未来奖励累计总和的期望。我们的目标是找到一个最佳策略θ*,使得J(θ)的值最大。即我们的目标是找出最佳策略参数,这个策略参数可以得到最好的期望奖励。
    应该如何实现这一想法:对策略参数进行梯度评价,给定一些已有目标,一些可以用于梯度下降,一些可以用来实行梯度上升的参数。

5.1 实现


    在数学上写出对轨迹的未来奖励的期望,我们要抽取这些经验轨迹,就像我们前面提到的游戏中s0 a0 r0 s1,使用θ的一些策略π,然后对每一个轨迹都可以计算该轨迹的奖励,这是我们从这个轨迹获得的累积奖励。然后用策略价值π减去θ就可以从后面的πθ中得到哪些轨迹的期望奖励,这些轨迹是从我们的策略中采样的。


    现在来做梯度上升,此时求期望的梯度是困难的,因为p依赖于θ。我们想要得到给定θ时p和τ的梯度,这就要求对τ进行积分,很难求解。
    技巧:我们想要的梯度p可以转化成对数的梯度,如图所示,然后把式子带入之前的梯度表达式,现在有了logp乘以所有轨迹的概率,然后对τ进行积分,就得到一个对轨迹τ的期望。上述所做的已经对期望值求了梯度,并转化为梯度的期望,现在我们可以用得到的样本轨迹来估计我们的梯度(我们采用蒙特卡洛抽样来做,这是强化学习的核心思想)。


    我们可以在不知道转移概率的条件下计算这些量吗?
    p(τ;θ):我们可以得到p和τ为一个轨迹的概率,这是所有得到的下一个状态的转移概率、给定状态、行为的乘积,以及在策略π下采取行动的概率。把所有这些乘在一起就得到了轨迹的概率。
    log(p;θ):对(p;θ)取对数,将累乘化为累加。
    log(p;θ)对参数θ进行求导:式子的第二项才有参数θ,我们可以看到这不依赖转换概率。所以我们不需要转换概率来进行梯度估计。

    然后对任意给定的轨迹τ进行采样,可以利用这个梯度估算J(θ)。式子展示的是单轨迹,也可以在多个轨迹上进行采样以得到期望值。

存在的问题:


    给定了这个梯度估计值我们就可以得出,如果我们对轨迹的奖励很高,那就提高这一轨迹中的一系列行动的概率;如果奖励低,那就视为不好的行动,降低概率。
    给定s,我们有πa,这是已经采取行动的似然值,然后缩放这一项,取得导数后得到梯度,梯度告诉我们应该对参数调节多少才能增加行动的似然值,然后我们通过从中得到的奖励来缩放该式子。
    如果轨迹是好的我们就可以说它的所有行动都是好的,但从期望的角度它实际是一个平均值,所以这里我们有一个无偏估计量。如果你有很多的样本,我们就可以得到梯度的准确估计,因为我们可以采取求导步骤这有利于改善我们的损失函数,并越来越接近我们的策略参数θ的局部最优解。但是它也具有大的方差值,这个置信分配很难,我们认为给定奖励即认为行动是好的,我们希望分配的行动能是实际上最好的行动,重要的是对时间求平均,我们需要大量样本才能有一个好的估计。我们可以做什么来减少方差提高估计量?

5.2 如何减小方差提高估计量


    给定梯度估计量,第一个想法是可以通过影响来自该状态的未来奖励来提高行动的概率;第二个想法即使用折扣因子来忽略延迟效应,折扣因子告诉我们有多关心即将获得的奖励而不是比较晚的奖励,现在评价一个行动好不好更多的关注他在即将产生的行动组,并降低晚一点发生的行为的权重。    

基线函数


    第三个想法是使用基线来减少方差。仅使用轨迹的原始值存在问题,例如奖励都是正的,那么只是不断增加所有行为的可能性,而真正重要的是奖励与你期望的相比更好还是更差。为了解决这个问题我们可以引入一个依赖于状态的基线函数,基线函数告诉我们我们的猜测是什么,我们期望从这个状态得到什么,然后用以增加或降低我们的概率的奖励或缩放因子,等于未来奖励的期望减去基线,所以它是我们预期中得到的奖励与真实奖励的相对关系。

那么如何选择基线呢?


    最简单的:获取目前为止所获得的奖励的滑动平均值。


    要选择一个好的基线,我们要做的是提高一个已知状态的行动的概率,只要这个行动好于我们应从那个状态得到的期望值。
我们对状态的期望值是什么:Q-learning和价值函数。我们对一个行动满意,在一个状态s下采取行动,如果在这个状态下采取一个指定行动的Q值的结果比价值函数(从该状态中得到的累积未来奖励)的期望值要高,意味着这个行动比其他行动要好。
    把我们的行为概率作为想要增加或缩放的因子,我们会得到一个估计量,在我们有了累积期望奖励之前我们有各种方差减少的技术和基准,我们现在插入这种衡量当前行为好坏的差异,这个差异等于我们的Q函数减去该状态下的价值函数。

六.Actor-Critic算法


    到目前为止我们谈论的增强学习算法都不知道Q和V究竟是多少,我们可以学习到Q和V。
    我们可以训练一个角色,结合决策梯度和Q-learning(Q是策略也是评价),Q方程告诉我们我们认为的一个状态有多好及一个状态中的行动有多好,角色将决定采取哪一种行动然后评价或Q函数告诉角色其行动怎样以及如何调整,对Q-learning而言也减轻了一点评价任务。我们前面提到的Q-learning问题必须有这个学习的每个状态和行动组的Q值,而现在它只需要这个策略产生的状态行动组,只需知道这对缩放因子的计算很重要。可以将之前所有的Q-learning技巧配合起来。
    优势函数:表示给定状态下一个行为有多好。Q(s,a)减去Vs,我们对状态评价的期望值通过这个优势函数得到的。优势函数是我们从这个动作中得到多少优势,动作比预期好多少


    通过这个算法,我们可以将角色-评价算法集成起来。
    首先初始化我们的策略参数θ,和评价参数π
    然后对每一次训练的迭代我们将在当前策略下采样M个轨迹,将采用我们的策略并得到这些轨迹为s0,a0,r0,s1等,计算梯度,对每一个轨迹和每一个时间步骤我们都将计算其优势函数,接着使用优势函数将它们用于我们之前讨论过的梯度估计并累加起来。然后我们将训练我们的评价参数π,方法相同,学习我们的价值函使这个优势函数最小,使他更接近我们看到的Bellman方程。在学习和优化策略函数间以及评价方程之间进行迭代,接着更新梯度。不断重复这个过程。

七.强化学习例子

循环聚焦模式


    图片分类,通过图片中一系列微景来实现,集中在图像的局部区域,观察周围来建立信息。
    状态:当前看到的微景
    动作:下一步看向图片的哪一部分(x,y坐标)
    奖励:最后的时间步如果分类正确就是1否则为0

    因为得到微景是一个不可导的操作,所以要使用强化学习,学习如何采用这些视觉动作的策略。给定微景状态,RNN对这个状态建模,使用策略参数输出下一个动作。


    输入一张图片,然后观察,观察位置就是框出来的位置,框内此时观察的值全部为0。然后将看到的传给网络。
    传入网络后,我们将结合现在的状态,观察的历史,使用一个循环网络,输出我们下一步观察位置的xy坐标。我们的输出实际上是一个行动的高斯分布,输出行动的均值和方差。
    根据行动的分布,抽取一个特定的xy坐标采样作为输入,并得到下一个图片中的观察点。利用该输入和之前的隐藏态,循环神经网络得到策略a。然后利用a得到下一个观察位置。 
    在最后一步,如果是分类问题,会设置softmax层,对每一个类产生一个概率分布,此时推断最大可能是2.

AlphaGo


    输入:棋盘上的特征(棋子位置等)
    给定状态后开始训练网络,职业棋手监督训练初始化。给定很多比赛棋局,训练一个从当前棋局状态到下一步往哪走的监督图谱。用决策图谱初始化一个决策网络。利用决策梯度训练决策网络,网络与之前随机的棋局对弈,执行强化学习。赢了奖励+1,输了奖励-1。学习一个价值网络,类似于一个评价者。
    AlphaGo将决策网络、价值网络、蒙特卡洛搜索结合起来选择下一步的走棋。


八.总结


    决策梯度:直接在策略参数上执行梯度下降或上升,该方法方差很大,所以需要大量的样本
    Q-learning:不保证该方法总是有效,有时问题会很复杂,有的问题需要计算很多维度的状态、行动值。但是它比决策梯度有更高效的采样效率。
    决策梯度总会收敛于一个局部最小值J(θ)
    Q-learning:我们用一个复杂方程近似估计Bellman方程,在广泛运用和训练方面都存在问题。



猜你喜欢

转载自blog.csdn.net/poulang5786/article/details/80900858