强化学习:策略梯度法

策略梯度法的思路

  之前我们是用表格的形式来表达策略,现在我们同样可以用函数来表达策略。之前学的所有的方法都是被称为 value-based,接来下学的叫 policy-based 。接下来我们来看一下 策略梯度法的思路。之前学的的策略全都是用表格来表示的,如下:
在这里插入图片描述
  现在,我们把表格改成函数,那么 π π π 的写法也会发生改变,如下:
在这里插入图片描述
其中, θ θ θ 是一个向量可以用来表示 π π π 这个函数里边的参数。

  用表格与函数表示不同之处还在于获取一个 action 的概率。 表格形式直接通过索引查表,而用函数会稍微麻烦一点,不能直接去索引了,需要计算对应的 π ( a ∣ s , θ ) π(a|s,\theta) π(as,θ)

  用表格与函数表示不同之处还在于更新策略的方式。表格中直接通过修改表格中的值就可以了。当用参数化函数表示时,策略 π π π 只能通过修改参数 θ \theta θ 去更新策略。

.
策略梯度法的思路:
  用函数表示时,我们会建立某些标量的目标函数 J ( θ ) J(\theta) J(θ),通过优化目标函数使得策略 π π π 达到最优,如下:
在这里插入图片描述

标量的目标函数的选取

  上面我们知道要建立一个标量的目标函数,那么这个标量的目标函数是什么呢?通常,我们常用两大类标量的目标函数。

  第一个是状态值平均值,或者简单地称为平均值,其实就是 state value 的一 个加权平均,如下:
在这里插入图片描述
v ˉ \bar v vˉ 是 state value 的加权平均
d ( s ) d(s) d(s) 代表了状态 s s s 被选中的概率

以上的形式我们还可以写成一种更简洁形式,就是两个向量的内积:
在这里插入图片描述
.

  那么,我们怎么去选择 d ( s ) d(s) d(s) 呢?我们分两种情况 ,一是 d d d π π π 没有关系;而是 d d d π π π 有关系。

  当 d d d π π π 没有关系时,我们分别用 d 0 d_0 d0 π ˉ 0 \bar π_0 πˉ0 表示,同样的我们可以采取均匀分布 d 0 ( s ) = 1 / ∣ S ∣ = 1 / n d_0(s)=1/|S|=1/n d0(s)=1/∣S=1/n ,如果某一状态比较重要,那么我们可以将其权重提高。

  当 d d d π π π 有关系时,常用的方法选择平稳分布,如下:
在这里插入图片描述
.
  第二个是即时奖励平均值 ,就是即时奖励的一 个加权平均,如下:
在这里插入图片描述

上面是 reward 的第一种形式,我们经常会看到 reward 的另外一种形式,如下:
在这里插入图片描述
其中,我们假设遵循给定的策略并生成一个轨迹,得到一系列的奖励 ( R t + 1 , R t + 2 , … … ) (R_{t+1},R_{t+2},……) (Rt+1,Rt+2,……) ;在跑了无穷多步之后, s 0 s_0 s0 已经不重要了,所以最后把 s 0 s_0 s0 去掉了
.

  上面我们介绍了两种标量的目标函数的选取方式,接下来我们对这两个标量做进行进一步的总结:
  1、他们都是策略 π π π 的函数
  2、策略 π π π 是一个函数的形式,它的参数是 θ \theta θ ,不同的 θ \theta θ 会得到不同的值
  3、可以通过找到最优的 θ \theta θ 去最大化标量的值
   4、 r ˉ π \bar r_π rˉπ v ˉ π \bar v_π vˉπ 是等价的,对其中一个做优化的时候另外也进行了优化。在折扣系数 γ < 1 γ<1 γ<1 是,有 r ˉ π = ( 1 − γ ) v ˉ π \bar r_π=(1-γ)\bar v_π rˉπ=(1γ)vˉπ

策略梯度求解

   得到一个策略标量后,计算出其梯度。然后,应用基于梯度的方法进行优化,其中,梯度计算是最复杂部分之一。那是因为,首先,我们需要区分不同的 v ˉ π \bar v_π vˉπ r ˉ π \bar r_π rˉπ v ˉ π 0 \bar v_π^0 vˉπ0 ;其次,我们需要区分折扣和未折扣。梯度的计算,这里我们就做比较简要的介绍。

在这里插入图片描述
J ( θ ) J(\theta) J(θ) 可以是 v ˉ π \bar v_π vˉπ r ˉ π \bar r_π rˉπ v ˉ π 0 \bar v_π^0 vˉπ0
η η η 是分布概率或权重
"=” 可以表示严格相等、近似或与成正比

v ˉ π \bar v_π vˉπ r ˉ π \bar r_π rˉπ v ˉ π 0 \bar v_π^0 vˉπ0 相应的梯度公式如下:
在这里插入图片描述
.
梯度公式分析:
   上面的式子我们可以写成如下形式:
在这里插入图片描述

