策略梯度中的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