DataWhale-深度学习2阶段-打卡2

策略梯度算法(2024-1-18~2024-1-20)

策略梯度( p o l i c y − b a s e d policy-based policybased

1.基于价值算法的缺点

  • 无法表示连续动作。DQN等算法通过学习状态和动作的价值函数来间接指导策略。只能处理离散动作问题。
  • 高方差 。基于价值的方法通常是通过采样来估计价值函数,导致方差很高。
  • 探索与利用的平衡问题 ϵ -greedy \epsilon\text{-greedy} ϵ-greedy 策略可以实现一定程度的随机但效果不理想。

2.策略梯度算法

累积的价值期望 V ∗ ( s ) V^{*}(s) V(s)

π θ ( a ∣ s ) \pi_{\theta}(a|s) πθ(as) 来表示策略,即在状态 s s s 下采取动作 a a a 的概率分布 $ p(a|s)$,其中 θ \theta θ 是我们要去求出来的模型参数。

回合 e p i s o d e episode episode):环境首先会产生初始状态 s 0 s_0 s0然后智能体对应的执行动作 a 0 a_0 a0,然后转移到下一个状态 s 1 s_1 s1,并且奖励一个 r 1 r_1 r1,智能体再根据当前状态选择下一个动作,以此递推至终止状态。

轨迹( t r a j e c t o r y trajectory trajectory):把所有状态和动作按顺序组合起来。 τ \tau τ
τ = { s 0 , a 0 , s 1 , a 1 , ⋯   , s T , a T } (9.1) \tag{9.1} \tau=\left\{s_{0}, a_{0}, s_{1}, a_{1}, \cdots, s_{T}, a_{T}\right\} τ={s0,a0,s1,a1,,sT,aT}(9.1)
T T T 表示回合的终止时刻。由于环境初始化是随机的,我们假设产生初始状态 s 0 s_0 s0 的概率为 p ( s 0 ) p(s_0) p(s0) ,那么给定策略函数 π θ ( a ∣ s ) \pi_{\theta}(a|s) πθ(as) 的情况下,其实是很容易计算出轨迹 τ \tau τ 产生的概率的,用 P θ ( τ ) P_{\theta}(\tau) Pθ(τ) 表示。为了方便读者理解,我们假设有一个很短的轨迹 τ 0 = { s 0 , a 0 , s 1 } \tau_0 = \{s_0,a_0,s_1\} τ0={s0,a0,s1} ,即智能体执行一个动作之后就终止本回合了。

拆分一下在这条轨迹产生的过程中出现了那些概率事件,首先是环境初始化产生状态 s 0 s_0 s0 ,接着是智能体采取动作 a 0 a_0 a0 ,然后环境转移到状态 s 1 s_1 s1,即整个过程有三个概率事件,那么根据条件概率的乘法公式,该轨迹出现的概率应该为 环境初始化产生状态 s 0 s_0 s0 的概率 p ( s 0 ) p(s_0) p(s0) 乘以智能体采取动作 a 0 a_0 a0 的概率 π θ ( a 0 ∣ s 0 ) \pi_{\theta}(a_0|s_0) πθ(a0s0) 乘以环境转移到状态 s 1 s_1 s1 的概率 p ( s 1 ∣ s 0 , a 0 ) p(s_1|s_0,a_0) p(s1s0,a0),即 P θ ( τ 0 ) = π θ ( a 0 ∣ s 0 ) p ( s 1 ∣ s 0 , a 0 ) P_{\theta}(\tau_0) = \pi_{\theta}(a_0|s_0)p(s_1|s_0,a_0) Pθ(τ0)=πθ(a0s0)p(s1s0,a0) 。依此类推,对于任意轨迹 τ \tau τ ,其产生的概率如式 ( 9.2 ) \text(9.2) (9.2) 所示。

