【RL强化学习】Policy-Based Reinforcement Learning 策略学习
概述
既然是学习算法,那就离不开网络和迭代
策略学习的核心就是用神经网络去逼近真实的策略函数
Usepolicynetworkπ(a∣s;θ)toapproximateπ(a∣s)Use\ policy\ network\ \pi(a \mid s;\theta)\ to\ approximate\ \pi(a \mid s) Use policy network π(a∣s;θ) to approximate π(a∣s)
具体实现
pollicy network主要干四件事:
- 接受当前状态
- 通过某种网络提取当前状态的特征向量(压缩数据、提取重要信息)
- 将当前状态对应的特征向量通过类似于稠密连接、多层感知机等网络,输出策略中包含的所有action的特征数
- 最后用softmax对特征数做归一化,得到最终的概率(即当前状态下,决策的概率密度函数)
其中,决策的概率密度函数满足
∑a∈Aπ(a∣s;θ)=1\sum_{a \in \mathcal{A}}\pi(a \mid s;\theta)=1 a∈A∑π(a∣s;θ)=1
在基础概念一章中,我讲过状态价值函数 state-value function,它表示的是在状态 sts_tst下,使用策略π\piπ的回报期望
那么在这里可以将他扩展为
Vπ(st;θ)=EA[Qπ(st,A)]=∑aπ(a∣s;θ)∑s′P(s′∣s,a)[R(s,a,s′)+γVπ(s′;θ)]V_{\pi}(s_t;\theta)=\mathbb{E_A}[Q_{\pi}(s_t, A)]=\sum_{a}\pi(a|s;\theta)\sum_{s'}{P(s'|s,a)}\Bigl[R(s,a,s')+\gamma V_{\pi}(s';\theta)\Bigr]Vπ(st;θ)=EA[Qπ(st,A)]=a∑π(a∣s;θ)s′∑P(s′∣s,a)[R(s,a,s′)+γVπ(s′;θ)]
就此引出策略学习的核心:
- 通过网络的迭代,使得Vπ(st;θ)V_{\pi}(s_t;\theta)Vπ(st;θ)尽可能的大
- 公式表达:策略期望回报 J(θ)=ES[V(S;θ)]策略期望回报\ J(\theta)=\mathbb{E}_S[V(S;\theta)]策略期望回报 J(θ)=ES[V(S;θ)] , Learn θ\thetaθ that maximizes J(θ)J(\theta)J(θ)
- 说人话就是:通过优化策略网络参数,使agent无论处于什么状态下,获得的期望回报最大(每个状态下都有对应的状态价值,对所有状态价值进行概率加权求和,就是我们的J(θ)J(\theta)J(θ))
- 此时J的值仅和网络参数相关,参数越好,agent最终能获得的回报期望就越大
Policy gradient ascent
策略梯度算法
θ←θ+β⋅∂V(s;θ)∂θ\theta \leftarrow \theta + \beta \cdot \frac{\partial V(s;\theta)}{\partial \theta} θ←θ+β⋅∂θ∂V(s;θ)
思路:每观测到一个状态sss,都通过上述公式的梯度上升来更新θ\thetaθ
其中,学习率β>0\beta > 0β>0
众所周知,有一个常用的学习算法叫做随机梯度下降,它常用于线性回归,或者一些简单模型的拟合上;那么在这里不使用J对θ\thetaθ的导数,反而使用V对θ\thetaθ的导数的原因与此类似,可以认为V就是对J的一次小批量采样,且具有随机性,用来做学习的效果更好(随机小批量的优点)
另外,关于什么时候梯度上升,什么时候梯度下降
如果认为被求偏导的函数越大越好,那就是梯度上升,比如这里的状态价值函数
如果认为被求偏导的函数越小越好,那就是梯度下降,比如损失函数
Policy gradient
具体推导见这篇文章
这一部分在b站的【强化学习】策略梯度方法-策略梯度定理中,讲的还不错,最后也给出了具体的通项公式:
∇J(θ)≡∂V(s;θ)∂θ=∑x∈S∑k=0∞Pr(s→x,k,π)∑a∂π(a∣x)∂θqπ(x,a),令:η(s)=∑k=0∞Pr(s→x,k,π),μ用于对∑μ做归一化,则有 ∂V(s;θ)∂θ∝∑s∈Sμ(s)⋅∑a∇θπ(a∣s)qπ(s,a),=Eπ[∑a∇π(a∣St)⋅qπ(St,a)]=Eπ[∑aπ(a∣St)∇π(a∣St)π(a∣St)⋅qπ(St,a)]=Eπ[∇π(A∣St)π(A∣St)⋅qπ(St,A)],(∇logπ(At∣St)=∇π(A∣St)π(A∣St))=Eπ[∇logπ(At∣St)⋅qπ(St,A)]=Eπ[Gt⋅∇logπ(At∣St)]\nabla J(\theta)\equiv \frac{\partial V(s;\theta)}{\partial \theta}=\sum_{x \in S}\sum_{k=0}^{\infty}P_r(s\rightarrow x,k,\pi)\sum_a\frac{\partial \pi(a\mid x)}{\partial \theta}q_{\pi}(x,a), \\[0.4cm] 令:\eta(s)=\sum_{k=0}^{\infty}P_r(s\rightarrow x,k,\pi), \mu 用于对\sum \mu做归一化,\\[0.4cm] 则有\ \frac{\partial V(s;\theta)}{\partial \theta}\propto \sum_{s \in S}\mu(s) \cdot \sum_a \nabla_{\theta} \pi(a \mid s)q_{\pi}(s,a), \\[0.4cm] =\mathbb{E}_{\pi}\bigl[\sum_a \nabla \pi(a\mid S_t)\cdot q_{\pi}(S_t,a) \bigr]\\[0.4cm] =\mathbb{E}_{\pi}\bigl[\sum_a \pi(a\mid S_t) \frac{\nabla \pi(a\mid S_t)}{\pi(a\mid S_t)}\cdot q_{\pi}(S_t,a) \bigr]\\[0.4cm] =\mathbb{E}_{\pi}\bigl[\frac{\nabla \pi(A\mid S_t)}{\pi(A\mid S_t)}\cdot q_{\pi}(S_t,A) \bigr], \bigl(\nabla log \pi(A_t|S_t)=\frac{\nabla \pi(A\mid S_t)}{\pi(A\mid S_t)}\bigr) \\[0.4cm] =\mathbb{E}_{\pi}\bigl[\nabla log \pi(A_t|S_t)\cdot q_{\pi}(S_t,A) \bigr]\\[0.4cm] =\mathbb{E}_{\pi}\bigl[G_t \cdot \nabla log \pi(A_t|S_t) \bigr] ∇J(θ)≡∂θ∂V(s;θ)=x∈S∑k=0∑∞Pr(s→x,k,π)a∑∂θ∂π(a∣x)qπ(x,a),令:η(s)=k=0∑∞Pr(s→x,k,π),μ用于对∑μ做归一化,则有 ∂θ∂V(s;θ)∝s∈S∑μ(s)⋅a∑∇θπ(a∣s)qπ(s,a),=Eπ[a∑∇π(a∣St)⋅qπ(St,a)]=Eπ[a∑π(a∣St)π(a∣St)∇π(a∣St)⋅qπ(St,a)]=Eπ[π(A∣St)∇π(A∣St)⋅qπ(St,A)],(∇logπ(At∣St)=π(A∣St)∇π(A∣St))=Eπ[∇logπ(At∣St)⋅qπ(St,A)]=Eπ[Gt⋅∇logπ(At∣St)]
其中,第一行是通项公式,第二行是求解梯度方向的最简公式
Pr(s→x,k,π)P_r(s\rightarrow x,k,\pi)Pr(s→x,k,π)的意思是,agent遵循策略π\piπ,经过k步,从状态s转移到状态x的概率,它等价于∑aπ(a∣s)p(s′∣s,a)\sum_{a}\pi(a|s)p(s' \mid s,a)∑aπ(a∣s)p(s′∣s,a),其中∑a\sum_{a}∑a被隐藏在了使用策略π\piπ的k步里,而k→∞k \rightarrow \inftyk→∞则是为连续策略函数准备的,因为从一个状态过渡到另一个状态可以分解为无数次决策
将连加改期望是因为期望可以通过采样取平均的方式获得数据
注意上述公式中,所有的π\piπ都是关于θ\thetaθ的函数,上面的公式中全都省略了
Calculate Policy Gradient
-
针对离散系统(离散策略,即策略只能做出有限种action)
令f(a,θ)=∇θπ(a∣s)qπ(s,a)对每个决策的梯度求和:∂V(s;θ)∂θ=f(a2,θ)+f(a1,θ)⋯+f(an,θ)令f(a,\theta)=\nabla_{\theta} \pi(a \mid s)q_{\pi}(s,a) \\[0.4cm] 对每个决策的梯度求和:\frac{\partial V(s;\theta)}{\partial \theta}=f(a_2,\theta)+f(a_1,\theta)\dots +f(a_n,\theta) 令f(a,θ)=∇θπ(a∣s)qπ(s,a)对每个决策的梯度求和:∂θ∂V(s;θ)=f(a2,θ)+f(a1,θ)⋯+f(an,θ) -
针对连续策略
由于没有办法对一个神经网络做定积分求GtG_tGt,也就是期望,因此我们需要做蒙特卡洛近似,以试探这个期望的具体值- 按照策略函数pipipi,即action的概率密度函数做随机抽样
- 将每次抽样的结果a^\hat{a}a^代入g(a^,θ)=∇logπ(a^∣St)⋅qπ(St,a^)g(\hat{a},\theta)=\nabla log \pi(\hat{a}|S_t)\cdot q_{\pi}(S_t,\hat{a})g(a^,θ)=∇logπ(a^∣St)⋅qπ(St,a^)
- 对g(a^,θ)g(\hat{a},\theta)g(a^,θ)求期望,就是近似的∂V(s;θ)∂θ\frac{\partial V(s;\theta)}{\partial \theta}∂θ∂V(s;θ)
从中也可以看出,g(a^,θ)g(\hat{a},\theta)g(a^,θ)是对∂V(s;θ)∂θ\frac{\partial V(s;\theta)}{\partial \theta}∂θ∂V(s;θ)一次无偏估计
最后就是用得到的准确/近似梯度去更新网络参数
最后的问题
我们没有Qπ(s,a)Q_{\pi}(s,a)Qπ(s,a)的具体表达式,因此不能直接求得动作价值函数
通常有两个方案:
- 让程序根据策略π\piπ将系统执行到结束,并记录这过程中的所有奖励并求和;
- 用另一个网络去拟合Qπ(s,a)Q_{\pi}(s,a)Qπ(s,a),然后直接得出结果 而这就引出了下一个章节Actor-Critic 联合训练