5.1 基于时间差分强化学习算法理论讲解
与动态规划和蒙特卡罗方法相比,时间差分方法的主要不同在于值函数的估计。在动态规划中,值函数的计算使用了bootstrapping方法,即用后继状态的值函数估计当前值函数的。由模型公式和动作集,科技一算状态s的所有的后继状态s′(公式1)。当没有模型时,无法通过动态规划得到后继状态。由于值函数的本质是期望,通过经验平均代替期望来估计值函数便应运而生(公式2)。相比于动态规划,蒙特卡洛方法需要等到每次实验结束,导致学习速度非常慢,学习效率不高。
V(St)←Eπ[Rt+1+γV(St+1)]=a∑π(a∣St)s′,t∑p(s′,r∣St,a)[r+γV(s′)] V(St)←V(St)+α(Gt−V(St)) 结合两者的优点,时间差分方法(TD)结合了蒙特卡罗的采样方法和动态规划的bootstrapping,其值函数的更新公式为:
V(St)←V(St)+α(Rt+1+γV(St+1)−V(St)) 其中Rt+1+γV(St+1)称为TD目标,与蒙特卡洛方法的Gt对应,不同之处在于TD目标使用了bootstrapping方法估计值函数。δt=Rt+1+γV(St+1)−V(St)称为TD偏差。
蒙特卡罗方法中的Gt=Rt+1+γRt+2+...+γT−1Rt,由于每次都模拟到结尾,所以蒙特卡洛方法是无偏估计。但模拟的随机性很大,因此导致蒙特卡罗方法的方差很大。时间差分方法中用到的V(St+1)使用的是估计值,因为时间差分方法是有偏的。但是时间差分方法只用到了一次模拟,所以随机性很小,相应的方差也要比蒙特卡罗方法的方差小。
时间差分方法包括同策略的Sarsa强化学习方法和Qlearning方法,与蒙特卡罗方法不同之处是他们的值函数更新方法不同。
同策略Sarsa强化学习方法
[1] 初始化Q(s,a), all s∈S, a∈A, 给定参数α,γ
[2] Repeat:
针对初始状态s,并根据 epsilon-贪婪策略在状态s选择动作a
Repeat (对于每一幕的每一步)
(a) 根据epsilon-贪婪策略在状态s选择动作a,得到回报r和下一个状态s',在状态s'根据epsilon贪婪策略得到动作a'
(b) Q(s,a)←Q(s,a) + α[r + γ*Q(s',a')-Q(s,a)]
(c) s=s', a=a'
Until s是中止状态
Until 所有的Q(s,a)收敛
[3] 输出最终策略:π(s) = argmax_a Q(s,a)
异策略Qlearning
[1] 初始化Q(s,a), all s∈S, a∈A, 给定参数α,γ
[2] Repeat:
针对初始状态s,并根据 epsilon-贪婪策略在状态s选择动作a
Repeat (对于每一幕的每一步)
(a) 根据epsilon-贪婪策略在状态s[t]选择动作a[t],得到回报r[t]和下一个状态s[t+1]
(b) Q(s[t],a[t])←Q(s[t],a[t]) + α[r[t] + γ*max_a Q(s[t+1],a[t+1])-Q(s[t],a[t])]
(c) s=s', a=a'
Until s是中止状态
Until 所有的Q(s,a)收敛
[3] 输出最终策略:π(s) = argmax_a Q(s,a)
当更新当前的值函数时,我们用到了下一个状态的值函数。由此可以推理,我们可以使用第二个乃至第n个状态的值函数,利用n步值函数更新当前值函数可以表示为:
Gtn=Rt+1+γRt+2+...+γn−1Rt+n+γnV(St+n) 利用n种不同步值更新当前值函数会有n种方法,很难衡量哪种值更接近真实值,但是我们可以使用加权的方法(在Gt(n)前乘以加权因子(1−λ)λn)融合着n个估计值,这就是TD(λ)方法
理解TD(λ)可以从前向和后向两个角度解释。
前向:通过观看将来状态的值函数来估计当前状态的值函数。
后向:从已经经历过的状态st出发,更新所有需要st状态出的值函数。更新流程如下:
计算当前状态的TD偏差:δt=Rt+1+γV(St+1)−V(St)
更新适合度轨,其中Et(s)
Et(s)={γλEt−1γλEt−1+1s=sts=st 对于状态空间中的每个状态s,更新值函数:V(s)←V(s)+αδtEt(s)
前向和后向观点的异同:
前向观点需要等一次实验结束后再更新当前状态的值函数;后向观点不需要等到值函数结束后再更新值函数,而是每一部都在更新值函数,是增量方法
前向观点在每一次实验结束后更新值函数时,会更新完当前装填的值函数后,此状态的值函数就不再改变。后向观点在每一步计算完当前的TD误差后,其他状态的值函数需要利用当前状态的TD误差更新
在一次实验结束后,前向观点和后向观点的每个状态的值函数的更新总量是相等的,都是Gtλ
Sarsa算法
1. 初始化Q(s,a), for all s∈S, a∈A(s), 给定参数α, γ
2. Repeat:
给定初始状态s, 并根据epsilon-greedy策略在状态s选择动作a, 对所有的s∈S, a∈A(s), E(s,a)=0
Repeat (对于一幕的每一步)
(a) 根据epsilon-greedy策略在状态s选择动作a, 得到回报r和下一个状态s', 在状态s'根据epsilon-greedy策略得到动作a
(b) δ←r+γQ(s',a')-Q(s,a), E(s,a)←E(s,a)+1
(c) 对所有的s∈S, a∈A(s): Q(s,a)←Q(s,a)+aδE(s,a), E(s,a)←γλE(s,a)
(d) s=s', a=a'
Until s是终止状态
Until所有的Q(s,a)收敛
3. 输出最终策略:π(s) = argmax_a Q(s,a)
5.2 基于Python和gym的编程实例