从0单排强化学习原理(三)

2021-05-14 16:08:04 浏览数 (1)

简单回顾

上期介绍了基于模型的动态规划方法,

(S, A, P, R, gamma)

全部已知,求解

pi(a|s)

。求解分为两个过程,首先是策略评估,即通过高斯-塞德尔迭代法求解值函数,然后是策略改善过程,通过

pi = mathop{argmax}_{a}R_s^a gamma sum_{s' in S}P_{ss'}^{a}v(s')

更新策略。对于基于模型的动态规划算法已经忘的差不多了可以简要回顾下那个机器人的例子。

基于蒙特卡罗的强化学习方法

蒙特卡罗方法,简而言之就是利用随机数去求解未知数。举个栗子,用随机数求解圆周率

pi

,如下图:

1/4

个圆的面积比正方形的面积是

pi/4

,我们往这个正方形等概率投石子,落在圆内的石子数除以石子总数乘4就求得

pi

。那蒙特卡洛方法和我们强化学习又有啥关系呢?本篇介绍无模型的强化学习方法,和上篇不同,这次

(S, A)

已知,

(P, R, gamma)

全部未知。虽然看似有很多未知量,但是我们有各种样本(即使没有也可以去抽样),有足够的样本就可以估计未知量了。

(P, R, gamma)

的估计值已知时,我们继续通过策略评估和策略改善过程求解最优策略。

再回顾下值函数公式

v_{pi}(s) = E_{pi}left [sum_{k=0}^{infty }gamma^kR_{t k 1}|S_t=s right ]

,没有模型时候,我们就可以用经验平均代替随机变量的期望。我们先用策略

pi

产生采集很多样本,一次样本就是一个序列:

S_1,A_1,R_2,...,S_T

产生大量这样的样本,我们就可以计算:

G_t(s) = R_{t 1} gamma R_{t 2} ... gamma^{T-1}R_T

通过采集到的样本计算有两种方式,如下所示是一条采样样本:

s_1xrightarrow[a_1]{r_1}s_2xrightarrow[a_2]{r_2}s_3xrightarrow[a_3]{r_3}s_4xrightarrow[a_4]{r_4}s_5
s_1xrightarrow[a_1]{r_1}s_2xrightarrow[a_2]{r_2}s_3xrightarrow[a_3]{r_3}s_4xrightarrow[a_4]{r_4}s_5
s_1xrightarrow[a_1]{r_1}s_2xrightarrow[a_2]{r_2}s_3xrightarrow[a_3]{r_3}s_4xrightarrow[a_4]{r_4}s_5
V_{pi}(s) = r_2 gamma r_3 gamma^2 r_4

最后计算

V_{pi}(s) = frac{1}{N}sum_{i=0}^{N}V_{pi}^{i}

,其中N为样本数量,这个方法叫第一次访问求平均。

假设刚刚那个序列

s_4

也是s状态呢?那

V_{pi}(s)

也可以等于

r_4

,找到所有样本的所有s状态,计算:

V_{pi}(s) = avg(sum_{i=0}^{N}sum_{j=i}^{S_i}V_{pi}^{ij})

Si表示第

i

个样本有多少

s

状态,

V_{pi}^{ij}

表示

i

个样本的第

j

s

状态的值函数值。这个方法叫做每次访问求平均。

由于

P

未知,我们如何采样呢?我们无法像梯度下降一样,一开始就定义一个损失函数,往loss变低的方向走。所以我们必须先保证所有状态都必须能访问到,只有这样才能保证最终值函数能收敛。每次采样,都要保证初始状态和动作都是随机的,在计算完值函数后,我们就可以进行策略评估和策略改善了。

那么,如何精心设计我们的策略,保证所有状态都能访问到呢?我们肯定不希望

pi(a|s) = 0

,所以我们在更新策略的时候要保证任意状态下,每个动作的概率都大于0,于是有了策略叫

varepsilon -soft

策略:

pi(a|s) = begin{cases} & 1 - varepsilon frac{varepsilon }{left | A(s) right |} text{ if } a=argmax_aQ(s,a) \ & frac{varepsilon }{left | A(s) right |} text{ if } aneq a=argmax_aQ(s,a) end{cases}
|A(s)|

代表action的个数。仔细看这个策略,

varepsilon

是一个0-1之间的超参,我们保证在任何状态,当前抽样条件下,最差的action都有

varepsilon / |A(s)|

的概率,同时较优的策略更有可能去采样,从而在策略改善中发现更优的解。用

varepsilon -soft

策略的前提是策略改善与评估和抽样是一个策略,那么是不是也可以是不同策略呢?

重要性采样

乍一看好像不合理,毕竟就像我们定义了两套参数,一套参数用来算loss去更新另一套参数一样。这时候就要提到重要性采样了:已知一个随机变量

z

和函数

f

z

的概率密度函数

p(z)

,我们怎么求

E[f(z)]

,乍一看很简单,不就是解

int f(z)p(z)dz

。如果

p(z)

相当复杂,这个就没法解了。有没有近似解的方法呢?答案就是采样,按另一个概率密度函数

q(z)

去采样,

q(z)

可以是正态分布。于是

E[f(z)] = int f(z)p(z)/q(z)*q(z)dz

p(z)/q(z)

就是权重(即重要性),我们就可以按

q(z)

去采样了,最后:

E[f(z)]approx 1/Nsum_nw^nf(z^n)
q(z)

如何选择呢?

q(z)

必须接近

p(z)

,否则方差会很大,即我们采样结果很容易偏离真值过多,为了降低方差,又有了下式加权重要性采样:

E[f(z)]approx sum_n frac{w^n}{sum_mw^m}f(z^n)

这时候会不会有人觉得偏题了,强化学习呢?回到上文所说的,当采样用的策略和我们用来做策略评估和策略改善的策略不同时,计算出来的

V(s)

是有偏差的,是需要做修正的。我们把采样用的策略当作是

q(z)

,评估改善用的策略看作是

p(z)

,这样我们就可以在固定采样策略的情况下,不断优化

p(z)

了。

我们先定义采样的策略是

u

,要求的策略是

pi

,序列Seq为一条采样序列,因此重要性

w = P_{pi}(Seq) / P_u(Seq)

,我们就可以修正采样差异带来

V(s)

偏差的问题了:

V_{pi}(s) = frac{1}{N}sum wV_{u}(s)

上式按照前面所说的第一次访问求平均或者每次访问求平均的公式,稍做修改就可以用来计算

V_{pi}(s)

总结

本篇介绍在无模型的情况下,如何通过两种采样策略计算

V(s)

,以及在采样策略和优化策略不同时,如何通过重要性采样去修正

V(s)

,最后通过策略评估和策略改善求解最终的

pi(a|s)

0 人点赞