您的位置:首页 > 其它

强化学习中的蒙特卡洛(monte-carlo)算法和时序差分算法

2017-06-12 09:52 423 查看
【未完成】

蒙特卡洛

蒙特卡洛是一类通用算法,思想是通过随机采样逼近真实,这里只介绍在强化学习中的应用。

最初的想法应该是连续运行多个周期,比如经历了两次(s, a),并且计算了对应的Gt,那么q(s,a)取之平均就可以了,但实际上,为了优化策略或者值函数,不能这样多次采样后直接计算,而是每次采样(一周期)就迭代计算并更新。

特点

周期性更新:

一整个周期结束了(到达了终点)才回进行一个更新(更新所有经历过的state的value)
所以是无偏估计,所谓无偏估计就是,随机变量的期望就是理想值,有偏估计就是随机变量的期望也不是理想值,不论怎样都有偏差。


First-Visit:

第一个周期经历了 某个状态s,第二个周期也第一次经历了这个状态s,待第二个周期结束之后,计算出了第二个周期s对应的G值

(G = 这一步的reward + 打折系数 ^ 1 * 下一步的reward + 打折系数 ^ 2 * 下下步的reward ... + 打折系数 ^ 从s开始走了多少步 * 最后一步的reward ),

然后更新(把第一个周期s的G和第二个周期的s的G取平均得到状态s的value)。

如果第二个周期在后面又一次经历了这个状态s,不用于计算

即每个周期的s的value的更新都是本次的G和前面所有周期的G值的和取平均


Every-Visit

和First-Visit的区别就是,如果第二个周期在后面又一次经历了这个状态s,同样算的G值加进去取平均,得到value。
即每个周期的s的value的更新都是本周期所有经历过的状态S的G和前面所有周期所有经历过的状态S的G的和取平均。


时序差分

特点:

可以用于非周期,就是没有terminal,学习材料是前面的经历
在周期内就更新,不需要等到整个周期结束;
学习的材料是上一个周期
所以是有偏估计


最简单的时序差分/TD(0)

在本次周期中经历了状态St,现在要根据目标(target)更新St的value
先根据本周的策略向后走一步,那么就处于状态St+1
用于学习的target  = 本周期中状态St的reward + 打折系数 * St+1的value(这里的value不一定是上个周期的结果,也可能本周期上次经历了St+1时更新过)

用于学习的误差(error) = 用于学习的target - St 的 value


向后N步的时序差分/TD(N)

现在处于本周期的St状态,那么现在根据本周期的策略向后走N步,那么就处于St+n状态,同时也或者了n步中的n个reward,然后更新St的value


lambda时序差分/TD(λ)

综合使用了TD(N) N从 0 到 无穷(到周期结束),
0  到 无穷赋予不同的权重, 越靠前越大,权重的和 = 1,


forwardview

forwardview 就是上面讲的思想,要求走完整个周期,这样就和蒙特卡洛的要求一样了。
online forward-view :
因为off-line要求走完整个周期,在实际情况中不好用,所以又提出了online-forward-view,就是对步数进行截断,不走到结束,而是从t往后走h步,把t+h当做终点带入forward-view,公式即可。


backwardview

backwardview逼近off-line的TD(λ)。
在每个周期开始,资格迹初始化为0,之后每一步增加一个value的梯度,上一步的资格迹在下一步乘上了一个打折系数。这样看,资格迹就是对value的梯度的修正,在更新公式中代替value梯度的位置。

True on-line TD(λ):
online forward-view 是理论上准确率很高的算法,但是计算量很大,可以考虑使用资格迹,公式太过复杂,不写了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: