一、策略函数

策略函数 π(a∣s)\pi(a|s) 的本质是一个概率密度函数(Probability Density Function, PDF)。它将从环境观察到的状态 ss 作为输入,输出所有动作中每个动作的概率。在需要执行动作时,就从这些动作概率中随机抽取一个动作来执行。

二、策略网络

因为从环境观察到的状态 ss 常常有无数多种,所以可以使用神经网络 π(a∣s;θ)\pi(a|s; \theta) 来近似策略函数 π(a∣s)\pi({a|s}),其中 θ\theta 是神经网络的参数。神经网络 π(a∣s;θ)\pi(a|s; \theta) 就是策略网络。

因为策略网络输出的是各个动作的概率,而各个动作概率的总和应该是1,所以策略网络最后的激活函数通常是 softmax 以保证策略网络输出值的总和为1。

三、如何训练策略网络

根据状态价值函数的定义有(为便于推导,假定动作是离散的):

Vπ(st)=EA[Qπ(st,A)]=∑aπ(a∣st)⋅Qπ(st,a)V_{\pi}(s_t) = \mathbb{E}_A[Q_{\pi}(s_t, A)] = \sum_a \pi(a | s_t) \cdot Q_{\pi}(s_t, a)

使用神经网络 π(a∣s;θ)\pi(a|s; \theta) 来近似策略函数 π(a∣s)\pi({a|s}) 得到:

V(s;θ)=∑aπ(a∣s;θ)⋅Qπ(s,a)V(s; \theta) = \sum_a \pi(a | s; \theta) \cdot Q_{\pi}(s, a)

我们知道,当找到最优价值函数时,就解决了马尔科夫决策问题。即当我们找到一个策略网络的参数值 θ^\hat{\theta} 使得 V(s;θ^)V(s; \hat{\theta}) 的值最大,我们就找到了一个最优的策略网络。

所以,令:

J(θ)=Es[V(s;θ)]J(\theta) = \mathbb{E}_s[V(s; \theta)]

可以使用 梯度上升 方法来更新策略网络的参数值 θ\theta :

  1. 从环境观察到的状态 ss 。
  2. 更新策略网络( β\beta 是学习率) θ←θ+β⋅∂V(s;θ)∂θ\theta \leftarrow \theta + \beta \cdot \frac{\partial V(s; \theta)}{\partial \theta}

四、策略梯度

策略梯度就是使用神经网络 π(a∣s;θ)\pi(a|s; \theta) 来近似策略函数 π(a∣s)\pi({a|s}) 后得到的状态价值函数对神经网络参数 θ\theta 的导数,即 ∂V(s;θ)∂θ\frac{\partial V(s; \theta)}{\partial \theta} 。

∂V(s;θ)∂θ=∂∑aπ(a∣s;θ)⋅Qπ(s,a)∂θ=∑a∂π(a∣s;θ)⋅Qπ(s,a)∂θ(虽然不准确,但是为了简化推导,假设 Qπ(s,a) 不依赖于 θ)=∑a∂π(a∣s;θ)∂θ⋅Qπ(s,a)(链式求导法则)=∑aπ(a∣s;θ)⋅∂log⁡π(a∣s;θ)∂θ⋅Qπ(s,a)=EA∼π(⋅∣s;θ)[∂log⁡π(A∣s;θ)∂θ⋅Qπ(s,A)]\begin{aligned} \frac{\partial V(s; \theta)}{\partial \theta} & = \frac{\partial \sum_a \pi(a | s; \theta) \cdot Q_{\pi}(s, a)}{\partial \theta} \\ & = \sum_a \frac{\partial \pi(a | s; \theta) \cdot Q_{\pi}(s, a)}{\partial \theta} \\ & \text{(虽然不准确,但是为了简化推导,假设 }Q_{\pi}(s, a)\text{ 不依赖于 }\theta\text{)} \\ & = \sum_a \frac{\partial \pi(a | s; \theta)}{\partial \theta} \cdot Q_{\pi}(s, a) \\ & \text{(链式求导法则)} \\ & = \sum_a \pi(a | s; \theta) \cdot \frac{\partial \log \pi(a | s; \theta)}{\partial \theta} \cdot Q_{\pi}(s, a) \\ & = \mathbb{E}_{A \sim \pi(\cdot | s; \theta)} \left[ \frac{\partial \log \pi(A | s; \theta)}{\partial \theta} \cdot Q_{\pi}(s, A) \right] \\ \end{aligned}
  1. 上面的计算过程中,假设了 Qπ(s,a)Q_{\pi}(s, a) 不依赖于 θ\theta ,这是为了简化推导,便于理解。实际上即使将 Qπ(s,a)Q_{\pi}(s, a) 对于 θ\theta 的导数也考虑进去,得到的结果也是一样的。
  2. 链式求导法则 ∂log⁡[π(θ)]∂θ=1π(θ)⋅∂π(θ)∂θ\frac{\partial \log [\pi (\theta)]}{\partial \theta} = \frac{1}{\pi (\theta)} \cdot \frac{\partial \pi (\theta)}{\partial \theta}