P θ ( τ ) = p ( s 0 ) π θ ( a 0 ∣ s 0 ) p ( s 1 ∣ s 0 , a 0 ) π θ ( a 1 ∣ s 1 ) p ( s 2 ∣ s 1 , a 1 ) ⋯ = p ( s 0 ) ∏ t = 0 T π θ ( a t ∣ s t ) p ( s t + 1 ∣ s t , a t ) (9.2) \tag{9.2} \begin{aligned} P_{\theta}(\tau) &=p(s_{0}) \pi_{\theta}(a_{0} | s_{0}) p(s_{1} | s_{0}, a_{0}) \pi_{\theta}(a_{1} | s_{1}) p(s_{2} | s_{1}, a_{1}) \cdots \\ &=p(s_{0}) \prod_{t=0}^{T} \pi_{\theta}\left(a_{t} | s_{t}\right) p\left(s_{t+1} | s_{t}, a_{t}\right) \end{aligned} Pθ(τ)=p(s0)πθ(a0s0)p(s1s0,a0)πθ(a1s1)p(s2s1,a1)=p(s0)t=0Tπθ(atst)p(st+1st,at)(9.2)
将环境在每一步状态和动作下产生的奖励记作一个函数 r t + 1 = r ( s t , a t ) , t = 0 , 1 , ⋯ r_{t+1}=r(s_t,a_t),t=0,1,\cdots rt+1=r(st,at),t=0,1,,那么对于一条轨迹 τ \tau τ 来说,对应的累积奖励就可以计算为 R ( τ ) = ∑ t = 0 T r ( s t , a t ) R(\tau)=\sum_{t=0}^T r\left(s_t, a_t\right) R(τ)=t=0Tr(st,at),注意这里出于简化考虑我们忽略了折扣因子 γ \gamma γ

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么在给定的策略下,即参数 θ \theta θ 固定,对于不同的初始状态,会形成不同的轨迹 τ 1 , τ 2 , ⋯ \tau_{1},\tau_{2},\cdots τ1,τ2,,对应轨迹的出现概率前面已经推导出来为 P θ ( τ 1 ) , P θ ( τ 2 ) , ⋯ P_{\theta}(\tau_{1}),P_{\theta}(\tau_{2}),\cdots Pθ(τ1),Pθ(τ2),,累积奖励则为 R ( τ 1 ) , R ( τ 2 ) , ⋯ R(\tau_{1}),R(\tau_{2}),\cdots R(τ1),R(τ2),。结合概率论中的全期望公式,我们可以得到策略的价值期望公式,即式 ( 9.3 ) \text(9.3) (9.3)

J ( π θ ) = E τ ∼ π θ [ R ( τ ) ] = P θ ( τ 1 ) R ( τ 1 ) + P θ ( τ 2 ) R ( τ 2 ) + ⋯ = ∫ τ P θ ( τ ) R ( τ ) = E τ ∼ P θ ( τ ) [ ∑ t r ( s t , a t ) ] (9.3) \tag{9.3} \begin{aligned} J(\pi_{\theta}) = \underset{\tau \sim \pi_\theta}{E}[R(\tau)] & = P_{\theta}(\tau_{1})R(\tau_{1})+P_{\theta}(\tau_{2})R(\tau_{2})+\cdots \\ &=\int_\tau P_{\theta}(\tau) R(\tau) \\ &=E_{\tau \sim P_\theta(\tau)}[\sum_t r(s_t, a_t)] \end{aligned} J(πθ)=τπθE[R(τ)]=Pθ(τ1)R(τ1)+Pθ(τ2)R(τ2)+=τPθ(τ)R(τ)=EτPθ(τ)[tr(st,at)](9.3)
只要能求出梯度,就可以使用万能的梯度上升或下降的方法来求解对应的最优参数 θ ∗ \theta^* θ

目标是求关于参数 θ \theta θ 的梯度,而公式中的 R ( τ ) R(\tau) R(τ) θ \theta θ其实是没有关联的,因此在求解梯度的时候可以将这一项看作常数。

算法领域默认使用 log ⁡ x \log x logx 表示以 e e e 为底的对数即可。回到我们的问题,使用这个对数微分技巧,我们就可以将目标函数的梯度做一个转化,即式 ( 9.4 ) \text(9.4) (9.4)

