Policy Gradient(∈Policy-Based)
基于概率
适用于Action-Space连续空间或离散空间
On-Policy
Monte-Carlo Update
- Question:Policy Gradient和Value-based的区别?
Value-based方法通过神经网络输出某state的所有行为的Q值,然后再通过Q值选行为;而Policy Gradient直接通过神经网络输出行为的概率。
Value-based与Policy Gradient的本质区别其实可以从它们的名字上看出来。Value-based是基于“值”的方法,也就是直接基于Reward,而Reward直接来自于环境,与模型无关,不可导,无法利用梯度下降去更新模型参数,所以只能利用一些基于值的数学上的优化方法;而Policy Gradient引入了梯度,使得模型可以用梯度下降去更新,虽然在Policy Gradient中也用到了Reward,但在这里Reward起到的不是梯度的含义,而是一种“Scale”的含义,引导梯度的方向与大小,真正的梯度来自于Policy,也就是模型的输出
- Question:Policy Gradient神经网络预测输出动作概率,损失函数如何计算?
DQN那种方式的损失函数还有办法定义与计算,即 Q T a r g e t − Q P r e d i c t Q_{Target} - Q_{Predict} QTarget−QPredict。而Policy Gradient其实并没有真正意义上的“误差(Loss)”概念,因为环境样本并没有标签。Policy Gradient是通过Reward进行反向传播更新参数的,简单来说就是根据当前选择的action带来的Reward的大小作为“损失”来进行反向传播
- Question:Policy Gradient如何输出Action-Space连续的动作?
Answer:输出加分布,如正态分布等
- Policy Gradient通式
g = E [ ∑ t = 0 ∞ Ψ t ∇ θ log π θ ( a t ∣ s t ) ] \bm{ g=\mathbb{E}\left[\sum_{t=0}^{\infty} \Psi_{t} \nabla_{\theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right)\right] } g=E[t=0∑∞Ψt∇θlogπθ(at∣st)]
或
∇ θ J ( π θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) R ( τ ) ] \bm{ \nabla_{\theta} J\left(\pi_{\theta}\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] } ∇θJ(πθ)=τ∼πθE[t=0∑T∇θlogπθ(at∣st)R(τ)]
其中, Ψ t \Psi_{t} Ψt或 R ( τ ) R(\tau) R(τ)可以为多种函数,例如:Advantage Function、Value Function等-
∇ θ log π θ ( a t ∣ s t ) \nabla_{\theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right) ∇θlogπθ(at∣st)是状态 s t s_t st情况下取到行为 a t a_t at的梯度方向,如果 θ θ θ沿着该方向更新,则相当于提升了行为 a t a_t at的概率,反之亦然。
- 对于任意函数,沿着函数上某一点的梯度方向走(梯度上升)函数值一定会在某个邻域内增大;反之,逆着梯度方向走(梯度下降)函数值一定会在某个邻域内减小
-
而 Ψ t \Psi_{t} Ψt或 R ( τ ) R(\tau) R(τ)决定了参数 θ θ θ更新的方向与程度
-
REINFORCE(VPG)
Paper : Benchmarking Deep Reinforcement Learning for Continuous Control
REINFORCE(Vanilla Policy Gradient)
- 核心公式:
∇ θ J ( π θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) A π θ ( s t , a t ) ] \bm{ \nabla_{\theta} J\left(\pi_{\theta}\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) A^{\pi_{\theta}}\left(s_{t}, a_{t}\right)\right] } ∇θJ(πθ)=τ∼πθE[t=0∑T∇θlogπθ(at∣st)Aπθ(st,at)]
θ k + 1 = θ k + α ∇ θ J ( π θ k ) \bm{ \theta_{k+1}=\theta_{k}+\alpha \nabla_{\theta} J\left(\pi_{\theta_{k}}\right) } θk+1=θk+α∇θJ(πθk)
-
参数更新公式:
θ ← θ + α ∇ θ log π θ ( s t , a t ) v t \bm{ \theta \leftarrow \theta+\alpha \nabla_{\theta} \log \pi_{\theta}\left(s_{t}, a_{t}\right) v_{t} } θ←θ+α∇θlogπθ(st,at)vt
其中 α α α为学习率, ∇ θ \nabla_{\theta} ∇θ为梯度求导, π θ ( s t , a t ) \pi_{\theta}\left(s_{t}, a_{t}\right) πθ(st,at)表示Policy,在这里表示神经网络输出的行为概率,对概率取log是为了训练更稳定, v t v_t vt表示 f ( r e w a r d ) f(reward) f(reward)- 从更新公式就能看出,“损失函数”公式应为:
log π θ ( s t , a t ) v t \log \pi_{\theta}\left(s_{t}, a_{t}\right) v_{t} logπθ(st,at)vt
- 从更新公式就能看出,“损失函数”公式应为:
-
注意:VPG输出的是选择各个行为的概率,并不是一定选择概率最高的那个行为,而是根据各行为的概率选择行为
- 例如:输出概率[0.6, 0.1, 0.3],选择行为时,会根据各行为的概率随机选择,即有60%的概率选择行为-1,10%的概率选择行为-2,30%的概率选择行为-3(有点ε-greedy的究极进化版的意思)
优势函数(Advantage Function)
Advantage Function
-
标准定义:
A π ( s , a ) = Q π ( s , a ) − V π ( s ) \bm{ A^{\pi}(s, a)=Q^{\pi}(s, a)-V^{\pi}(s) } Aπ(s,a)=Qπ(s,a)−Vπ(s)
其中, V π ( s ) V^{\pi}(s) Vπ(s)为状态值函数(State Value Function), Q π ( s , a ) Q^{\pi}(s, a) Qπ(s,a)为状态-动作值函数(State-Action Value Function,即Q函数) -
状态值函数(State Value Function)
-
代表某一State的综合重要程度
-
该State下所有Action的Q值平均值
-
-
优势函数(Advantage Function)
-
代表某一特定state下,各个action的合理性
-
(同一State的)优势函数均值为0(人为限制)
-
优势函数直接给出了某一动作A的性能与当前State下所有可能动作的性能的均值的差值
-
若该差值(优势)大于0,说明动作A优于平均,是个合理的选择
-
若该差值(优势)小于0,说明动作A次于平均,不是个合理的选择
-
-