S 服从 η 分布 S服从η分布 S服从η分布 A 服从 π ( A ∣ S , θ ) 分布 A服从π(A|S,\theta)分布 A服从π(AS,θ)分布

为什么我们需要这样一个式子呢?这是因为真实的梯度含有期望 E E E ,而期望 E E E 是不知道的,所以我们可以通过采样来近似来做优化,如下:
在这里插入图片描述

补充说明:
   因为要计算 l n π ( a ∣ s , θ ) lnπ(a|s,\theta) l(as,θ),所以要求 π ( a ∣ s , θ ) > 0 π(a|s,\theta)>0 π(as,θ)>0 ,怎么确保所有的 π π π 对所有的 a a a 全都是大于0呢?使用 softmax function 进行归一化,如下:
在这里插入图片描述

那么, π π π 的表达形式如下:
在这里插入图片描述
h ( s , a , θ ) h(s,a,\theta) h(s,a,θ) 是另一个函数,通常由神经网络得到。

梯度上升和REINFORCE

   梯度上升算法的基本思路是,真实的梯度有期望 E E E ,所以用随机的梯度来代替真实梯度,但还有一个 q π ( s , a ) q_π(s,a) qπ(s,a) 即策略 π π π 所对应的真实的 action value 是不知道的,同样的我们用一个方法来近似或者对 q π q_π qπ 进行采样,方法是与MC结合——reinforce ,如下:

在这里插入图片描述
.
我们是用随机的梯度来代替真实梯度,那么我们怎么对随机变量 ( S , A ) (S,A) (S,A) 采样呢?首先对 S S S 采样,因为 S 服从 η 分布 S服从η分布 S服从η分布 它要求大量的数据,在现实中等难以达到平稳的状态,所以在实际当中一般是不太考虑的。那怎么对 A A A 采样呢?因为 A 服从 π ( A ∣ S , θ ) 分布 A服从π(A|S,\theta)分布 A服从π(AS,θ)分布 ,因此,在 s t s_t st 应该根据策略 π ( θ ) π(\theta) π(θ) a t a_t at 进行取样。所有这里的策略梯度属于 on-policy 算法。
在这里插入图片描述

算法理解
在这里插入图片描述
要求 α β t \alpha\beta_t αβt 较小,可以发现 β t \beta_t βt 能够平衡算法发 探索 和 数据利用。因为 β t \beta_t βt q t ( s t , a t ) q_t(s_t,a_t) qt(st,at) 成正比,因此,当 q t ( s t , a t ) q_t(s_t,a_t) qt(st,at) 较大时 β t \beta_t βt 也会比较大,意味着 π t ( s t , a t ) π_t(s_t,a_t) πt(st,at) 有较大的概率被选择。 β t \beta_t βt π ( a t ∣ s t , θ t ) π(a_t|s_t,\theta_t) π(atst,θt) 成反比,因此,当 β t \beta_t βt 较大时 π ( a t ∣ s t , θ t ) π(a_t|s_t,\theta_t) π(atst,θt) 会比较小,意味着如果之前我选择 π t ( s t , a t ) π_t(s_t,a_t) πt(st,at) 的概率是比较小的,下一时刻给它更大的概率去选择它。

β t > 0 \beta_t>0 βt>0 时,这是 π ( a t ∣ s t , θ ) π(a_t|s_t,θ) π(atst,θ) 梯度上升算法,有:
在这里插入图片描述
β t < 0 \beta_t<0 βt<0 时,这是 π ( a t ∣ s t , θ ) π(a_t|s_t,θ) π(atst,θ) 梯度下降算法,有:
在这里插入图片描述
.

reinforce 算法

   用 q t ( s t , a t ) q_t(s_t,a_t) qt(st,at) 去近似代替 q π ( s t , a t ) q_π(s_t,a_t) qπ(st,at) q t ( s t , a t ) q_t(s_t,a_t) qt(st,at) 是用蒙特卡洛的方法求得,即就是从 ( s t , a t ) (s_t,a_t) (st,at) 出发得到一个 episode ,然后把这个episode 的 return 赋给 q t q_t qt,这种就是 reinforce 算法。
在这里插入图片描述
.
reinforce 算法,其伪代码如下:
在这里插入图片描述
在进行第 k k k 次迭代时,先选定一个初始的 s t a t e state state 根据当前的策略 π ( θ k ) π(\theta _k) π(θk) 和环境进行交互就得到一个 episode ,针对这个episode 当中的每一个元素我们要过一遍。然后对每一个元素进行操作,分为两步。第一步是做 value update,就是用蒙特卡洛的方法去估计 q t q_t qt ,从 ( s t , a t ) (s_t,a_t) (st,at) 出发把后边所得到的所有的 reward 相加。接下来就是 policy update ,将得到的 q t q_t qt 代到公式里去更新 θ t θ_t θt ,最后把最后所得到的 θ T θ_T θT 作为一个新的 θ k θ_k θk 进行迭代更新。

猜你喜欢

转载自blog.csdn.net/qq_50086023/article/details/131397020
今日推荐