∇ θ P θ ( τ ) = P θ ( τ ) ∇ θ P θ ( τ ) P θ ( τ ) = P θ ( τ ) ∇ θ log ⁡ P θ ( τ ) (9.4) \tag{9.4} \nabla_\theta P_{\theta}(\tau)= P_{\theta}(\tau) \frac{\nabla_\theta P_{\theta}(\tau)}{P_{\theta}(\tau) }= P_{\theta}(\tau) \nabla_\theta \log P_{\theta}(\tau) θPθ(τ)=Pθ(τ)Pθ(τ)θPθ(τ)=Pθ(τ)θlogPθ(τ)(9.4)
根据 P θ ( τ ) = p ( s 0 ) ∏ t = 0 T π θ ( a t ∣ s t ) p ( s t + 1 s t , a t ) P_{\theta}(\tau)=p(s_{0}) \prod_{t=0}^{T} \pi_{\theta}\left(a_{t} | s_{t}\right) p\left(s_{t+1} s_{t}, a_{t}\right) Pθ(τ)=p(s0)t=0Tπθ(atst)p(st+1st,at),再根据对数公式 l o g ( a b ) = l o g a + l o g b log (ab) = log a + log b log(ab)=loga+logb,即可求出式 ( 9.5 ) \text(9.5) (9.5)

log ⁡ P θ ( τ ) = log ⁡ p ( s 0 ) + ∑ t = 0 T ( log ⁡ π θ ( a t ∣ s t ) + log ⁡ p ( s t + 1 ∣ s t , a t ) ) (9.5) \tag{9.5} \log P_{\theta}(\tau)= \log p(s_{0}) + \sum_{t=0}^T(\log \pi_{\theta}(a_t \mid s_t)+\log p(s_{t+1} \mid s_t,a_t)) logPθ(τ)=logp(s0)+t=0T(logπθ(atst)+logp(st+1st,at))(9.5)
发现 log ⁡ P θ ( τ ) \log P_{\theta}(\tau) logPθ(τ)展开之后只有中间的项 log ⁡ π θ ( a t ∣ s t ) \log \pi_{\theta}(a_t \mid s_t) logπθ(atst)跟参数 θ \theta θ有关,也就是说其他项关于 θ \theta θ的梯度为 0 0 0 ,即式 ( 9.6 ) \text(9.6) (9.6)

∇ θ log ⁡ P θ ( τ ) = ∇ θ log ⁡ ρ 0 ( s 0 ) + ∑ t = 0 T ( ∇ θ log ⁡ π θ ( a t ∣ s t ) + ∇ θ log ⁡ p ( s t + 1 ∣ s t , a t ) ) = 0 + ∑ t = 0 T ( ∇ θ log ⁡ π θ ( a t ∣ s t ) + 0 ) = ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) (9.6) \tag{9.6} \begin{aligned} \nabla_\theta \log P_{\theta}(\tau) &=\nabla_\theta \log \rho_0\left(s_0\right)+\sum_{t=0}^T\left(\nabla_\theta \log \pi_\theta\left(a_t \mid s_t\right)+\nabla_\theta \log p\left(s_{t+1} \mid s_t, a_t\right)\right) \\ &=0+\sum_{t=0}^T\left(\nabla_\theta \log \pi_\theta\left(a_t \mid s_t\right)+0\right) \\ &=\sum_{t=0}^T \nabla_\theta \log \pi_\theta\left(a_t \mid s_t\right) \end{aligned} θlogPθ(τ)=θlogρ0(s0)+t=0T(θlogπθ(atst)+θlogp(st+1st,at))=0+t=0T(θlogπθ(atst)+0)=t=0Tθlogπθ(atst)(9.6)

\qquad 现在我们就可以很方便地求出目标函数的梯度了,如式 ( 9.7 ) \text(9.7) (9.7) 所示。