即:

∂V(s;θ)∂θ=∑a∂π(a∣s;θ)∂θ⋅Qπ(s,a)(4.1)\frac{\partial V(s; \theta)}{\partial \theta} = \sum_a \frac{\partial \pi(a | s; \theta)}{\partial \theta} \cdot Q_{\pi}(s, a) \tag{4.1} ∂V(s;θ)∂θ=EA∼π(⋅∣s;θ)[∂log⁡π(A∣s;θ)∂θ⋅Qπ(s,A)](4.2)\frac{\partial V(s; \theta)}{\partial \theta} = \mathbb{E}_{A \sim \pi(\cdot | s; \theta)} \left[ \frac{\partial \log \pi(A | s; \theta)}{\partial \theta} \cdot Q_{\pi}(s, A) \right] \tag{4.2}

五、计算策略梯度

5.1 离散动作

如果动作是离散的,比如动作空间是 A∈{"left","right","fire"}\mathcal{A} \in \{ \text{"left"}, \text{"right"}, \text{"fire"} \}。可以使用 公式4.1 :

∂V(s;θ)∂θ=∑a∂π(a∣s;θ)∂θ⋅Qπ(s,a)(4.1)\frac{\partial V(s; \theta)}{\partial \theta} = \sum_a \frac{\partial \pi(a | s; \theta)}{\partial \theta} \cdot Q_{\pi}(s, a) \tag{4.1}
  1. 对每个动作 a∈Aa \in \mathcal{A} ,计算

    f(a,θ)=∂π(a∣s;θ)∂θ⋅Qπ(s,a)\mathbf{f}(a, \theta) = \frac{\partial \pi(a | s; \theta)}{\partial \theta} \cdot Q_{\pi}(s, a)
  2. 计算策略梯度

    ∂V(s;θ)∂θ=f("left",θ)+f("right",θ)+f("fire",θ)\frac{\partial V(s; \theta)}{\partial \theta} = \mathbf{f}(\text{"left"}, \theta) + \mathbf{f}(\text{"right"}, \theta) + \mathbf{f}(\text{"fire"}, \theta)

5.2 连续动作

如果动作是连续的,比如动作空间是 A=[0,1]\mathcal{A} = [0,1]。可以使用 公式4.2 :

∂V(s;θ)∂θ=EA∼π(⋅∣s;θ)[∂log⁡π(A∣s;θ)∂θ⋅Qπ(s,A)](4.2)\frac{\partial V(s; \theta)}{\partial \theta} = \mathbb{E}_{A \sim \pi(\cdot | s; \theta)} \left[ \frac{\partial \log \pi(A | s; \theta)}{\partial \theta} \cdot Q_{\pi}(s, A) \right] \tag{4.2}

