基于值函数和基于策略的强化学习算法总结

基于值函数的强化学习方法
基于模型的动态规划方法:
这是基于模型的强化学习算法,也就是说都是已知的。为什么可以用动态规划来求解强化学习的最优策略,是因为动态规划问题的最优解可通过寻找子问题的最优解来得到问题的最优解。并且可以找到子问题状态之间的递推关系,通过较小的子问题状态递推出较大的子问题的状态。而强化学习的问题恰好是满足这两个条件的,下面是强化学习值函数的贝尔曼方程:
(1)
由上式可求解每个状态的状态价值函数,这个式子又是一个递推的式子,我们可以使用上一个迭代周期内的状态价值来计算更新当前迭代周期某状态的状态价值。
基于模型的动态规划算法分为两步,首先是评估当前策略,就是求出当前策略下每个状态的价值, 策略评估的基本思路是从任意一个状态价值函数开始,依据给定的策略,结合贝尔曼期望方程、状态转移概率和奖励同步迭代更新状态价值函数,直至其收敛,即,得到该策略下最终的状态价值函数。第k次的值函数计算可用下面的式子:
(2)
第二步:策略改善,通过第一步的策略评估我们得到了当前策略的各个状态的,就可以根据对当前策略进行改善。可以使用贪婪策略来对当前策略进行改善。
将策略评估和策略改善组合起来就是策略迭代算法,在策略评估中,给定策略,通过数值迭代算法不断计算每个状态的值函数,利用该值函数和贪婪策略得到新的策略,重复循环策略评估和改进,最终会得到最优策略。
策略迭代的算法可以概括为:
输入: 状态转移概率、回报函数、折扣因子、初始化的值函数和初始策略
过程:
1:输入状态转移概率、回报函数、折扣因子、初始化的值函数和初始策略
2:策略评估,利用(2)式,得到当前策略的最优值函数
3:策略改进
4:重复步骤,直到
输出:最优策略

基于蒙特卡罗的强化学习算法
这是无模型的强化学习方法,在无模型的强化学习中,状态转移概率未知,所以不能够使用贝尔曼方程对策略进行评估,可以根据值函数本身的定义来评估策略,下面的式子是值函数的定义式:
(1)
值函数的计算实际上就是计算期望,在没有模型时,可以采用蒙特卡罗方法计算期望,就是利用样本估计期望。
蒙特卡罗法通过采样若干经历完整的状态序列来估计状态的真实价值。所谓的经历完整,就是这个序列必须是达到终点的,也称试验。计算一次试验中状态s处的折扣回报值为:+···+
对于蒙特卡罗法来说,如果要求某一个状态的状态值,只需要求出所有的完整序列中该状态出现时的收获再取平均值即可近似求解,也就是:
(2)
其中表示第一次试验中,第一次出现状态时计算处折扣回报。
利用(2)式求均值比较麻烦,可以改成增量的形式:

上面的策略评估,策略改进一般使用策略,为了使算法可以收敛,一般会随着算法的迭代过程逐渐减小,并趋于0。基于蒙特卡罗的算法流程:
输入:状态集, 动作集, 即时奖励,衰减因子, 探索率
过程:
1: 初始化所有的动作价, 状态次数,采样次数,初始化一个策略,等概率选取当前状态下,能够选择的动作。
2: , 基于策略进行第 次蒙特卡罗采样,得到一次试验
3:对于试验中出现的每一状态行为对,更新,

4: 基于新计算出的动作价值,更新当前的贪婪策略
5:如果所有的值都收敛了,(判断收敛的标准就是所有的值与上一次迭代的值的误差为,),那么就得到最优策略,否则继续重复
输出:最优策略

