Java教程

策略梯度中的baseline

本文主要是介绍策略梯度中的baseline,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

策略梯度中的Baseline

Policy Gradient with Baseline

Policy Gradient

  • 策略梯度是关于策略网络的参数求的,策略网络 π ( a ∣ s ; θ ) \pi (a|s;\theta) π(a∣s;θ)的参数是 θ \theta θ,我们使用策略网络来控制Agent做运动。状态价值函数 V π ( s ) V_{\pi}(s) Vπ​(s)是动作价值函数的期望,期望是关于动作A求的,动作A的概率密度函数是 π \pi π,可以将期望等价写为连加的形式。这里期望中包含策略网络的参数 θ \theta θ,所以得到的状态价值函数 V π ( s ) V_{\pi}(s) Vπ​(s)依赖于参数 θ \theta θ,策略梯度是 V π V_{\pi} Vπ​关于参数 θ \theta θ的导数,也可以写为期望的形式。

在这里插入图片描述

Baseline

  • 策略梯度方法常用Baseline来降低方差,让收敛更快,Baseline指的是一个函数b,它可以是任何东西,但是不能依赖于动作A。
  • 证明这个期望 E A   π [ b ⋅ ∂ l n π ( A ∣ s ; θ ) ∂ θ ] \mathbb{E}_{A~ \pi}[b\cdot \frac{\partial ln\pi (A|s;\theta)}{\partial \theta}] EA π​[b⋅∂θ∂lnπ(A∣s;θ)​]为0,可以将b提出去,将得到后的期望展开得到连加的形式,使用链式法则将导数展开,这样接可以消去一项。因为连加是关于a求的,求导是关于 θ \theta θ求的,所以可以将连加放入到求导内部,因为 π \pi π是对a的概率密度函数,所以它的连加和为1,故结果为0.
  • 通过上面推导我们可以得到baseline的重要性质,就是它乘以策略梯度然后对A求期望,得到的期望为0

在这里插入图片描述

Policy Gradient with Baseline

  • 上面我们得到了 E A   π [ b ⋅ ∂ l n π ( A ∣ s ; θ ) ∂ θ ] = 0 \mathbb{E}_{A~ \pi}[b\cdot \frac{\partial ln\pi (A|s;\theta)}{\partial \theta}]=0 EA π​[b⋅∂θ∂lnπ(A∣s;θ)​]=0,使用这个性质向策略梯度中添加baseline,
  • 之前我们得到了策略梯度为下面的等式,又因为baseline为0,所以可以减去它,使得等式仍然成立。合并我们就可以得到第二个等式,等式中包含baseline

在这里插入图片描述

  • 这样我们就可以得到下面的定理:
    • 但是我们肯定会有这样一个问题:既然b不会影响期望,那么我们加不加b有什么区别呢?实际上,在算法中我们求的不是期望,因为期望太复杂啦,我们使用的是对期望的蒙特卡洛近似,如果我们选择的b比较好,比较接近于 Q π Q_{\pi} Qπ​,算法会将蒙特卡洛近似的方差降低,收敛更快。

在这里插入图片描述

Monte Carlo Approximation

  • 我们直接求期望往往很困难,所以我们通常使用期望的蒙特卡洛近似。我们将期望中的函数记为 g ( A t ) g(A_t) g(At​),它依赖于随机变量 A t A_t At​,期望是按照随机变量 A t A_t At​求的,它的概率密度函数是 π \pi π,我们根据 π \pi π做随机抽样,得到一个动作 a t a_t at​,然后计算 g ( a t ) g(a_t) g(at​),即为上面期望的蒙特卡洛近似, g ( a t ) g(a_t) g(at​)显然是策略梯度的一个无偏估计,这是因为g关于 A t A_t At​的期望为策略梯度, g a t g_{a_t} gat​​实际上是随机梯度,实际中我们往往用随机梯度。

在这里插入图片描述

Stochastic Policy Gradient

  • 实际我们训练策略网络的时候,我们通常使用随机梯度上升来训练参数,使用的是 g ( a t ) g(a_t) g(at​),这样做策略梯度上升可以使得状态价值变大,也就以为着让策略变得更好。