∇ θ J ( π θ ) = ∇ θ E τ ∼ π θ [ R ( τ ) ] = ∇ θ ∫ τ P θ ( τ ) R ( τ ) = ∫ τ ∇ θ P θ ( τ ) R ( τ ) = ∫ τ P θ ( τ ) ∇ θ log ⁡ P θ ( τ ) R ( τ ) = E τ ∼ π θ [ ∇ θ log ⁡ P θ ( τ ) R ( τ ) ] = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log ⁡ π θ ( a t ∣ s t ) R ( τ ) ] (9.7) \tag{9.7} \begin{aligned} \nabla_\theta J\left(\pi_\theta\right) &=\nabla_\theta \underset{\tau \sim \pi_\theta}{\mathrm{E}}[R(\tau)] \\ &=\nabla_\theta \int_\tau P_{\theta}(\tau) R(\tau) \\ &=\int_\tau \nabla_\theta P_{\theta}(\tau) R(\tau) \\ &=\int_\tau P_{\theta}(\tau) \nabla_\theta \log P_{\theta}(\tau) R(\tau) \\ &=\underset{\tau \sim \pi_\theta}{\mathrm{E}}\left[\nabla_\theta \log P_{\theta}(\tau) R(\tau)\right]\\ &= \underset{\tau \sim \pi_\theta}{\mathrm{E}}\left[\sum_{t=0}^T \nabla_\theta \log \pi_\theta\left(a_t \mid s_t\right) R(\tau)\right] \end{aligned} θJ(πθ)=θτπθE[R(τ)]=θτPθ(τ)R(τ)=τθPθ(τ)R(τ)=τPθ(τ)θlogPθ(τ)R(τ)=τπθE[θlogPθ(τ)R(τ)]=τπθE[t=0Tθlogπθ(atst)R(τ)](9.7)
公式中出现累乘的项时,我们通常都会取对数简化,因为根据对数公式的性质可以将累乘的项转换成累加的项,这样一来问题会更加便于处理。

区别

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.REINFORCE算法

不必采样所有的轨迹,而是采样一部分且数量足够多的轨迹,然后利用这些轨迹的平均值来近似求解目标函数的梯度。这种方法就是蒙特卡洛策略梯度算法,也称作 REINFORCE \text{REINFORCE} REINFORCE 算法。

REINFORCE \text{REINFORCE} REINFORCE 算法的做法是每次采样 N N N 条轨迹,然后对这 N N N 条轨迹的梯度求平均,即式 ( 9.8 ) \text(9.8) (9.8)

∇ J θ ≈ 1 N ∑ n = 1 N ∑ t = 1 T n G t n ∇ log ⁡ π θ ( a t n ∣ s t n ) (9.8) \tag{9.8} \nabla J_{\theta} \approx \frac{1}{N} \sum_{n=1}^{N} \sum_{t=1}^{T_{n}} G_{t}^{n} \nabla \log \pi_{\theta}\left(a_{t}^{n} \mid s_{t}^{n}\right) JθN1n=1Nt=1TnGtnlogπθ(atnstn)(9.8)
注意这里我们把奖励函数换成了带有折扣因子的回报 G t n = ∑ k = t T n γ k − t r k n G_{t}^{n}=\sum_{k=t}^{T_{n}} \gamma^{k-t} r_{k}^{n} Gtn=k=tTnγktrkn,其中 T n T_n Tn 表示第 n n n 条轨迹的长度, γ \gamma γ 表示折扣因子, r k n r_{k}^{n} rkn 表示第 n n n 条轨迹在第 k k k 步的奖励。
G t = ∑ k = t + 1 T γ k − t − 1 r k = r t + 1 + γ G t + 1 (9.9) \tag{9.9} \begin{aligned} G_{t} &=\sum_{k=t+1}^{T} \gamma^{k-t-1} r_{k} \\ &=r_{t+1}+\gamma G_{t+1} \end{aligned} Gt=k=t+1Tγkt1rk=rt+1+γGt+1(9.9)

4.策略梯度推到进阶

我们假定了目标是使得每回合的累积价值最大,因此用对应的总奖励 R ( τ ) R(\tau) R(τ) 或回报 G ( τ ) G(\tau) G(τ) 来求解或者说评估价值。但实际使用过程中我们会发现这种价值的评估方法并不是很稳定,因为每回合的累积奖励或回报会受到很多因素的影响,比如回合的长度、奖励的稀疏性等等。

4.1平稳分布