时间差分法(和)
时间差分法和蒙特卡罗都是无模型的强化学习算法,它俩的不同在于值函数的估计,蒙特卡罗是通过采样完整的一次试验计算平均值来更新策略,而时间差分法结合了蒙特卡罗的采样和动态规划中的自举,使用了贝尔曼方程:
(1)
通过(1)式,可以在每次采样中利用当前的及时回报以及()来代替蒙特卡罗中的,即可以得到时间差分的值函数公式(2)
(2)
蒙特卡罗方法中的返回值,其期望就是值函数的定义,所以是无偏估计,但是每次得到,要等到最终状态,中间会经历很多随机状态和动作,所以的随机性大,方差大。而时间差分不用等到最终状态,它可以走一步更新一次,TD目标中是估计值,所以方法是有偏估计,每次只用了一步的随机状态和动作,所以方差小。
时间差分法中同策略的方法:同策略就是采样的策略和评估、改进的策略是同一个策略。
算法流程:
输入:迭代轮数,状态集, 动作集, 步长,衰减因子, 探索率
过程:
1:随机初始化所有的状态和动作对应的价值。
2:,进行迭代。
初始化,为当前状态序列的第一个状态。设置为贪婪法在当前状态选择的动作。
在状态执行当前动作,得到新状态和奖励
用贪婪法在状态选择新的动作
更新价值函数:

,
如果是终止状态,当前轮迭代完毕,否则转到步骤
输出:所有的状态和动作对应的价值

在步中,只是用贪婪法选取了下一个状态的下一个动作,实际上并不会执行,只是为了在中计算。
时间差分法中异策略的方法: 。异策略就是采样的策略和评估改进的策略不是同一个策略。这里说一下同策略和异策略的比较:同策略就是采样的策略和我们想要学习的策略一致,在异策略学习中,想要学习的是一个策略,而实际用于采样的又是另外一个策略。采取异策略的优点有:可以从给出的示教样本或其他智能体给出的引导样本中学习;可以重用由旧策略生成的数据;可以用一个策略进行采样,然后同时学习多个策略;可以在使用一个探索性策略的同时学习一个确定性策略。就是这样的,使用探索的策略采样数据,去学习一个确定的策略。

算法流程:
输入:迭代轮数,
, 动作集, 步长,衰减因子, 探索率
过程:
1 随机初始化所有的状态和动作对应的价值。
2 ,进行迭代。
初始化为当前状态序列的第一个状态。
用贪婪法在当前状态选择出动作
在状态执行当前动作,得到新状态和奖励
更新价值函数:

如果是终止状态,当前轮迭代完毕,否则转到步骤
输出:所有的状态和动作对应的价值

的目标函数中的动作是由贪婪策略得到的,对于,我们会使用贪婪法来选择新的动作,这部分和完全相同。但是对于价值函数的更新,使用的是贪婪法,而不是完的贪婪法。这一点就是和本质的区别。
DQN算法
前面的方法都是针对状态和动作空间都是离散的,所以可以用表格记录下来。而当状态维度很大或者连续时,不可能一一列出值,这时就要使用一个函数逼近的方法来表示值。
函数逼近可以使用非线性参数逼近比如神经网络,可以将逼近的值函数写为,其中就是神经网络的参数。
从蒙特卡罗和时间差分的值函数更新公式可以看出,值函数的更新过程就是向着目标值函数靠近的过程,函数逼近就是一个监督学习的过程,它的训练目标函数为:。前面是目标值函数(一次试验中实际计算得到的),后面是值函数逼近得到的,也就是根据值函数的神经网络计算得到的。
就是神经网络的值函数逼近和的结合,它相比于改进了以下3点:
(1)利⽤深度神经⽹络逼近值函数
(2)利⽤了经验回放训练强化学习的学习过程
(3)独⽴设置了⽬标⽹络来单独处理时间差分算法中的偏差
经验回放:将试验得到的历史数据存放在一起,然后等概率的采样集合,作为输入,训练神经网络。可以打破数据之间的关联性。
DQN的目标函数为:,其中目标,计算目标的网络和要逼近的网络如果是同一个网络容易导致数据之间有很强的关联性,训练不稳定。所以就将两个网络设置成一样的结构,但参数不同的神经网络,实际中目标网络的更新可以通过硬更新,当逼近的网络更新了次,直接将逼近的网络参数赋值给目标网络的参数。
算法流程:
输入:迭代轮数,状态特征维度, 动作集, 步长,衰减因子, 探索率, 当前网络,目标网络, 批量梯度下降的样本数,目标网络参数更新频率。
过程:
1随机初始化所有的状态和动作对应的价值。随机初始化当前网络的所有参数,初始化目标网络,的参数。清空经验回放的集合。
2 for i from 1 to T,进行迭代。
初始化为当前状态序列的第一个状态, 拿到其特征向量
在网络中使用作为输入,得到网络的所有动作对应的 值输出。用贪婪法在当前值输出中选择对应的动作
在状态执行当前动作,得到新状态对应的特征向量和奖励,是否终止状态
将这个五元组存入经验回放集合
 