因为直接求期望很难,所以可以对期望做蒙特卡洛(Monte Carlo)近似,步骤如下:

  1. 从概率密度函数 π(⋅∣s;θ)\pi(\cdot | s; \theta) 中随机抽样得到一个动作 a^\hat{a} 。

  2. 计算

    g(a^,θ)=∂log⁡π(a^∣s;θ)∂θ⋅Qπ(s,a^)\mathbf{g}(\hat{a}, \theta) = \frac{\partial \log \pi(\hat{a} | s; \theta)}{\partial \theta} \cdot Q_{\pi}(s, \hat{a})
    1. 显然有 EA[g(A,θ)]=∂V(s;θ)∂θ\mathbb{E}_A \left[ \mathbf{g}(A, \theta) \right]= \frac{\partial V(s; \theta)}{\partial \theta} 。
    2. 因为 a^\hat{a} 是从 π(⋅∣s;θ)\pi(\cdot | s; \theta) 中随机抽样得到的,所以 g(a^,θ)\mathbf{g}(\hat{a}, \theta) 是 ∂V(s;θ)∂θ\frac{\partial V(s; \theta)}{\partial \theta} 的一个无偏估计。
  3. 使用 g(a^,θ)\mathbf{g}(\hat{a}, \theta) 来近似 ∂V(s;θ)∂θ\frac{\partial V(s; \theta)}{\partial \theta} (蒙特卡洛近似)。

上面的这种方法对离散的动作也是有效的。

六、使用策略梯度来更新策略网络

完整的步骤如下:

  1. 从环境观察到的状态 sts_t 。
  2. 从概率密度函数 π(⋅∣st;θt)\pi(\cdot | s_t; \theta_t) 中随机抽样得到一个动作 ata_t 。
  3. 计算动作价值 qt≈Qπ(st,at)q_t \approx Q_{\pi}(s_t, a_t) 。
  4. 计算策略梯度 dθ,t=∂log⁡π(at∣st;θ)∂θ∣θ=θt\mathbf{d}_{\theta, t} = \frac{\partial \log \pi(a_t | s_t; \theta)}{\partial \theta} \mid_{\theta = {\theta}_t} 。
  5. 计算策略梯度的近似值 g(at,θt)=qt⋅dθ,t\mathbf{g}(a_t, {\theta}_t) = q_t \cdot \mathbf{d}_{\theta, t} 。
  6. 更新策略网络 θt+1=θt+β⋅g(at,θt)\theta_{t+1} = \theta_t + \beta \cdot \mathbf{g}(a_t, \theta_t) 。

在上面的步骤3中,计算 qtq_t 的方式有两种。

6.1 REINFORCE

使用观测到的 gtg_t 来代替 Qπ(st,at)Q_{\pi}(s_t, a_t) 。

  • 用策略网络 π(⋅∣st;θt)\pi(\cdot | s_t; \theta_t) 控制 agent 从游戏开始到游戏结束玩一局完整的游戏,得到游戏轨迹 s1,a1,r1,s2,a2,r2,⋯ ,sT,aT,rTs_1, a_1, r_1, s_2, a_2, r_2, \cdots , s_T, a_T, r_T 。
  • 计算所有时刻的折扣回报 gt=∑k=tTγk−trkg_t = \sum_{k=t}^T \gamma^{k-t} r_k 。
  • 因为 Qπ(st,at)=E[Gt]Q_\pi (s_t, a_t) = \mathbb{E}[G_t] ,所以可以使用折扣回报 gtg_t 来近似 Qπ(st,at)Q_\pi (s_t, a_t) ,即 qt=gtq_t = g_t 。

6.2 Actor-Critic Method

使用神经网络来近似 Qπ(st,at)Q_{\pi}(s_t, a_t)。

我们已经使用神经网络 π(a∣s;θ)\pi(a|s; \theta) 来近似策略函数 π(a∣s)\pi({a|s}),其中 θ\theta 是神经网络的参数。同时,我们再使用神经网络 q(s,a;w)q(s,a;\mathbf{w}) 来近似价值函数 Qπ(s,a)Q_{\pi}(s, a),其中 w\mathbf{w} 是神经网络的参数。

V(s;θ,w)=∑aπ(a∣s;θ)⋅qπ(s,a;w)V(s; \theta, \mathbf{w}) = \sum_a \pi(a | s; \theta) \cdot q_{\pi}(s, a; \mathbf{w})

训练时,策略网络 π(a∣s;θ)\pi(a|s; \theta) 相当于运动员(Actor),而价值网络 q(s,a;w)q(s,a;\mathbf{w}) 相当于裁判(Critic):

  • 训练 Actor 的目的是让 Critic 的打分尽可能的高,即更新策略网络 π(a∣s;θ)\pi(a|s; \theta) 使状态价值 V(s;θ,w)V(s; \theta, \mathbf{w}) 的值增加。 Actor 依靠 Critic 的打分来改进自己。
  • 而训练 Critic 的目的则是让它对 Actor 的打分更准确,即更新价值网络 qπ(s,a;w)q_{\pi}(s, a; \mathbf{w}) 以能够更好的估计未来奖励的总和。 Critic 依靠环境给与的奖励来改进自己。
  • 当 Critic 的打分比较准确且 Actor 的得分都比较高时,就能得到一个比较好的策略网络了。