马尔科夫链,在处于平稳分布下,我们会发现一些规律,一个是任意两个状态之间都是互相连通的,即任意两个状态之间都可以通过一定的步骤到达,这个性质称为连通性 connectedness \text{connectedness} connectedness)。

切换到其他状态的概率就变成 0 0 0 了,这个时候连通性就不成立了,我们把这个状态也叫做吸收状态

马尔可夫链中,终止态不是吸收状态。只是方便计算把他的价值函数定义为0。类似于游戏中我们死亡并不代表结束,可以重新开始。

任意状态在平稳分布下的概率都是一样的,即任意状态的概率都是相等的,这个性质称为细致平稳 detailed balance \text{detailed balance} detailed balance)。

一个马尔科夫链满足连通性,那么它一定满足细致平稳性,反之亦然。

马尔可夫链的平稳分布了,对于任意马尔可夫链,如果满足以下两个条件:

  • 非周期性:由于马尔可夫链需要收敛,那么就一定不能是周期性的,实际上我们处理的问题基本上都是非周期性的,这点不需要做过多的考虑。
  • 状态连通性:即存在概率转移矩阵 P P P,能够使得任意状态 s 0 s_0 s0经过有限次转移到达状态 s s s,反之亦然。

\qquad 这样我们就可以得出结论,即该马氏链一定存在一个平稳分布,我们用 d π ( s ) d^{\pi}(s) dπ(s)表示,可得到式 ( 9.11 ) \text(9.11) (9.11)

d π ( s ) = lim ⁡ t → ∞ P ( s t = s ∣ s 0 , π θ ) (9.11) \tag{9.11} d^\pi(s)=\lim _{t \rightarrow \infty} P\left(s_t=s \mid s_0, \pi_\theta\right) dπ(s)=tlimP(st=ss0,πθ)(9.11)

4.2基于平稳分布的策略梯度推导

J ( θ ) = ∑ s ∈ S d π ( s ) V π ( s ) = ∑ s ∈ S d π ( s ) ∑ a ∈ A π θ ( a ∣ s ) Q π ( s , a ) (9.12) \tag{9.12} J(\theta)=\sum_{s \in \mathcal{S}} d^\pi(s) V^\pi(s)=\sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} \pi_\theta(a \mid s) Q^\pi(s, a) J(θ)=sSdπ(s)Vπ(s)=sSdπ(s)aAπθ(as)Qπ(s,a)(9.12)

\qquad 同样可以利用对数微分技巧求得对应的梯度,如式 ( 9.13 ) \text(9.13) (9.13) 所示。

∇ θ J ( θ ) ∝ ∑ s ∈ S d π ( s ) ∑ a ∈ A Q π ( s , a ) ∇ θ π θ ( a ∣ s ) = ∑ s ∈ S d π ( s ) ∑ a ∈ A π θ ( a ∣ s ) Q π ( s , a ) ∇ θ π θ ( a ∣ s ) π θ ( a ∣ s ) = E π θ [ Q π ( s , a ) ∇ θ log ⁡ π θ ( a ∣ s ) ] (9.13) \tag{9.13} \begin{aligned} \nabla_\theta J(\theta) & \propto \sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} Q^\pi(s, a) \nabla_\theta \pi_\theta(a \mid s) \\ &=\sum_{s \in \mathcal{S}} d^\pi(s) \sum_{a \in \mathcal{A}} \pi_\theta(a \mid s) Q^\pi(s, a) \frac{\nabla_\theta \pi_\theta(a \mid s)}{\pi_\theta(a \mid s)} \\ &=\mathbb{E}_{\pi_{\theta}}\left[Q^\pi(s, a) \nabla_\theta \log \pi_\theta(a \mid s)\right] \end{aligned} θJ(θ)sSdπ(s)aAQπ(s,a)θπθ(as)=sSdπ(s)aAπθ(as)Qπ(s,a)πθ(as)θπθ(as)=Eπθ[Qπ(s,a)θlogπθ(as)](9.13)

5.策略函数的设计

5.1离散动作的策略函数