从经验回放集合中采样个样本:
{} 。
计算目标值,记为:

使用均方差损失函数:

通过神经网络的梯度反向传播来更新网络的所有参数
如果,则更新目标网络参数
如果是终止状态,当前轮迭代完毕,否则转到步骤
输出:网络参数
原始的是没有单独设置目标网络的参数的。
:
上面使用了经验回放池和目标网络两个技巧,并没有克服的本身的缺点过估计。在目标函数的计算中,使用了,这个操作使得估计的值函数比实际的值函数要高,为了解决值函数的过估计问题,提出了。它改进的地方就是目标:

除了目标值的计算方式以外,算法和的算法流程完全相同。
:
改进了中的操作,经验回放仍然采⽤均匀分布。经验回放时利⽤均匀分布采样并不是高效利⽤数据的⽅法。因为,智能体的经历过的数据,对于智能体的学习并⾮具有同等重要的意义。智能体在某些状态的学习效率⽐其他状态的学习效率⾼。优先回放的基本思想就是打破均匀采样,赋予学习效率⾼的状态以更⼤的采样权重。什么是效率高的?在经验回放池里面的不同的样本由于误差的不同,对我们反向传播的作用是不一样的。误差越大,那么对我们反向传播的作用越大。而误差小的样本,由于误差小,对反向梯度的计算影响不大。
根据每个样本的误差绝对值,给定该样本的优先级正比于,将这个优先级的值存入经验回放池。第个样本的采样概率为:
,其中,
当我们采⽤优先回放的概率分布采样时,动作值函数的估计值是⼀个有偏估计。因为采样分布与动作值函数的分布是两个完全不同的分布,为了矫正这个偏差,我们需要乘以⼀个重要性采样系数,N是经验回放池大小。这个系数乘在均方误差上。
:通过优化神经网络的结构来优化算法,将网络分成两部分,第一部分是仅仅与状态有关,与具体要采用的动作无关,这部分我们叫做值函数部分,记做,第二部分同时与状态和动作有关,这部分叫做优势函数部分。最终的值函数可以表示为:

网络的输出层与之前几种的网络不同,最终网络的输出分为价值函数和优势函数。前面的输入层和隐藏层都是共用的。

基于策略的强化学习算法
策略梯度算法
将策略参数化,即由变为,一般使用非线性函数(神经网络)表示,寻找神经网络的最优参数使得目标函数最大,强化学习的最终目标就是使得累积回报的期望最大:。
在基于值函数的⽅法中,迭代计算的是值函数,再根据值函数改善策略;⽽在基于策略的⽅法中,我们直接对策略进⾏迭代计算,也就是迭代更新策略的参数值,直到累积回报的期望最⼤,此时的参数所对应的策略为最优策略。
基于策略相比于值函数的优点:直接策略搜索⽅法是对策略进⾏参数化表⽰,基于策略的方法适用于动作空间很大或者是连续的情况;基于策略的方法一般使用随机策略,直接将随机策略集成到所学的策略中。
基于策略方法的缺点:容易收敛到局部最优;评估单个策略时并不充分,方差较大。
策略梯度算法的推导:
首先用表示一次试验的轨迹:。表示轨迹的累积回报。表示轨迹出现的概率。
强化学习的目标是累积回报的期望最大,即式(1):
(1)
这时就是一个 最优化问题,就是求一组,使得最大,可以使用梯度提升。计算策略梯度,对(1)求导:

                                        (2)