在这里插入图片描述

  • 在看上面 g ( a t ) g(a_t) g(at​)的公式,里面有b,前面我们证明了只要b于 A t A_t At​无关,那么我们就可以使得期望保持不变。虽然b不影响 g ( A t ) g(A_t) g(At​)的期望,但是b影响 g ( a t ) g(a_t) g(at​),看下上面公式用不同的b可以得到不同的 g ( a t ) g(a_t) g(at​),如果我们选择的b很好,很接近 Q π Q_{\pi} Qπ​,那么随机梯度方差就会小,就会让算法收敛的更快。

在这里插入图片描述

Choices of Baselines

  • Choice 1:b=0。也就是不用baseline,这样我们就得到了标准的策略梯度,不带baseline
  • Choice 2: b = V π ( s t ) b=V_{\pi}(s_t) b=Vπ​(st​),因为状态 s t s_t st​是先于动作被观测到的,所以它不依赖于动作。我们为啥要用这个呢?因为上面我们提到了,如果我们选择的b很好,非常的接近动作价值函数 V π V_{\pi} Vπ​这样我们在用蒙特卡洛近似策略梯度的期望的时候,就可以使得方差很小,收敛更快。根据定义状态价值函数 V π V_{\pi} Vπ​是动作价值函数 Q π ( s t , A t ) Q_{\pi}(s_t,A_t) Qπ​(st​,At​)关于动作 A t A_t At​的期望。作为期望显然很接近动作价值函数,所以很合适。

在这里插入图片描述

REINFORCE with Baseline

  • 复习

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 之前我们推导出了随机策略梯度,也就是上面的公式,但是它里面还有未知项,所以我们要近似,我们可以使用观测到的值 u t u_t ut​来近似 Q π ( s t , a t ) Q_{\pi}(s_t,a_t) Qπ​(st​,at​),这也是蒙特卡洛近似,这个算法就是REINFORCE。
    • 我们观测到一个轨迹,也就是一直到游戏结束。
    • 计算return,这样我们就可以得到回报 u t u_t ut​
    • u t u_t ut​就是动作价值函数的无偏估计,REINFORCE算法就用这个方法来近似 Q π Q_{\pi} Qπ​
  • 上面的公式中还有一个未知的东西,就是 V π V_{\pi} Vπ​,我们可以使用神经网络来近似它,也就是价值网络,最终可以直接算出近似的策略梯度。

在这里插入图片描述

在这里插入图片描述

  • 为了能够计算策略梯度我们进行了3次近似
    • 使用蒙特卡洛来近似期望,将策略梯度近似为随机梯度 g ( a t ) g(a_t) g(at​)
    • 使用观测到的 u t u_t ut​来近似动作价值函数,这也是蒙特卡洛近似
    • 使用价值网络来近似状态价值函数
      在这里插入图片描述

Policy and Value Network

  • 我们需要两个神经网络,策略网络来控制Agent,价值网络作为baseline

  • 策略网络

    • 策略网络是对策略函数的近似,

在这里插入图片描述

  • 价值网络
    • 价值网络的输入是状态s,它是对状态价值函数的近似。

在这里插入图片描述

  • 共享卷积层参数,因为他们的输入都是对状态s提取特征。

在这里插入图片描述

REINFORCE with Baseline

  • 我们使用REINFORCE方法训练策略网络,使用回归方法训练价值网络。
  • 之前我们已经近似出了策略梯度,有了策略梯度我们就可以根据梯度上升来更新策略网络,我们将圈出来的记为 − δ t -\delta_t −δt​,在后面我们训练价值网络的时候也会用到它。

在这里插入图片描述

  • 更新价值网络就是让它去拟合回报 u t u_t ut​,因为之前我们将状态价值函数近似为了 u t u_t ut​,这样我们就可以得到预测的误差,因为我们希望误差越小越好,所以我么可以使用误差的平方作为损失函数。然后求导,就可以得到梯度,然后做梯度下降更新参数。

在这里插入图片描述

Summary

  • 每当我们打一局游戏,我们就可以观测到一条轨迹
  • 使用观测到的奖励r来计算回报,价值网络于回报之间的差,就是预测误差
  • 更新策略网络的参数
  • 最后做梯度下降来更新价值网络
  • 因为我们可以在一局游戏中我们可以得到n个回报,这样我们就可以对两个策略网络做n轮更新。

