本片主要介绍SARSA算法,蒙特卡洛算法,以及自举的概念。内容比较细,比较基础,大家可以认真看。有不懂的地方可以先看之前的文章。
目录
Q学习和SARSA算法都属于TD算法,Q 学习的目的是学习最优动作价值函数,SARSA 的目的是学习动作价值函数。
SARSA:
我们一般使用作为确定的策略来控制智能体的运动,但现在被用来评判策略的优略,不再用于控制智能体。动作价值函数常和策略函数结合使用,被称作 Actor-Critic(演员—评委)方法。策略函数控制智能体,因此被看做“演员”,动作价值函数评价策略函数的表现,帮助改进,因此 被看做“评委”。常用 SARSA 训练“评委”。
SARSA 使用的单步 TD 目标定义为:
其中这个q()实际上是在t时刻对做出的估计。最终鼓励q()逐渐拟合于。
SARSA算法和Q学习的对比:
二者都是既可以应用于表格形式(要求状态数有限),也可用于神经网络。对表格形式的更新也类似:更新为表格中现有的奖励值+学习率*(预测值-表格中的值)。对于神经网络用到梯度下降算法。使用梯度下降算法更新神经网络参数与SARSA算法和Q学习算法无关。
SARSA 是 State-Action-Reward-State-Action 的缩写,因此SARSA算法需要依赖于一个五元组,相较于四元组,多了一个.是根据策略函数,在下随机抽样得到的。
SARSA最终目的就是求动作价值函数,而Q 学习的目的是学习最优动作价值函数。
Q 学习是异策略,行为策略和目标策略不同。因为Q学习学到的表格Qtable是最优动作价值函数的近似,与策略函数无关,因此不论收集经验用的行为策略是什么,都不影响Q学习最终的目标策略。所以Q学习可以反复利用经验回放来进行训练。
此处还涉及到经验回放,简单介绍一下:经验回放所用到的四元组还是我们之前提到过的(,,,),将这些四元组缓存起来记录到 一个数组里,这个数组被称作经验回放数组(Replay Buffer),不论是基于表格形式的还是神经网络形式的Q学习,最终进行训练都需要用到这些四元组,这种方式就被称为经验回放。
SARSA是同策略,每一个都与一个相对应,不同的策略会导致学习到的的不同。经验回放数组里的(,,,)是已经缓存下来的,过时的行为策略收集到的,与当前策略对不上,必须要使用当前策略,因此不能使用经验回放。
多TD目标:
单TD目标表示公式中只有一个已知的现实奖励,多步 TD 目标用 m 个奖励,可以视作单步 TD 目标的推广。从t开始每往后一个时刻,奖励就多乘以一个学习率,回报也多乘以一个学习率。m个奖励,就是m个奖励求和,t时刻后的都要乘以学习率,并且t+m时刻的回报乘以学习率的m次方。
后面进行计算与优化和单TD一样。本质上是没差的,只是多TD更接近于现实,更加可靠。
蒙特卡洛:
蒙特卡洛算法并不是一种算法的名称,是对一种算法特性的概括。蒙特卡洛是一种数值算法,靠随机样本对目标做近似。蒙特卡洛一般难以得到真实结果,但是可以得到十分相近的结果。随机梯度下降也是一种蒙特卡洛算法,拿随机梯度来近似真实梯度。
简单举个例子大家应该能更清楚:
背景是:在直角坐标系中以原点为圆心,半径为1有一个圆,它同时有一个外界正方形。我们利用蒙特卡洛算法来近似求(pai)的值:
我们上面说到蒙特卡洛算法是靠随机样本对目标做近似,我们利用随机生成的点,在正方形中均匀分布,共生成n个点。我们知道圆的面积为pai*r^2,此时半径为1,圆的面积就为pai,正方形面积为4.则我们可以认为落在圆上的概率p=pai/4。而我们随机产生n个样本点,根据数学期望得到落在圆上的点的个数为m=np=n*pai/4,n是已知的产生的随机点的个数,m是经过统计的落在圆上的个数。最终经过化简pai=4m/n。由此一来,我们便可以计算出pai的近似值,并且n越大这个值越准确。
我们使用蒙特卡洛算法对网络进行训练,首先我们可以将一局游戏进行到底,观察所有奖励r1,...rn,我们可以直接计算ut,此时的ut是有实际数据的已经观测到的真实值,并以ut作为目标,鼓励价值网络向ut靠近。
蒙特卡洛的好处是无偏的:无偏估计的要求就是:估计出来的参数的数学期望等于被估计参数的真实值。ut是的无偏估计,由于ut 的无偏性,拿ut 作为目标训练价值网络,得到的价值网络也是无偏的。
蒙特卡洛的坏处是方差大:回报Ut依赖于t时刻以后的动作,状态等,不确定性很大。实际观测值ut虽然是Ut的无偏估计,但可能实际上离回报的期望(即动作价值函数)很远,拿ut 作为目标训练价值网络,收敛会很慢。
自举:
自举的意思是用一个估算去更新同类的估算。
我们以TD算法为例,回顾一下单步 TD 目标定义:
由此我们可以看出来最终是要向上面拟合的,并且后半部分q()是做出的估计,因此便是用自己做出的估计去更新自己即为自举。
自举的好处是方差小:咱们看公式可以得到单步TD目标的随机性只来自于q(,)和其他时刻的无关,然而之前介绍的回报Ut和从t时刻开始到回合结束所有时间的都有关,因此TD方差较小,用自举的方法训练网络,收敛比较快。
自举的坏处是有偏差:由于q()是对的估计,我们当然希望可以使二者相等,但是假如q()高估,会导致偏大,接着需要让q()向靠拢,进而导致产生偏差。
实践中,自举通常比蒙特卡洛收敛更快,这就是为什么训练DQN和价值网络通常用TD算法。