将动作概率分布转化到有正有负,采用Softmax函数来处理,如下
π θ ( s , a ) = e ϕ ( s , a ) T θ ∑ b e ϕ ( s , b ) T (9.14) \tag{9.14} \pi_\theta(s, a)=\frac{e^{\phi(s, a)^T} \theta}{\sum_b e^{\phi(s, b)^T}} πθ(s,a)=beϕ(s,b)Teϕ(s,a)Tθ(9.14)
其中 ϕ ( s , a ) \phi(s, a) ϕ(s,a) 就是模型前面一层的输出。对应的梯度也可方便求得,如式 ( 9.15 ) \text(9.15) (9.15) 所示。

∇ θ log ⁡ π θ ( s ∣ a ) = ϕ ( s , a ) − E π θ [ ϕ ( s , . ) ] (9.15) \tag{9.15} \nabla_\theta \log \pi_\theta(s \mid a)=\phi(s, a)-\mathbb{E}_{\pi_\theta}[\phi(s, .)] θlogπθ(sa)=ϕ(s,a)Eπθ[ϕ(s,.)](9.15)

\qquad 由于右边一项 E π θ [ ϕ ( s , . ) ] \mathbb{E}_{\pi_\theta}[\phi(s, .)] Eπθ[ϕ(s,.)] 表示的是动作层所有输出之和,也就是概率分布之和,即等于1,因此我们可以将其去掉,这样一来就可以得到更简单的梯度表达式,如式 ( 9.16 ) \text(9.16) (9.16) 所示。

∇ θ log ⁡ π θ ( s ∣ a ) = ϕ ( s , a ) (9.16) \tag{9.16} \nabla_\theta \log \pi_\theta(s \mid a)= \phi(s, a) θlogπθ(sa)=ϕ(s,a)(9.16)

\qquad 在实战中 ϕ ( s , a ) \phi(s, a) ϕ(s,a) Softmax \text{Softmax} Softmax 函数层 一般是合并在一起的,即直接在模型最后一层输出 Softmax \text{Softmax} Softmax 函数的结果,即概率分布 p θ ( s , a ) p_\theta(s, a) pθ(s,a),这样就得到了最终的策略梯度,即式 ( 9.17 ) \text(9.17) (9.17)

∇ θ log ⁡ π θ ( s ∣ a ) = log ⁡ p θ ( s , a ) (9.17) \tag{9.17} \nabla_\theta \log \pi_\theta(s \mid a)= \log p_\theta(s, a) θlogπθ(sa)=logpθ(s,a)(9.17)
logits-p \text{logits-p} logits-p ,对应 p θ ( s , a ) p_\theta(s, a) pθ(s,a) 叫做 probs \text{probs} probs

5.2连续动作的策略函数

对于连续动作空间,策略对应的动作从高斯分布 N ( ϕ ( s ) T θ , σ 2 ) {\mathbb{N}}\left(\phi(s)^{\mathbb{T}} \theta, \sigma^2\right) N(ϕ(s)Tθ,σ2) ,对应梯度求得如下
∇ θ log ⁡ π θ ( s , a ) = ( a − ϕ ( s ) T θ ) ϕ ( s ) σ 2 (9.18) \tag{9.18} \nabla_\theta \log \pi_\theta(s, a)=\frac{\left(a-\phi(s)^T \theta\right) \phi(s)}{\sigma^2} θlogπθ(s,a)=σ2(aϕ(s)Tθ)ϕ(s)(9.18)
动作从高斯分布 N ( ϕ ( s ) T θ , σ 2 ) {\mathbb{N}}\left(\phi(s)^{\mathbb{T}} \theta, \sigma^2\right) N(ϕ(s)Tθ,σ2) ,对应梯度求得如下
∇ θ log ⁡ π θ ( s , a ) = ( a − ϕ ( s ) T θ ) ϕ ( s ) σ 2 (9.18) \tag{9.18} \nabla_\theta \log \pi_\theta(s, a)=\frac{\left(a-\phi(s)^T \theta\right) \phi(s)}{\sigma^2} θlogπθ(s,a)=σ2(aϕ(s)Tθ)ϕ(s)(9.18)
只需要在模型最后一层输出两个值,一个是均值,一个是方差,然后再用这两个值来构建一个高斯分布,然后采样即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值