在这里插入图片描述

Advantage Actor-Critic (A2C)

在这里插入图片描述

在这里插入图片描述

Training of A2C

  • 每一轮我们观测到一个transition
  • 然后计算TD target
  • 然后计算TD error
  • 使用近似的策略梯度来更新策略网络参数 θ \theta θ
  • 然后更新价值网络的参数

在这里插入图片描述

Properties of Value Functions

在这里插入图片描述

  • t时刻的动作价值可以写为下面的公式,期望中的随机性来自于动作 A t + 1 A_{t+1} At+1​和状态 S t + 1 S_{t+1} St+1​,将这两个变量求期望消除随机性,将对 A t + 1 A_{t+1} At+1​的期望推到里面,我们就可以得到第二个公式。 这样我们根据定义动作价值对动作求期望就是状态价值,这样进行替换,就可以得到定理1.

在这里插入图片描述

Properties of State-Value Function

  • 我们知道动作价值函数对 A t A_t At​的期望就是状态价值函数,将期望中的 Q π Q_{\pi} Qπ​使用我们上面得到的定理1替换。这样我们就可以得到定理2.

在这里插入图片描述

Monte Carlo Approximations

  • 通过我们上面推导出的定理。我们对它们做蒙特卡洛近似
  • 对定理1做蒙特卡洛近似,假设我们观测到一个transition,利用它来对期望做近似,这样我们就得到了一个公式。

在这里插入图片描述

  • 对定理2做蒙特卡洛近似,假设我们观测到一个tranistion,来近似,这样我们又得到了一个公式
    在这里插入图片描述

  • 这样我们就的到了两个公式,第一个公式可以用来训练策略网络,第二个公式可以用来训练价值网络。
    在这里插入图片描述

Updating Policy Network

  • 在前面我们推导出了下面的公式, g ( a t ) g(a_t) g(at​)是对策略网络的策略梯度的蒙特卡洛近似,其实就是一个随机梯度,里面的 Q π ( s t , a t ) − V π ( s t ) Q_{\pi}(s_t,a_t)-V_{\pi}(s_t) Qπ​(st​,at​)−Vπ​(st​)被称为优势函数。我们不知道他们两的值,但是我们在前面得到了他们两的蒙特卡洛近似。然后我们进行替换,然后公式中就只有状态价值函数了,我们使用价值网络对它进行替换。我们可以用做后得到的公式来更新策略网络。

在这里插入图片描述
在这里插入图片描述

  • 这里我们观察下面蓝色方框中式子,它其实就是TD target

在这里插入图片描述

  • 这样我们就可以使用梯度上升来更新策略网络了。

在这里插入图片描述

Updating Value Network

  • 训练价值网络我们要用到TD算法,下面我们来推导TD target,上面我们得到了状态价值的蒙特卡洛近似,使用价值网络来替换,
    在这里插入图片描述

  • 我们将上面得到的公式叫做TD target,它比纯粹的估计更靠谱,TD算法鼓励价值网络的估计接近TD target

在这里插入图片描述

  • 使用TD算法更新价值网络

œ

Summary

在这里插入图片描述

REINFORCE vs A2C

  • 它们两使用的网络结构完全相同,策略网络也是一样的,但是价值网络的功能却有些区别。A2C的价值网络叫做Critic,用来评价策略网络的表现,REINFORCE的价值网络仅仅是个baseline,不会评价价值的好坏。

A2C with Multi-Step TD Target

  • A2C

在这里插入图片描述

  • 上面的TD target我们只用到了一个奖励,我们可以用多个奖励放进去,这样我们可以得到更好的效果。

在这里插入图片描述

  • One-Step VS Multi-Step Target

在这里插入图片描述

  • 下面就是多步的算法

在这里插入图片描述

Review REINFORCE

在这里插入图片描述

  • 如果我们考虑用一局游戏的所有奖励来更新TD target的话,A2C就变为了Reinforce

在这里插入图片描述
在这里插入图片描述

这篇关于策略梯度中的baseline的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!