最终策略梯度变成了求的期望,可以使用经验平均值估计期望。根据当前策略,采样条轨迹,计算这条轨迹的平均值:

求解,由于,所以:

其中是环境动力学,且没有参数,可以忽略,即可以写成:

                                      (3)

将(2)和(3)结合起来,得到策略梯度的计算公式:
(4)
(4)式就是最终的策略梯度,它是无偏的,方差很大,可以引入一个基线见(5)式。
(5)
来分析一下引入基线的好处,如果所有的回报都是正的,那么所有轨迹出现的概率都会增加。一个比较好的动作没有被采样到,而采样到的不好的动作得到了一个比较小的正的回报,那么没有被采样到的好动作的出现概率会越来越小,这显然是不合适的。因此需要增加一个回报的基线,让回报有正有负。比如对于一些状态来说,他们都具有比较大的动作值函数。那么我们就需要有一个大的基线来区分更大的动作值和相对小的动作值。但是对于其他一些状态,所有状态的值函数都比较小,那么我们就需要一个小的基线值。这个基线可以选择状态值函数的估计值,相当于动作状态值函数的一个平均值。
策略梯度算法流程:

输入:迭代轮数,状态特征维度, 动作维度, 步长,衰减因子,当前网络,批量梯度下降的样本数
过程:
1初始化神经网络
2 for i from 1 to T,进行迭代。
初始化为当前状态序列的第一个状态, 拿到其特征向量
在网络中使用作为输入,输出动作,基于动作得 到的状态,及时回报。直到终止状态.
更新参数:
输出:网络参数

基于值函数和策略的方法
算法
该算法从名字上看包含了两部分:和。其中就是策略函数,可以用来生成动作和环境互动,是价值评估,用来评价的表现。该算法可以看成是策略梯度和的结合,它包含了两个近似:策略函数的近似和值函数的近似,见下式:
策略函数的近似:
值函数的近似:

算法就是对蒙特卡罗策略梯度的改进,在蒙特卡罗策略梯度算法中,它的更新公式为:

算法改变的就是,原来的蒙特卡罗策略梯度算法中,是一次试验完成后计算的t步开始的累积奖励,这就会带来不便,每次只能等到试验结束才能更新,而且随机性大,方差高。算法改进了,它是使用部分得到的,即值函数的近似来计算得到的,就像一样。网络的更新公式同,网络的更新公式同策略梯度算法,它的形式可以有多种,见下:

其中,
补充一下,策略网络输出的东西是什么:动作是离散的,就可以使用输出每个动作的概率值;动作是连续的,就可以输出策略分布的参数(常见使用高斯分布,输出)。
算法流程:

输入:迭代轮数,状态特征维度, 动作集, 步长,,衰减因子, 探索,网络和网络。
过程:
1随机初始化网络参数
2 for i from 1 to T,进行迭代。
a) 初始化为当前状态序列的第一个状态, 拿到其特征向量
b) 在网络中使用作为输入,输出动作,基于动作得到新的状态,及时回报。
c) 在网络中分别使用,作为输入,得到值输出,
d) 计算误差
e) 使用均方差损失函数作网络参数的梯度更新
f)更新网络参数:
输出:网络参数,网络参数


使用优势函数代替始回报,可以作为衡量选取动作值和所有动作平均值好坏的指标。的更新公式见下:

