本文主要内容:
上节课我们使用参数估计了价值函数和行动-价值函数,而当讲到策略时,我们只提到 ϵ \epsilon ϵ-greedy。在这节课,我们将会直接参数化策略 π θ ( s , a ) = P ( a ∣ s , θ ) \pi_\theta(s,a)=\sf{P}(a|s,\theta) πθ(s,a)=P(a∣s,θ)。
增强学习可分为Value-Based、Policy-Based以及二者结合的Actor-Critic。Value-Based的增强学习的策略(比如 ϵ \epsilon ϵ-greedy)是不变的,即在某个状态,选择哪种行动是固定的。Policy-Based的增强学习会学习不同的策略,即在某个状态下多少的概率怎么做,这个概率可能会不断地调整。policy-based和value-based如下图所示:
Policy-Based的增强学习优点有:
缺点:
那么给定一个具有参数 θ \theta θ的策略 π θ ( s , a ) \pi_\theta(s,a) πθ(s,a),判断这个策略的优劣?通常有三种方法:
通常使用梯度下降法通过最大化 J ( θ ) J(\theta) J(θ)来确定 θ \theta θ的取值。定义策略梯度为:
∇ θ J ( θ ) = ( ∂ J ( θ ) ∂ θ 1 ⋮ ∂ J ( θ ) ∂ θ n ) \nabla_\theta J(\theta)=\begin{pmatrix} \frac{\partial J(\theta)}{\partial \theta_1} \\ \vdots \\ \frac{\partial J(\theta)}{\partial \theta_n} \end{pmatrix} ∇θJ(θ)=⎝⎜⎜⎛∂θ1∂J(θ)⋮∂θn∂J(θ)⎠⎟⎟⎞
假设策略 π θ \pi_\theta πθ为零的时候可微,并且已知梯度 ∇ θ π θ ( s , a ) \nabla_\theta \pi_\theta(s,a) ∇θπθ(s,a),定义 ∇ θ l o g π θ ( s , a ) \nabla_\theta log \pi_\theta(s,a) ∇θlogπθ(s,a)为得分函数(score function)。二者关系如下:
因为 ∇ θ l o g π θ ( s , a ) = ∇ θ π θ ( s , a ) π θ ( s , a ) \nabla_\theta log \pi_\theta(s,a)=\frac{\nabla_\theta \pi_\theta(s,a)}{\pi_\theta(s,a)} ∇θlogπθ(s,a)=πθ(s,a)∇θπθ(s,a)
所以
∇ θ π θ ( s , a ) = π θ ( s , a ) ∇ θ π θ ( s , a ) π θ ( s , a ) = π θ ( s , a ) ∇ θ l o g π θ ( s , a ) \nabla_\theta \pi_\theta(s,a)=\pi_\theta(s,a) \frac{\nabla_\theta \pi_\theta(s,a)}{\pi_\theta(s,a)}=\pi_\theta(s,a) \nabla_\theta log \pi_\theta(s,a) ∇θπθ(s,a)=πθ(s,a)πθ(s,a)∇θπθ(s,a)=πθ(s,a)∇θlogπθ(s,a)
接下来我们考虑一个只走一步的MDP,对它使用策略梯度下降。 π θ ( s , a ) \pi_\theta(s,a) πθ(s,a)表示关于参数 θ \theta θ的函数,映射是 p ( a ∣ s , θ ) p(a|s,\theta) p(a∣s,θ)。它在状态s向前走一步,获得奖励 r = R s , a r=R_{s,a} r=Rs,a。那么选择行动a的奖励为 π θ ( s , a ) R s , a \pi_\theta (s,a)R_{s,a} πθ(s,a)Rs,a,在状态s的加权奖励为 ∑ a ∈ A π θ ( s , a ) R s , a \sum_{a \in A} \pi_\theta(s,a) R_{s,a} ∑a∈Aπθ(s,a)Rs,a,应用策略所能获得的奖励期望及梯度为:
J ( θ ) = E π θ [ r ] = ∑ s ∈ S d ( s ) ∑ a ∈ A π θ ( s , a ) R s , a ∇ θ J ( θ ) = ∑ s ∈ S d ( s ) ∑ a ∈ A π θ ( s , a ) ∇ θ l o g π θ ( s , a ) R s , a = E π θ [ ∇ θ l o g π θ ( s , a ) r ] J(\theta)=\mathbb{E}_{\pi_\theta}[r]=\sum_{s \in S}d(s)\sum_{a \in A} \pi_\theta(s,a) R_{s,a} \\ \nabla_\theta J(\theta)=\color{red}{\sum_{s \in S}d(s)\sum_{a \in A} \pi_\theta(s,a)} \nabla_\theta log \pi_\theta(s,a) R_{s,a}=\mathbb{E}_{\pi_\theta}[\nabla_\theta log \pi_\theta(s,a)r] J(θ)=Eπθ[r]=s∈S∑d(s)a∈A∑πθ(s,a)Rs,a∇θJ(θ)=s∈S∑d(s)a∈A∑πθ(s,a)∇θlogπθ(s,a)Rs,a=Eπθ[∇θlogπθ(s,a)r]
再考虑走了多步的MDP,使用 Q π ( s , a ) Q^\pi(s,a) Qπ(s,a)代替奖励值r,对于任意可微的策略,策略梯度为:
∇ θ J ( θ ) = E π θ [ ∇ θ l o g π θ ( s , a ) Q π θ ( s , a ) ] \nabla_\theta J(\theta)=\mathbb{E}_{\pi_\theta}[\nabla_\theta log \pi_\theta(s,a)Q^{\pi_\theta}(s,a)] ∇θJ(θ)=Eπθ[∇θlogπθ(s,a)Qπθ(s,a)]
Monte-Carlo策略梯度通过采样episode来更新参数:
使用随机梯度上升法更新参数;使用策略梯度法;使用return v t v_t vt作为 Q π θ ( s t , a t ) Q^{\pi_\theta}(s_t,a_t) Qπθ(st,at)的无偏估计。则 Δ θ t = α ∇ θ l o g π θ ( s t , a t ) v t \Delta \theta_t=\alpha \nabla_\theta log \pi_\theta(s_t,a_t)v_t Δθt=α∇θlogπθ(st,at)vt,具体如下:
Monte-Carlo策略梯度的方差较高,因此放弃用return来估计行动-价值函数Q,而是使用critic来估计Q。 Q π θ ( s , a ) ≈ Q w ( s , a ) Q^{\pi_\theta}(s,a) \approx Q_w(s,a) Qπθ(s,a)≈Qw(s,a)。这是一个名为actor-critic的算法,具有两套参数。(1)critic的参数为w。(2)actor的参数为 θ \theta θ,根据critic建议的方向更新。
critic其实就是在评估策略。假设Q约为特征的线性组合: Q w ( s , a ) = ϕ ( s , a ) T w Q_w(s,a)=\phi(s,a)^T w Qw(s,a)=ϕ(s,a)Tw。critic根据线性TD(0)来更新w,actor通过策略梯度来更新 θ \theta θ。
在actor-critic算法中,对策略进行了估计,这会产生误差,但是当满足以下两个条件时,策略梯度是准确的
另外,通过将策略梯度减去一个基线函数B(s),可以在不改变期望的情况下,降低方差。证明不改变期望,就是证明相加和为0。
E π θ [ ∇ θ l o g π θ ( s , a ) B ( s ) ] = ∑ s ∈ S d π θ ( s ) ∑ a ∇ θ π θ ( s , a ) B ( s ) = ∑ s ∈ S d π θ ( s ) B ( s ) ∇ θ ∑ a ∈ A π θ ( s , a ) = 0 \mathbb{E}_{\pi_\theta}[\nabla_\theta log \pi_\theta(s,a)B(s)]=\sum_{s \in S}d^{\pi_\theta}(s)\sum_a \nabla_\theta \pi_\theta(s,a)B(s)\\ =\sum_{s \in S}d^{\pi_\theta}(s)B(s) \nabla_\theta \sum_{a \in A} \pi_\theta(s,a)=0 Eπθ[∇θlogπθ(s,a)B(s)]=s∈S∑dπθ(s)a∑∇θπθ(s,a)B(s)=s∈S∑dπθ(s)B(s)∇θa∈A∑πθ(s,a)=0
状态价值函数 V π θ ( s ) V^{\pi_\theta}(s) Vπθ(s)是一个好的基线。因此可以通过使用优势函数**(advantage function)** A π θ ( s , a ) A^{\pi_\theta}(s,a) Aπθ(s,a)重写价值梯度函数。
A π θ ( s , a ) = Q π θ ( s , a ) − V π θ ( s ) ∇ θ J ( θ ) = E π θ [ ∇ θ l o g π θ ( s , a ) A π θ ( s , a ) ] A^{\pi_\theta}(s,a)=Q^{\pi_\theta}(s,a)-V^{\pi_\theta}(s)\\ \nabla_\theta J(\theta)=\mathbb{E}_{\pi_\theta}[\nabla_\theta log \pi_\theta(s,a)A^{\pi_\theta}(s,a)] Aπθ(s,a)=Qπθ(s,a)−Vπθ(s)∇θJ(θ)=Eπθ[∇θlogπθ(s,a)Aπθ(s,a)]
设 V π θ ( s ) V^{\pi_\theta}(s) Vπθ(s)是真实的价值函数,TD算法利用bellman方程来逼近真实值,误差为 δ π θ = r + γ V π θ ( s ′ ) − V π θ ( s ) \delta^{\pi_\theta}=r+\gamma V^{\pi_\theta}(s')-V^{\pi_\theta}(s) δπθ=r+γVπθ(s′)−Vπθ(s)。该误差是优势函数的无偏估计。因此我们可以使用该误差计算策略梯度:
∇ θ J ( θ ) = E π θ [ ∇ θ l o g π θ ( s , a ) δ π θ ] \nabla_\theta J(\theta)=\mathbb{E}_{\pi_\theta}[\nabla_\theta log \pi_\theta(s,a) \delta^{\pi_\theta}] ∇θJ(θ)=Eπθ[∇θlogπθ(s,a)δπθ]
该方法只需要critic,不需要actor。