强化学习的基本求解方法(二)

  1. 简介

时间差分法主要基于时间序列的差分数据进行学习,其分为固定策略和非固定策略两种。固定策略时间差分法以Sarsa算法为代表;非固定策略以Q-Learning算法为代表。

  1. Sarsa算法

Sarsa(state-action-reward-state-action)算法的目的是估计动作值函数q(s,a),即估计在策略Π下对任意状态s上所有可能执行动作a的动作值函数qΠ(s,a)。其动作值函数表达式函数为:

image.png

式子中的Θ=rt+1+γq(st+1,at+1)——时间差分目标(Target);

Θ-q(st,at)——时间差分误差(Error)。

式子中的动作值函数的每一次更新都需要用到5个变量:当前状态s、当前动作a、环境反馈奖励r、下一时间步状态s’和下一时间步动作a’。这5个变量组合成(s,a,r,s’,a’),便是时间差分控制Sarsa算法的由来。其具体算法流程如下:

输入:随机状态s

输出:动作值函数q(s,a)

(1) 初始化:

(2)对于任意状态s,设置q(s,a)为任意值

(3)重复经验轨迹:

(4) 初始化状态s

(5) 根据动作值q,在状态s下执行动作a

(6) 重复经验轨迹中时间步t:

(7) 根据动作值q,在状态s下执行动作a

(8) 更新动作值函数:q(s,a)←q(s,a)+ɑ[r+γq(s’,a’)-q(s,a)]

(9) 记录新的状态和动作,s←s’,a←a’

(10) 直至终止状态s

(11)输出动作值函数q(s,a)

image.png

Sarsa算法首先随机初始化动作值函数q,随后迭代式地进行经验轨迹的采样。在采集某一条经验轨迹时,智能体首先根据贪婪策略(Greedy Policy),在状态s下选择并执行动作a;接下来在环境中进行学习,并更新动作值函数q(s,a),直至算法结束。

  1. Q-Learning算法

Q-Learning算法在动作值函数q(s,a)更新中,采用的是不同于选择动作时所遵循的策略。该算法动作值函数q(s,a)的更新如下:

image.png

与Sarsa算法相比较,区别在于Q-Learning算法更新Q值时,时间差分目标使用动作值函数最大值maxq(st+1,at),与当前选择动作所使用的策略无关,因此动作值Q往往是最优的。

其算法流程如下所示。与Sarsa类似,区别在进入重复经验轨迹的循环后,Q-Learning算法在初始化状态s后,直接进入该经验轨迹的迭代中,并根据贪婪策略在状态s’下选择动作a’。

输入:随机状态s

输出:动作值函数q(s,a)

(1)初始化:

(2)对于任意状态s,设置q(s,a)为任意值

(3)重复经验轨迹:

(4) 初始化状态s

(5) 重复经验轨迹中时间步t:

(6) 根据动作值q,在状态s下执行动作a

(7) 执行动作a,获得奖励和下一时间步的状态s’

(8) 更新动作值函数:q(s,a)←q(s,a)+a[r+γmaxq(s’,a)-q(s,a)]

(9) 记录新的状态,s←s’

(10) 直至终止时间步Ts

(11)输出动作值函数q(s,a)

image.png

  1. 总结

时间差分法与蒙特卡罗法类似,基于采样数据估计当前价值函数。不同的是时间差分法采用动态规划法中的提升算法(Boosting)计算当前价值函数,而蒙特卡罗是在每次采样结束之后才能计算当前的价值函数。

image.png

从算法来看,这就是他们两最大的不同之处了。因为Sarsa是说到做到型,所以也可以称之为on-policy,在线学习,可以学着自己在做的事情。而Q- learning是说到但并不一定做到,所以它也叫作Off-policy,离线学习。而因为有了maxQ,Q-learning也是一个特别勇敢的算法。为什么说他勇敢呢,因为Q-learning永远都会选择最近的一条通往目标的道路,不管这条路会有多危险。而Sarsa则是相当保守,他会选择规避特殊情况,达到目的是次要的,首先要保障安全性,这就是使用Sarsa方法的不同之处。

你可能感兴趣的:(神经网络自动驾驶)