:
是算法在框架上的改进,算法为了提升训练速度采用异步训练的思想,利用多个线程。每个线程可看成一个一个智能体,它与公共的环境互动,多个智能体同时与环境互动,并行计算策略梯度,对参数进行更新。主网络和每个线程中的子网络结构相同,均为结构,在更新时,各个线程的、与同理,每个线程得到的梯度,可以根据先后顺序复制到主网络中,主网络的参数就可以更新了;之后主网络可以把参数直接传递到各个子网络中。还在目标函数中添加了熵,用来增加探索性,之后中会专门分析。
输入:公共部分的A3C神经网络结构,对应参数,本线程的A3C神经网络结构,对应参数 全局共享的迭代轮数,全局最大迭代次数, 线程内单次迭代时间序列最大长度,状态特征维度, 动作集, 步长 衰减因子

  1. 更新时间序列

  2. 重置Actor和Critic的梯度更新量

  3. 从公共部分的A3C神经网络同步参数到本线程的神经网络:

  4. 初始化状态

  5. 基于策略选择出动作

  6. 执行动作得到奖励和新状态
    7.

  7. 如果是终止状态,或,则进入步骤9,否则回到步骤5

  8. 计算最后一个时间序列位置的:

  9. for i∈(t−1,t−2,…)i∈(t−1,t−2,…):

  1. 计算每个时刻:

  2. 累计Actor的本地梯度更新:

累计Critic的本地梯度更新:

  1. 更新全局神经网络的模型参数:

  2. 如果则算法结束,输出公共部分的A3C神经网络参数否则进入步骤3


都是使用了随机策略,其含义就是在状态为s时,动作符合参数的概率分布。比如有常用的高斯分布。采取随机策略时,相同的策略 ,即相同,每次采样的动作也不一定相同。而确定性策略就不一样了,一个状态对应唯一一个动作,即。确定性策略相比随机策略的优点就是需要采样的数据少,算法效率高。缺点就是没有随机策略可以将探索和改善集成到一个策略中。
先看一下推广到、确定性策略梯度算法,之前讲的是随机策略梯度算法PG。公式(1)和公式(2)分别是和的梯度计算公式:
(1)
(2)
从到除了经验回放以外,我们有了双网络,就和变成网络一样。现在我们本来就有和的网络,那么双网络就变成了4个网络,分别是:当前网络,目标网络,当前网络,目标网络。2个网络的结构相同,2个网络的结构相同。这四个网络各司其职:
(1)当前网络:负责策略网络参数的迭代更新。负责根据当前状态选择当前动作。用于和环境交互生成,。
(2)目标网络:负责根据经验回放池中采样的下一状态选择最优下一动作。网络参数定期从复制。
(3)当前网络:负责价值网络参数的迭代更新,负责计算当前值
(4)目标网络:负责计算目标值中的部分。网络参数定期从复制。
的梯度计算公式为式(2),同算法的。
下面是的框架图:

算法:
输入:当前网络,目标网络,当前网络,目标网络,参数分别为,衰减因子,软更新系数,批量梯度下降的样本数,目标网络参数更新频率。最大迭代次数。随机噪音函数
过程:
1随机初始化参数,清空经验回放池
2 for i from 1 to T,进行迭代:
初始化为当前状态序列的第一个状态,得到其特征向量
在当前网络基于状态得到动作,,其中是一个随机噪声,增加探索性。
执行动作,得到新状态,及时回报,是否终止状态
将这个五元组存入经验回放集合

从经验回放集合中采样个样本计算当前目标值。
使用均方差损失函数,通过神经网络的梯度反向传播来更新当前网络的所有参数。
使用,通过该式来更新当前网络的所有参数。
如果,则更新目标网络和目标网络参数:

如果是终止状态,当前轮迭代完毕,否则转到步骤
输出:最优当前网络参数,当前网络参数