在推理时,只需要使用 Actor 来控制 agent 动作就可以了,推理时的不需要 Critic 。

算法完整的训练流程如下:

  1. 从环境获得状态 sts_t 输入策略网络 π(a∣s;θ)\pi(a|s; \theta) ,并从得到的动作概率 π(a∣st;θ)\pi(a|s_t; \theta) 中抽样得到动作 ata_t 。

  2. 在环境中执行动作 ata_t 并获取到新的环境状态 st+1s_{t+1} 和奖励 rtr_t 。

  3. 将新的环境状态 st+1s_{t+1} 输入策略网络中 π(a∣s;θ)\pi(a|s; \theta) 并随机抽样得到一个临时的动作 a^t+1\hat{a}_{t+1} (这个动作不会在环境中执行,仅用于更新价值网络)。

    随机抽样保证样本的无偏性,这样才能用来做蒙特卡洛近似,详见5.2 连续动作。

  4. 计算动作 ata_t 和 a^t+1\hat{a}_{t+1} 的动作价值

    qt=q(st,at;wt)q_t = q(s_t, a_t; \mathbf{w}_t) qt+1=q(st+1,a^t+1;wt)q_{t+1} = q(s_{t+1}, \hat{a}_{t+1}; \mathbf{w}_t)
  5. 计算 TD error

    δt=qt−(rt+γ⋅qt+1){\delta}_t = q_t - (r_t + \gamma \cdot q_{t+1})
  6. 对价值网络 q(s,a;w)q(s,a;\mathbf{w}) 求导

    dw,t=∂q(st,at;w)∂w∣w=wt\mathbf{d}_{\mathbf{w}, t} = \frac{\partial q(s_t, a_t; \mathbf{w})}{\partial \mathbf{w}} \mid_{\mathbf{w} = \mathbf{w}_t}
  7. 使用时序差分学习来更新价值网络( α\alpha 是学习率)

    wt+1=wt−α⋅δt⋅dw,t\mathbf{w}_{t+1} = \mathbf{w}_t - \alpha \cdot {\delta}_t \cdot \mathbf{d}_{\mathbf{w}, t}

    其中 δt⋅dw,t{\delta}_t \cdot \mathbf{d}_{\mathbf{w}, t} 是 TD error δt\delta_t 的均方差关于参数 w\mathbf{w} 的导数

    ∂δt2/2∂w=δt⋅dw,t\frac{\partial \delta_t ^2 / 2}{\partial \mathbf{w}} = \delta_t \cdot \mathbf{d}_{\mathbf{w}, t}
  8. 对策略网络 π(a∣s;θ)\pi(a|s; \theta) 求导

    dθ,t=∂log⁡π(at∣st;θ)∂θ∣θ=θt\mathbf{d}_{\theta, t} = \frac{\partial \log \pi(a_t | s_t; \theta)}{\partial \theta} \mid_{\theta = {\theta}_t}
  9. 使用梯度上升方法来更新策略网络( β\beta 是学习率)

    θt+1=θt+β⋅qt⋅dθ,t\theta_{t+1} = \theta_t + \beta \cdot q_t \cdot \mathbf{d}_{\theta, t}

    注意:实现中大多都使用第 5 步计算出来的 δt{\delta}_t 来替代上面公式中的 qtq_t 得到

    θt+1=θt+β⋅δt⋅dθ,t\theta_{t+1} = \theta_t + \beta \cdot {\delta}_t \cdot \mathbf{d}_{\theta, t}

    这两种方式都是对的,使用 qtq_t 是标准算法,而使用 δt{\delta}_t 则是 Policy Gradient with Baseline 。 使用了 Baseline 的方法不影响期望,但是降低了方差,能让算法收敛更快,所以效果更好。


参考:策略学习 Policy-Based Reinforcement Learning Policy Gradient 论文:Policy Gradient Methods for Reinforcement Learning with Function Approximation