1. 为什么需要策略梯度#
为什么我们需要 Policy-based,Value-based的局限在哪?
Value-based 核心做法是先学一个价值函数 Q(s,a),再用 argmaxaQ(s,a) 选动作。它的局限主要在某些场景里会变得很别扭。
一个是动作空间一旦是连续的或很大的离散空间,argmaxaQ(s,a) 就成了硬伤。离散动作还可以枚举,但动作维度一高就爆了。比如机器人的抬手角度就不是一个离散的值,我们没法对角度进行打分。
另一个是 Value-based 像先给每个动作打分,再选最高分,Policy-based 像直接学怎么出手,以及出手的概率。问题出在现实里不一定总是选唯一最高分这么简单。Value-based 本质上是一个确定性策略,比如在石头剪刀布的时候如果出石头赢过几次,石头的分就会很高,就会一直出石头。但是我们都知道最佳策略是各占 31 随机出。
而 Policy-based:不学打分直接学怎么做。他天然支持连续动作、策略直接、能随机、更适合复杂真实任务。
2. Policy-based#
Policy-based 直接优化策略,不再学习值函数去打分。
我们将策略参数化写成:
πθ(a∣s)意思是在在状态 s 下,采取动作 a 的概率是多少。也就是说,策略网络输出的不是一个分数,而是一整个动作概率分布。
然后定义一个目标函数
J(θ)表示当前策略 πθ(a∣s) 的表现(通常是期望累计回报),然后沿着让 J(θ) 变大的方向更新参数。
3.策略梯度#
与让损失函数下降的梯度下降方法相反,我们想让 J(θ) 变大就可以使用梯度上升的方法,这个就叫策略梯度。
OK,既然知道了我们的方法,我们定义我们的 J(θ) 为:
J(θ)=Eτ∼πθ[R(τ)]按当前策略 πθ 去跑轨迹 τ,得到一个总回报 R(τ),J(θ) 就是这些总回报期望。
参考 东川路第一可爱猫猫虫 的公式可能更好理解一些(这里致谢一下):
J(θ)=τ∑P(τ;θ)R(τ)也就是说采用 θ 策略时走轨迹 τ 的概率乘上走轨迹 τ 的累加奖励求和,其实跟上面是一样的。
要做梯度上升我们要先对他求个梯度:
∇θJ(πθ)=∇θEτ∼πθ[R(τ)]=∇θ∫τP(τ∣θ)R(τ)=∫τ∇θP(τ∣θ)R(τ)=∫τP(τ∣θ)∇θlogP(τ∣θ)R(τ)=Eτ∼πθ[∇θlogP(τ∣θ)R(τ)]∴∇θJ(πθ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)R(τ)]
4. Reinforce算法(蒙特卡罗策略梯度)#
我们有了梯度,就可以根据这个梯度做梯度上升:
∇θJ(πθ)=Eτ∼πθ[t=0∑T∇θlogπθ(at∣st)R(τ)]上面的梯度是一个期望,实际中我们用当前策略跑若干条轨迹,用样本均值近似这个期望:
g^=N1i=1∑Nt=0∑Ti∇θlogπθ(at(i)∣st(i))R(τi)然后按梯度上升更新参数:
θ←θ+αg^直到收敛。