一、策略函数
策略函数 π(a∣s) 的本质是一个概率密度函数(Probability Density Function, PDF)。它将从环境观察到的状态 s 作为输入,输出所有动作中每个动作的概率。在需要执行动作时,就从这些动作概率中随机抽取一个动作来执行。
二、策略网络
因为从环境观察到的状态 s 常常有无数多种,所以可以使用神经网络 π(a∣s;θ) 来近似策略函数 π(a∣s),其中 θ 是神经网络的参数。神经网络 π(a∣s;θ) 就是策略网络。
因为策略网络输出的是各个动作的概率,而各个动作概率的总和应该是1,所以策略网络最后的激活函数通常是 softmax 以保证策略网络输出值的总和为1。
三、如何训练策略网络
根据状态价值函数的定义有(为便于推导,假定动作是离散的):
Vπ(st)=EA[Qπ(st,A)]=a∑π(a∣st)⋅Qπ(st,a)
使用神经网络 π(a∣s;θ) 来近似策略函数 π(a∣s) 得到:
V(s;θ)=a∑π(a∣s;θ)⋅Qπ(s,a)
我们知道,当找到最优价值函数时,就解决了马尔科夫决策问题。即当我们找到一个策略网络的参数值 θ^ 使得 V(s;θ^) 的值最大,我们就找到了一个最优的策略网络。
所以,令:
J(θ)=Es[V(s;θ)]
可以使用 梯度上升 方法来更新策略网络的参数值 θ :
- 从环境观察到的状态 s 。
- 更新策略网络( β 是学习率)
θ←θ+β⋅∂θ∂V(s;θ)
四、策略梯度
策略梯度就是使用神经网络 π(a∣s;θ) 来近似策略函数 π(a∣s) 后得到的状态价值函数对神经网络参数 θ 的导数,即 ∂θ∂V(s;θ) 。
∂θ∂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)]
- 上面的计算过程中,假设了 Qπ(s,a) 不依赖于 θ ,这是为了简化推导,便于理解。实际上即使将 Qπ(s,a) 对于 θ 的导数也考虑进去,得到的结果也是一样的。
- 链式求导法则
∂θ∂log[π(θ)]=π(θ)1⋅∂θ∂π(θ)
即:
∂θ∂V(s;θ)=a∑∂θ∂π(a∣s;θ)⋅Qπ(s,a)(4.1)
∂θ∂V(s;θ)=EA∼π(⋅∣s;θ)[∂θ∂logπ(A∣s;θ)⋅Qπ(s,A)](4.2)
五、计算策略梯度
5.1 离散动作
如果动作是离散的,比如动作空间是 A∈{"left","right","fire"}。可以使用 公式4.1 :
∂θ∂V(s;θ)=a∑∂θ∂π(a∣s;θ)⋅Qπ(s,a)(4.1)
-
对每个动作 a∈A ,计算
f(a,θ)=∂θ∂π(a∣s;θ)⋅Qπ(s,a)
-
计算策略梯度
∂θ∂V(s;θ)=f("left",θ)+f("right",θ)+f("fire",θ)
5.2 连续动作
如果动作是连续的,比如动作空间是 A=[0,1]。可以使用 公式4.2 :
∂θ∂V(s;θ)=EA∼π(⋅∣s;θ)[∂θ∂logπ(A∣s;θ)⋅Qπ(s,A)](4.2)
因为直接求期望很难,所以可以对期望做蒙特卡洛(Monte Carlo)近似,步骤如下:
-
从概率密度函数 π(⋅∣s;θ) 中随机抽样得到一个动作 a^ 。
-
计算
g(a^,θ)=∂θ∂logπ(a^∣s;θ)⋅Qπ(s,a^)
- 显然有 EA[g(A,θ)]=∂θ∂V(s;θ) 。
- 因为 a^ 是从 π(⋅∣s;θ) 中随机抽样得到的,所以 g(a^,θ) 是 ∂θ∂V(s;θ) 的一个无偏估计。
-
使用 g(a^,θ) 来近似 ∂θ∂V(s;θ) (蒙特卡洛近似)。
上面的这种方法对离散的动作也是有效的。
六、使用策略梯度来更新策略网络
完整的步骤如下:
- 从环境观察到的状态 st 。
- 从概率密度函数 π(⋅∣st;θt) 中随机抽样得到一个动作 at 。
- 计算动作价值 qt≈Qπ(st,at) 。
- 计算策略梯度 dθ,t=∂θ∂logπ(at∣st;θ)∣θ=θt 。
- 计算策略梯度的近似值 g(at,θt)=qt⋅dθ,t 。
- 更新策略网络 θt+1=θt+β⋅g(at,θt) 。
在上面的步骤3中,计算 qt 的方式有两种。
6.1 REINFORCE
使用观测到的 gt 来代替 Qπ(st,at) 。
- 用策略网络 π(⋅∣st;θt) 控制 agent 从游戏开始到游戏结束玩一局完整的游戏,得到游戏轨迹 s1,a1,r1,s2,a2,r2,⋯,sT,aT,rT 。
- 计算所有时刻的折扣回报 gt=∑k=tTγk−trk 。
- 因为 Qπ(st,at)=E[Gt] ,所以可以使用折扣回报 gt 来近似 Qπ(st,at) ,即 qt=gt 。
6.2 Actor-Critic Method
使用神经网络来近似 Qπ(st,at)。
我们已经使用神经网络 π(a∣s;θ) 来近似策略函数 π(a∣s),其中 θ 是神经网络的参数。同时,我们再使用神经网络 q(s,a;w) 来近似价值函数 Qπ(s,a),其中 w 是神经网络的参数。
V(s;θ,w)=a∑π(a∣s;θ)⋅qπ(s,a;w)
训练时,策略网络 π(a∣s;θ) 相当于运动员(Actor),而价值网络 q(s,a;w) 相当于裁判(Critic):
- 训练 Actor 的目的是让 Critic 的打分尽可能的高,即更新策略网络 π(a∣s;θ) 使状态价值 V(s;θ,w) 的值增加。 Actor 依靠 Critic 的打分来改进自己。
- 而训练 Critic 的目的则是让它对 Actor 的打分更准确,即更新价值网络 qπ(s,a;w) 以能够更好的估计未来奖励的总和。 Critic 依靠环境给与的奖励来改进自己。
- 当 Critic 的打分比较准确且 Actor 的得分都比较高时,就能得到一个比较好的策略网络了。
在推理时,只需要使用 Actor 来控制 agent 动作就可以了,推理时的不需要 Critic 。
算法完整的训练流程如下:
-
从环境获得状态 st 输入策略网络 π(a∣s;θ) ,并从得到的动作概率 π(a∣st;θ) 中抽样得到动作 at 。
-
在环境中执行动作 at 并获取到新的环境状态 st+1 和奖励 rt 。
-
将新的环境状态 st+1 输入策略网络中 π(a∣s;θ) 并随机抽样得到一个临时的动作 a^t+1 (这个动作不会在环境中执行,仅用于更新价值网络)。
随机抽样保证样本的无偏性,这样才能用来做蒙特卡洛近似,详见5.2 连续动作。
-
计算动作 at 和 a^t+1 的动作价值
qt=q(st,at;wt)
qt+1=q(st+1,a^t+1;wt)
-
计算 TD error
δt=qt−(rt+γ⋅qt+1)
-
对价值网络 q(s,a;w) 求导
dw,t=∂w∂q(st,at;w)∣w=wt
-
使用时序差分学习来更新价值网络( α 是学习率)
wt+1=wt−α⋅δt⋅dw,t
其中 δt⋅dw,t 是 TD error δt 的均方差关于参数 w 的导数
∂w∂δt2/2=δt⋅dw,t
-
对策略网络 π(a∣s;θ) 求导
dθ,t=∂θ∂logπ(at∣st;θ)∣θ=θt
-
使用梯度上升方法来更新策略网络( β 是学习率)
θt+1=θt+β⋅qt⋅dθ,t
注意:实现中大多都使用第 5 步计算出来的 δt 来替代上面公式中的 qt 得到
θt+1=θt+β⋅δt⋅dθ,t
这两种方式都是对的,使用 qt 是标准算法,而使用 δt 则是 Policy Gradient with Baseline 。 使用了 Baseline 的方法不影响期望,但是降低了方差,能让算法收敛更快,所以效果更好。
参考:策略学习 Policy-Based Reinforcement Learning
Policy Gradient 论文:Policy Gradient Methods for Reinforcement Learning with Function Approximation