(置信域优化策略优化)
策略梯度算法的硬伤在于更新的步长,当步长不合适时,更新的参数对应的策略是一个更不好的策略,利用这个更不好的策略采样学习时,再次更新的参数会更差,结果导致越学越差。合适的步长是指当策略更新后回报函数的值不会更差。那么如何找到新的策略使得新的回报函数单调不减,这就是解决的问题。
首先定义强化学习里策略回报函数:
(1)
要使得它单调不减,那么可以将它分成两部分,旧策略的回报函数加上另一部分,我们只需要控制另一部分是大于等于的值就可以了,所以可以写成:
(2)
其中是优势函数

式(2)是旧策略的回报函数,后面一项是新旧策略回报之差。我们将这部分写成概率的形式:
进一步变形为:

其中
在原式中计算时,我们需要新的策略,而新策略目前还未知,因此,我们可以利用旧策略来代替新策略,因为两者相差并不是很大。
利用重要性采样处理动作分布
设定:
与的区别是状态分布不同,是的一次近似,能改善的策略自然能改善,下面引入一个不等式:

记,那么可以得到:

有了这个等式一切都好办了,我们只需要在下一步的策略中找到一个是当前 最大的策略,则有上面的不等式,我们将很容易得到我们的策略的期望回报是单调递增的。于是,寻找策略的过程被我们完全转换成了一个不断寻找函数最大值的过程。下面具体来看一下这个最大值问题:

在原文里,为了使这个问题更加数值可解,于是将原问题等效为了:
,满足 (3)
实际应用中,我们的状态有无穷多个,也就是约束条件有无穷多个,这在实际优化过程是不可行的。这时就要用到的第三、四个技巧了:利用平均散度代替最大散度。对约束问题二次近似,非约束问题一次近似,这是凸优化的一种常见改法。最后利用共轭梯度的方法进行最终的优化。
:
近端策略优化,。这种算法用在强化学习中的表现能达到甚至超过现有算法的顶尖水平,同时还更易于实现和调试。所以 已经把作为自己强化学习研究中首选的算法。
近端策略优化(),具有信任区域策略优化()的一些优点,但它实现起来更简单,更通用,并且具有更好的样本复杂性(根据经验)。合理性的理论实际上建议使用惩罚而不是约束,即解决无约束优化问题:对两个分布的距离施加一个惩罚。把两个分布的距离惩罚直接换成了,压缩到一个范围内。即。
的第一种形式

     计算:

解释一下:上述参数和是启发式选择的,的初始值是一个超参数。
的第二种形式:

解释一下:
,当时,
表示:

概率比被限制在或 ,具体取决于优势函数是正还是负。若,说明时刻的状态下采取的动作得到的值函数要优于该状态下所有动作的平均回报值,因此要增加鼓励该动作,以使得该动作有更大的几率被采纳,既然的分母恒定,那么就意味着增大,即增加在给定状态下采取这一动作的几率,然而由于,最多会增加到
框架下的算法图:
输入:当前网络,目标网络,网络, ,衰减因子,软更新系数,批量梯度下降的样本数,目标网络参数更新频率。最大迭代次数。随机噪音函数
过程:
1 随机初始化神经网络的参数
2 for i from 1 to T,进行迭代:
将状态输入到网络,得到策略的分布参数,采样一个动作再输入到环境中得到奖励和下一步的状态,然后存储, 再将输入到网络,循环步骤,直到存储了一定量的数据, 注意这个过程中网络没有更新。
将循环完最后一步得到的输入到网络中,得到状态的值,然后计算折扣奖励,得到,其中为最后一个时间步。
将存储的所有组合输入到网络中,得到所有状态的值, 计算
求, 然后反向传播更新网络。
将存储的所有组合输入和网络(网络结构一样), 分别得到正态分布和, 将存储的所有动作组合为输入到正态分布和, 得到每个对应的和,然后用除以得到。
计算),然后反向传播,更新网络。
循环步骤,一定步后,循环结束,用网络权重来更新网络。
输出:网络参数

参考文献
[1]深入浅出强化学习,郭宪
[2]博客园 刘建平
[3知乎 rootxuan

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值