本文是强化学习入门系列的第六篇,将介绍一种有别于前面Q-learning这些基于价值的算法——策略梯度。
Policy Gradient
即策略梯度,是一种Policy-based的方法。不同于Q-Learning等基于value的方法,策略梯度不需要计算value function,直接计算出随机策略,直接输出action。policy gradient 可以在一个连续分布上选取 action。策略梯度除了可以解决连续性问题,也适用于分幕式问题。分幕式可以理解为离散型问题。比如我们玩下棋游戏,棋子的上下左右移动这一动作是离散的,而在自动驾驶场景里面,汽车速度的变化是连续的,这也就对应连续型问题。
而在策略梯度算法中,两种问题考虑的性能指标有所不同:
- 分幕式问题:当前参数化策略下初始状态的价值函数
- 连续性问题:平均奖励
分幕式问题
我们知道 π ( a ∣ s ) \pi(a|s) π(a∣s) 表示状态s下选择动作a的概率,不同策略 π \pi π 下不同的状态,其状态价值函数 V π V_{\pi} Vπ 不同;同一状态下不同动作的动作价值函数 Q π Q_{\pi} Qπ 也不同。 G t G_t Gt 表示奖励的总和。
Q π ( s t , a t ) = E [ G t ∣ S t = s t , A t = a t ] V π ( s t , a t ) = E A [ Q π ( s t , A ) ] = ∑ a π ( a ∣ s t ) Q π ( s t , a ) \\ Q_{\pi}(s_t,a_t)=E[G_t|S_t=s_t,A_t=a_t] \\ V_{\pi}(s_t,a_t)=E_A[Q_{\pi}(s_t,A)]=\sum_a\pi(a|s_t)Q_{\pi}(s_t,a) Qπ(st,at)=E[Gt∣St=st,At=at]Vπ(st,at)=EA[Qπ(st,A)]=a∑π(a∣st)Qπ(st,a)
策略梯度使用神经网络来近似状态价值函数,我们引入神经网络的参数 θ \theta θ, θ \theta θ 其实就是决定了策略 π \pi π 。 Q ( s t , a ) Q(s_t,a) Q(st,a) 是考虑所有策略 π \pi π 后的可能的下一状态和动作的奖励的期望。又a在求和过程中被消掉,因此目标函数定义如下:
J ( θ ) = V π ( s ; θ ) = ∑ a π ( a ∣ s ; θ ) Q π ( s , a ) J(\theta) = V_{\pi}(s;\theta)=\sum_a\pi(a|s;\theta)Q_{\pi}(s,a) J(θ)=Vπ(s;θ)=a∑π(a∣s;θ)Qπ(s,a)
那么问题就变成如何学习出一个最优的 θ \theta θ 使得目标函数最大?
先对目标函数求梯度:
∇ J ( θ ) = ∑ a ∂ π ( a ∣ s ; θ ) ∂ θ Q π ( s , a ) = ∑ a π ( a ∣ s ; θ ) 1 π ( a ∣ s ; θ ) ∂ π ( a ∣ s ; θ ) ∂ θ Q π ( s , a ) = ∑ a π ( a ∣ s ; θ ) ∂ ln π ( a ∣ s ; θ ) ∂ θ Q π ( s , a ) \begin{aligned} \nabla J(\theta)=&\sum_a \dfrac{\partial \pi(a|s;\theta)}{\partial \theta} Q_{\pi}(s,a)\\ =&\sum_a \pi(a|s;\theta) \dfrac{1}{\pi(a|s;\theta)} \dfrac{\partial \pi(a|s;\theta)}{\partial \theta} Q_{\pi}(s,a) \\ =&\sum_a \pi(a|s;\theta) \dfrac{\partial \ln\pi(a|s;\theta)}{\partial \theta}Q_{\pi}(s,a) \\ \end{aligned} ∇J(θ)===a∑∂θ∂π(a∣s;θ)Qπ(s,a)a∑π(a∣s;θ)π(a∣s;θ)1∂θ∂π(a∣s;