深度强化学习(王树森)笔记10

深度强化学习(DRL)

本文是学习笔记,如有侵权,请联系删除。本文在ChatGPT辅助下完成。

参考链接

Deep Reinforcement Learning官方链接:https://github.com/wangshusen/DRL

源代码链接:https://github.com/DeepRLChinese/DeepRL-Chinese

B站视频:【王树森】深度强化学习(DRL)

豆瓣: 深度强化学习

连续控制:确定策略网络DPG,TD3,随机高斯策略

连续控制

前面的内容全部都是离散控制,即动作空间是一个离散的集合,比如超级玛丽游戏中的动作空间 A = { 左,右,上 } A= \{ 左,右,上\} A={ 左,右,上} 就是个离散集合。本章的内容是连续控制,即动作空间是个连续集合,比如汽车的转向 A = [ − 4 0 ∘ , 4 0 ∘ ] A=[-40^{\circ},40^{\circ}] A=[40,40]就是连续集合。如果把连续动作空间做离散化,那么离散控制的方法就能直接解决连续控制问题;先讨论连续集合的离散化。然而更好的办法是直接用连续控制方法,而非离散化之后借用离散控制方法。本章介绍两种连续控制方法:确定策略网络和随机策略网络。

ChatGPT对DPG的解释:

确定性策略梯度(Deterministic Policy Gradient,DPG)是强化学习中一种用于训练确定性策略的方法。与传统的随机策略不同,确定性策略直接映射状态到具体的动作,而不是输出一个动作的概率分布。DPG 主要应用于连续动作空间的问题,其中动作是实数空间中的连续值。

下面是 DPG 的基本思想和主要要素:

  1. 确定性策略: 在 DPG 中,智能体的策略是确定性的,即给定一个状态,它直接输出一个具体的动作。这样的确定性策略可以表示为 ( a = μ ( s ) a = \mu(s) a=μ(s)),其中 ( μ \mu μ) 是策略函数,输入为状态 (s),输出为动作 (a)。

  2. 值函数: DPG 使用值函数来评估策略的好坏。通常,包括状态值函数(State Value Function)和动作值函数(Action Value Function)。其中,状态值函数表示在给定状态下的期望累积回报,动作值函数表示在给定状态和动作的情况下的期望累积回报。

  3. 策略梯度: DPG 使用策略梯度方法来更新策略参数。策略梯度是关于策略参数的梯度,它告诉我们如何调整策略以最大化期望累积回报。在 DPG 中,通过对值函数对动作的梯度来计算策略梯度。

  4. Actor-Critic 结构: DPG 通常采用 Actor-Critic 结构,其中包括一个 Actor 网络负责输出动作,一个 Critic 网络负责估计值函数。这两个网络共同工作,Actor 的参数通过 Critic 的估计值函数的梯度进行更新。

总体来说,DPG 的训练过程涉及通过策略梯度来调整 Actor 网络的参数,以最大化 Critic 网络估计的值函数。这样,DPG 可以在连续动作空间中有效地训练确定性策略。

离散控制与连续控制的区别

考虑这样一个问题:我们需要控制一只机械手臂,完成某些任务,获取奖励。机械手臂有两个关节,分别可以在 [0°,360°]与 [0°,180°] 的范围内转动。这个问题的自由度是 d = 2 d=2 d=2, 动作是二维向量,动作空间是连续集合 A = [ 0 , 360 ] × [ 0 , 180 ] A=[0,360]\times[0,180] A=[0,360]×[0,180]

此前我们学过的强化学习方法全部都是针对离散动作空间,不能直接解决上述连续控制问题。想把此前学过的离散控制方法应用到连续控制上,必须要对连续动作空间做离散化 (网格化)。比如把连续集合 A = [ 0 , 360 ] × [ 0 , 180 ] \mathcal{A}=[0,360]\times[0,180] A=[0,360]×[0,180] 变成离散集合 A ′ = A^{\prime}= A= { 0 , 20 , 40 , ⋯   , 360 } × { 0 , 20 , 40 , ⋯   , 180 } \{0,20,40,\cdots,360\}\times\{0,20,40,\cdots,180\} { 0,20,40,,360}×{ 0,20,40,,180}; 见图 10.1。

在这里插入图片描述

对动作空间做离散化之后,就可以应用之前学过的方法训练 DQN 或者策略网络,用于控制机械手臂。可是用离散化解决连续控制问题有个缺点。把自由度记作 d d d。自由度 d d d 越大,网格上的点就越多,而且数量随着 d d d 指数增长,会造成维度灾难。动作空间的大小即网格上点的数量。如果动作空间太大,DQN 和策略网络的训练都变得很困难,强化学习的结果会不好。上述离散化方法只适用于自由度 d d d 很小的情况;如果 d d d 不是很小, 就应该使用连续控制方法。后面两节介绍两种连续控制的方法。

确定策略梯度 (DPG)

确定策略梯度 (deterministic policy gradient, DPG) 是最常用的连续控制方法。DPG 是一种 actor-critic 方法,它有一个策略网络 (演员), 一个价值网络 (评委)。策略网络控制智能体做运动,它基于状态 s s s 做出动作 a a a。价值网络不控制智能体,只是基于状态 s s s 给动作 a a a 打分,从而指导策略网络做出改进。图 10.2 是两个神经网络的关系。

在这里插入图片描述

策略网络和价值网络

本节的策略网络不同于前面章节的策略网络。在之前章节里,策略网络 π ( a ∣ s ; θ ) \pi(a|s;\boldsymbol{\theta}) π(as;θ) 是一个概率质量函数,它输出的是概率值。本节的确定策略网络 μ ( s ; θ ) \boldsymbol{\mu}(s;\boldsymbol{\theta}) μ(s;θ) 的输出是 d d d 维的向量 a a a,作为动作。两种策略网络一个是随机的,一个是确定性的:

  • 之前章节中的策略网络 π ( a ∣ s ; θ ) \pi(a|s;\boldsymbol{\theta}) π(as;θ) 带有随机性:给定状态 s s s, 策略网络输出的是离散动作空间 A \mathcal{A} A 上的概率分布; A \mathcal{A} A 中的每个元素 (动作) 都有一个概率值。智能体依据概率分布,随机从 A A A 中抽取一个动作,并执行动作。

  • 本节的确定策略网络没有随机性:对于确定的状态 s s s, 策略网络 μ \mu μ 输出的动作 a a a 是确定的。动作 a a a 直接是 μ \mu μ 的输出,而非随机抽样得到的。

确定策略网络 μ \mu μ的结构如图 10.3 所示。如果输入的状态 s s s 是个矩阵或者张量 (例如图片、视频),那么 μ \mu μ 就由若干卷积层、全连接层等组成。

在这里插入图片描述

确定策略可以看做是随机策略的一个特例。确定策略 μ ( s ; θ ) \mu(s;\theta) μ(s;θ) 的输出是 d d d 维向量,它的第 i i i 个元素记作 μ ^ i = [ μ ( s ; θ ) ] i \widehat{\mu}_i=\left[\boldsymbol{\mu}(s;\boldsymbol{\theta})\right]_i μ i=[μ(s;θ)]i。定义下面这个随机策略:

$ π ( a ∣ s ; θ , σ ) = ∏ i = 1 d 1 6.28 σ i ⋅ exp ⁡ ( − [ a i − μ ^ i ] 2 2 σ i 2 ) . ( 10.1 ) \pi(\boldsymbol{a}|s;\boldsymbol{\theta},\boldsymbol{\sigma})=\prod\limits_{i=1}^d\frac{1}{\sqrt{6.28}\sigma_i}\cdot\exp\bigg(-\frac{\big[a_i-\widehat{\mu}_i\big]^2}{2\sigma_i^2}\bigg). \quad{(10.1)} π(as;θ,σ)=i=1d6.28 σi1exp(2σi2[aiμ i]2).(10.1)

这个随机策略是均值为 μ ( s ; θ ) \mu(s;\theta) μ(s;θ)、协方差矩阵为 diag ( σ 1 , ⋯   , σ d ) (\sigma_1,\cdots,\sigma_d) (σ1,,σd) 的多元正态分布。本节的确定策略可以看做是上述随机策略在 σ = [ σ 1 , ⋯   , σ d ] \sigma=[\sigma_1,\cdots,\sigma_d] σ=[σ1,,σd] 为全零向量时的特例。

本节的价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) 是对动作价值函数 Q π ( s , a ) Q_\pi(s,\boldsymbol{a}) Qπ(s,a) 的近似。价值网络的结构如图 10.4 所示。价值网络的输入是状态 s s s 和动作 a a a ,输出的价值 q ^ = q ( s , a ; w ) \widehat{q}=q(s,a;w) q =q(s,a;w) 是个实数, 可以反映动作的好坏;动作 a a a 越好,则价值 q ^ \hat{q} q^就越大。所以价值网络可以评价策略网络的表现。在训练的过程中,价值网络帮助训练策略网络;在训练结束之后,价值网络就被丢弃,由策略网络控制智能体。

在这里插入图片描述

算法推导

用行为策略收集经验

本节的确定策略网络属于异策略(off-policy) 方法,即行为策略 (behavior policy) 可以不同于目标策略 (target policy)。目标策略即确定策略网络 μ ( s ; θ n o w ) \mu(s;\theta_\mathrm{now}) μ(s;θnow),其中 θ n o w \theta_\mathrm{now} θnow 是策略网络最新的参数。行为策略可以是任意的,比如
a   =   μ ( s ; θ o l d ) + ϵ . a\:=\:\mu(s;\theta_{\mathrm{old}})+\epsilon. a=μ(s;θold)+ϵ.

公式的意思是行为策略可以用过时的策略网络参数,而且可以往动作中加入噪声 ϵ ∈ R d \epsilon\in\mathbb{R}^d ϵRd。异策略的好处在于可以把收集经验与训练神经网络分割开;把收集到的经验存入经验回放数组(replay buffer),在做训练的时候重复利用收集到的经验。见图 10.5。

在这里插入图片描述

用行为策略控制智能体与环境交互,把智能体的轨迹(trajectory) 整理成 ( s t , a t , r t (s_t,a_t,r_t (st,at,rt, s t + 1 ) s_{t+1}) st+1) 这样的四元组,存入经验回放数组。在训练的时候,随机从数组中抽取一个四元组, 记作 ( s j , a j , r j , s j + 1 ) (s_j,\boldsymbol{a}_j,r_j,s_{j+1}) (sj,aj,rj,sj+1)。在训练策略网络 μ ( s ; θ ) \mu(s;\boldsymbol{\theta}) μ(s;θ) 的时候,只用到状态 s j s_j sj。在训练价值网络 q ( s , a ; w ) q(s,\boldsymbol{a};\boldsymbol{w}) q(s,a;w) 的时候,要用到四元组中全部四个元素: s j , a j , r j , s j + 1 s_j,\boldsymbol{a}_j,r_j,s_{j+1} sj,aj,rj,sj+1

训练策略网络

首先通俗解释训练策略网络的原理。如图 10.6 所示,给定状态 s s s,策略网络输出一个动作 a = μ ( s ; θ ) a=\mu(s;\theta) a=μ(s;θ),然后价值网络会给 a a a 打一个分数: q ^ = q ( s , a ; w ) \widehat{q}=q(s,a;\boldsymbol{w}) q =q(s,a;w)

在这里插入图片描述

参数 θ \theta θ 影响 a a a, 从而影响 q ^ \widehat{q} q 。分数 q ^ \widehat{q} q 可以反映出 θ \theta θ 的好坏程度。训练策略网络的目标就是改进参数 θ \theta θ,使 q ^ \widehat{q} q 变得更大。把策略网络看做演员,价值网络看做评委。训练演员(策略网络)的目的就是让他迎合评委 (价值网络) 的喜好,改变自己的表演技巧 (即参数 θ \theta θ), 使得评委打分 q ^ \widehat{q} q 的均值更高。

根据以上解释,我们来推导目标函数。如果当前状态是 s s s, 那么价值网络的打分就是:

q ( s , μ ( s ; θ ) ; w ) . q(s,\boldsymbol{\mu}(s;\boldsymbol{\theta});\boldsymbol{w}). q(s,μ(s;θ);w).

我们希望打分的期望尽量高,所以把目标函数定义为打分的期望:

J ( θ ) = E S [ q ( S , μ ( S ; θ ) ; w ) ] . J(\boldsymbol{\theta})=\mathbb{E}_{S}\Big[q(S,\boldsymbol{\mu}(S;\boldsymbol{\theta});\boldsymbol{w})\Big]. J(θ)=ES[q(S,μ(S;θ);w)].

关于状态 S S S 求期望消除掉了 S S S 的影响;不管面对什么样的状态 S S S, 策略网络(演员)都应该做出很好的动作,使得平均分 J ( θ ) J(\theta) J(θ) 尽量高。策略网络的学习可以建模成这样一个最大化问题:

max ⁡ θ   J ( θ ) . \max_{\theta}\:J(\boldsymbol{\theta}). θmaxJ(θ).

注意,这里我们只训练策略网络,所以最大化问题中的优化变量是策略网络的参数 θ \theta θ,而价值网络的参数 w w w 被固定住。

可以用梯度上升来增大 J ( θ ) J(\boldsymbol{\theta}) J(θ)。每次用随机变量 S S S 的一个观测值(记作 s j s_j sj) 来计算梯度:

g j   ≜   ∇ θ q ( s j ,   μ ( s j ; θ ) ;   w ) . \boldsymbol{g}_{j}\:\triangleq\:\nabla_{\boldsymbol{\theta}}q(s_{j},\:\boldsymbol{\mu}(s_{j};\boldsymbol{\theta});\:\boldsymbol{w}). gjθq(sj,μ(sj;θ);w).

它是 ∇ θ J ( θ ) \nabla_{\theta}J(\theta) θJ(θ) 的无偏估计。 g j g_j gj 叫做确定策略梯度 (deterministic policy gradient), 缩写DPG。

可以用链式法则求出梯度 g j g_j gj。复习一下链式法则。如果有这样的函数关系 : θ → a → :\theta\to a\to :θa q q q,那么 q q q 关于 θ \theta θ 的导数可以写成

∂   q ∂   θ   =   ∂   a ∂   θ ⋅ ∂   q ∂   a \frac{\partial\:q}{\partial\:\theta}\:=\:\frac{\partial\:a}{\partial\:\theta}\cdot\frac{\partial\:q}{\partial\:a} θq=θaaq

价值网络的输出与 θ \theta θ的函数关系如图 10.6 所示。应用链式法则,我们得到下面的定理。

在这里插入图片描述

定理 10.1. 确定策略梯度
∇ θ q ( s j ,   μ ( s j ; θ ) ;   w )   =   ∇ θ μ ( s j ; θ )   ⋅   ∇ a q ( s j   a ^ j ;   w ) , 其中   a ^ j   =   μ ( s j ; θ ) . ♡ \nabla_{\theta }q(s_j,\:\mu(s_j;\boldsymbol{\theta});\:\boldsymbol{w})\:=\:\nabla_{\theta}\boldsymbol{\mu}(s_j;\boldsymbol{\theta})\:\cdot\:\nabla_{\boldsymbol{a}}q(s_j\:\widehat{\boldsymbol{a}}_j;\:\boldsymbol{w}),\quad\text{其中}\:\widehat{\boldsymbol{a}}_j\:=\:\boldsymbol{\mu}(s_j;\boldsymbol{\theta}).\quad\color{red}{\heartsuit} θq(sj,μ(sj;θ);w)=θμ(sj;θ)aq(sja j;w),其中a j=μ(sj;θ).
由此我们得到更新 θ \theta θ 的算法。每次从经验回放数组里随机抽取一个状态,记作 s j s_j sj。计算 a ^ j = μ ( s j ; θ ) \widehat{a}_j=\mu(s_j;\boldsymbol{\theta}) a j=μ(sj;θ)。用梯度上升更新一次 θ \theta θ:
θ   ←   θ   +   β   ⋅   ∇ θ μ ( s j ; θ )   ⋅   ∇ a q ( s j ,   a ^ j ;   w ) . \boxed{\quad\boldsymbol{\theta}\:\leftarrow\:\boldsymbol{\theta}\:+\:\boldsymbol{\beta}\:\cdot\:\nabla_{\boldsymbol{\theta}}\boldsymbol{\mu}(s_{j};\boldsymbol{\theta})\:\cdot\:\nabla_{\boldsymbol{a}}q(s_{j},\:\widehat{\boldsymbol{a}}_{j};\:\boldsymbol{w}).} θθ+βθμ(sj;θ)aq(sj,a j;w).

此处的 β \beta β 是学习率,需要手动调。这样做梯度上升,可以逐渐让目标函数 J ( θ ) J(\theta) J(θ) 增大,也就是让评委给演员的平均打分更高。

训练价值网络 :

首先通俗解释训练价值网络的原理。训练价值网络的目标是让价值网络 q ( s , a ; w ) q(s,\boldsymbol{a};\boldsymbol{w}) q(s,a;w) 的预测越来越接近真实价值函数 Q π ( s , a ) Q_\pi(s,\boldsymbol{a}) Qπ(s,a)。如果把价值网络看做评委,那么训练评委的目标就是让他的打分越来越准确。每一轮训练都要用到一个实际观测的奖励 r r r,可以把 r r r看做“真理”,用它来校准评委的打分。

训练价值网络要用 TD 算法。这里的 TD 算法与之前学过的标准 actor-critic 类似,都是让价值网络去拟合 TD 目标。每次从经验回放数组中取出一个四元组 ( s j , a j , r j , s j + 1 ) (s_j,a_j,r_j,s_{j+1}) (sj,aj,rj,sj+1), 用它更新一次参数 w w w。首先让价值网络做预测:

q ^ j   =   q ( s j , a j ; w ) 和 q ^ j + 1 = q ( s j + 1 , μ ( s j + 1 ; θ ) ; w ) \widehat q_{j}\:=\:q(s_{j},\boldsymbol{a}_{j};\boldsymbol{w})\quad\text{和}\quad\widehat q_{j+1}=q(s_{j+1},\boldsymbol{\mu}(s_{j+1};\boldsymbol{\theta});\boldsymbol{w}) q j=q(sj,aj;w)q j+1=q(sj+1,μ(sj+1;θ);w)

计算 TD 目标 y ^ j = r j + γ ⋅ g ^ j + 1 \widehat{y}_j=r_j+\gamma\cdot\widehat{g}_{j+1} y j=rj+γg j+1。定义损失函数

L ( w )   =   1 2 [ q ( s j , a j ;   w ) − y ^ j ] 2 , L(\boldsymbol{w})\:=\:\frac{1}{2}\Big[q(s_{j},\boldsymbol{a}_{j};\:\boldsymbol{w})-\widehat{y}_{j}\Big]^{2}, L(w)=21[q(sj,aj;w)y j]2,

计算梯度

∇ w L ( w )   =   ( q ^ j − y ^ j ) ⏟ T D   误差  δ j ⋅ ∇ w q ( s j , a j ; w ) , \nabla_{\boldsymbol{w}}L\big(\boldsymbol{w}\big)\:=\:\underbrace{\left(\widehat{q}_{j}-\widehat{y}_{j}\right)}_{\mathrm{TD~}\text{误差 }\delta_{j}}\cdot\nabla_{\boldsymbol{w}}q\big(s_{j},a_{j};\boldsymbol{w}\big), wL(w)=TD 误差 δj (q jy j)wq(sj,aj;w),

做一轮梯度下降更新参数 w : w: w:

w   ←   w − α ⋅ ∇ w L ( w ) . w\:\leftarrow\:w-\alpha\cdot\nabla_{\boldsymbol{w}}L(\boldsymbol{w}). wwαwL(w).

这样可以让损失函数 L ( w ) L(w) L(w) 减小,也就是让价值网络的预测 q ^ j = q ( s , a ; w ) \widehat{q}_j=q(s,\boldsymbol{a};\boldsymbol{w}) q j=q(s,a;w) 更接近 TD 目标 y ^ j \widehat{y}_j y j。公式中的 α \alpha α 是学习率,需要手动调。

训练流程 :

做训练的时候,可以同时对价值网络和策略网络做训练。每次从经验回放数组中抽取一个四元组,记作 ( s j , a j , r j , s j + 1 ) (s_j,a_j,r_j,s_{j+1}) (sj,aj,rj,sj+1)。把神经网络当前参数记作 w n o w w_\mathrm{now} wnow θ n o w \theta_\mathrm{now} θnow。执行以下步骤更新策略网络和价值网络:

  1. 让策略网络做预测:

a ^ j = μ ( s j ; θ n o w ) 和 a ^ j + 1 = μ ( s j + 1 ; θ n o w ) . \widehat{\boldsymbol{a}}_{j}=\boldsymbol{\mu}\big(s_{j};\boldsymbol{\theta}_{\mathrm{now}}\big)\quad\text{和}\quad\widehat{\boldsymbol{a}}_{j+1}=\boldsymbol{\mu}\big(s_{j+1};\boldsymbol{\theta}_{\mathrm{now}}\big). a j=μ(sj;θnow)a j+1=μ(sj+1;θnow).

​ 注 计算动作 a ^ j \widehat{a}_j a j用的是当前的策略网络 μ ( s j ; θ n o w ) \mu(s_j;\theta_\mathrm{now}) μ(sj;θnow),用 a ^ j \widehat{a}_j a j 来更新 θ n o w \theta_\mathrm{now} θnow: 而从经验回放数组中抽取的 a j a_j aj 则是用过时的策略网络 μ ( s j ; θ o l d ) \mu(s_j;\theta_\mathrm{old}) μ(sj;θold) 算出的,用 a j a_j aj 来更新 w n o w w_\mathrm{now} wnow 。请注意 a ^ j \hat{a}_j a^j a j a_j aj 的区别。

  1. 让价值网络做预测:

q ^ j   =   q ( s j , a j ; w n o w ) 和 q ^ j + 1   =   q ( s j + 1 , a j + 1 ^ ; w n o w ) . \widehat q_{j}\:=\:q(s_{j},\boldsymbol{a_{j}};\boldsymbol{w_{\mathrm{now}}})\quad\text{和}\quad\widehat q_{j+1}\:=\:q(s_{j+1},\widehat{\boldsymbol{a_{j+1}}};\boldsymbol{w_{\mathrm{now}}}). q j=q(sj,aj;wnow)q j+1=q(sj+1,aj+1 ;wnow).

  1. 计算 TD 目标和 TD 误差:

y ^ j   =   r j + γ ⋅ q ^ j + 1 和 δ j   =   q ^ j − y ^ j . \widehat y_{j}\:=\:r_{j}+\gamma\cdot\widehat q_{j+1}\quad\text{和}\quad\delta_{j}\:=\:\widehat q_{j}-\widehat y_{j}. y j=rj+γq j+1δj=q jy j.

  1. 更新价值网络:

w n e w   ←   w n o w − α ⋅ δ j ⋅ ∇ w q ( s j , a j ; w n o w ) . \boldsymbol{w_\mathrm{new}}\:\leftarrow\:\boldsymbol{w_\mathrm{now}}-\alpha\cdot\delta_{j}\cdot\nabla_{\boldsymbol{w}}q(s_{j},\boldsymbol{a_{j}};\boldsymbol{w_\mathrm{now}}). wnewwnowαδjwq(sj,aj;wnow).

  1. 更新策略网络:

θ n e w   ←   θ n o w + β ⋅ ∇ θ μ ( s j ; θ n o w )   ⋅   ∇ a q ( s j ,   a ^ j ;   w n o w )   . \boldsymbol{\theta}_{\mathrm{new}}\:\leftarrow\:\boldsymbol{\theta}_{\mathrm{now}}+\beta\cdot\nabla_{\boldsymbol{\theta}}\boldsymbol{\mu}(s_{j};\boldsymbol{\theta}_{\mathrm{now}})\:\cdot\:\nabla_{\boldsymbol{a}}q(s_{j},\:\widehat{\boldsymbol{a}}_{j};\:\boldsymbol{w}_{\mathrm{now}})\:. θnewθnow+βθμ(sj;θnow)aq(sj,a j;wnow).

在实践中,上述算法的表现并不好;读者应当采用后面介绍的技巧训练策略网络和价值网络。

深入分析 DPG

上一节介绍的 DPG 是一种“四不像”的方法。DPG 乍看起来很像前面介绍的策略学习方法,因为 DPG 的目的是学习一个策略 μ \mu μ,而价值网络 q q q 只起辅助作用。然而 DPG 又很像之前介绍的 DQN, 两者都是异策略 (Off-policy), 而且两者存在高估问题。鉴于 DPG 的重要性,我们更深入分析 DPG。

从策略学习的角度看待 DPG

在这里插入图片描述

答案是动作价值函数 Q π ( s , a ) Q_\pi(s,a) Qπ(s,a)。上一节 DPG 的训练流程中,更新价值网络用到 TD 目标:

y ^ j   =   r j   +   γ   ⋅   q ( s j + 1 ,   μ ( s j + 1 ; θ n o w ) ;   w n o w ) . \widehat{y}_{j}\:=\:r_{j}\:+\:\gamma\:\cdot\:q\Big(s_{j+1},\:\boldsymbol{\mu}\left(s_{j+1};\boldsymbol{\theta}_{\mathrm{now}}\right);\:\boldsymbol{w}_{\mathrm{now}}\Big). y j=rj+γq(sj+1,μ(sj+1;θnow);wnow).

很显然,当前的策略 μ ( s ; θ n o w ) \mu(s;\theta_\mathrm{now}) μ(s;θnow) 会直接影响价值网络 q q q。策略不同,得到的价值网络 q q q 就不同。

虽然价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) 通常是对动作价值函数 Q π ( s , a ) Q_\pi(s,\boldsymbol{a}) Qπ(s,a) 的近似,但是我们最终的目标是让 q ( s , a ; w ) q(s,\boldsymbol{a};\boldsymbol{w}) q(s,a;w) 趋近于最优动作价值函数 Q ⋆ ( s , a ) Q_\star(s,\boldsymbol{a}) Q(s,a)。回忆一下,如果 π \pi π 是最优策略 π ⋆ \pi^{\star} π, 那么 Q π ( s , a ) Q_{\pi}(s,\boldsymbol{a}) Qπ(s,a) 就等于 Q ⋆ ( s , a ) Q_{\star}(s,\boldsymbol{a}) Q(s,a)。训练 DPG 的目的是让 μ ( s ; θ ) \mu(s;\boldsymbol{\theta}) μ(s;θ) 趋近于最优策略 π ⋆ \pi^{\star} π 那么理想情况下, q ( s , a ; w ) q(s,a;w) q(s,a;w) 最终趋近于 Q ⋆ ( s , a ) Q_\star(s,\boldsymbol{a}) Q(s,a)

在这里插入图片描述

答案是目标策略 μ ( s ; θ n o w ) \mu(s;\theta_\mathrm{now}) μ(s;θnow),因为目标策略对价值网络的影响很大。在理想情况下,行为策略对价值网络没有影响。我们用 TD 算法训练价值网络,TD 算法的目的在于鼓励价值网络的预测趋近于 TD 目标。理想情况下,

q ( s j , a j ; w )   =   r j   +   γ   ⋅   Q ( s j + 1 ,   μ ( s j + 1 ; θ n o w ) ;   w n o w ) ⏟ TD 目标   ,   ∀   ( s j , a j , r j , s j + 1 ) . q(s_j,\boldsymbol{a}_j;\boldsymbol{w})\:=\:\underbrace{r_j\:+\:\gamma\:\cdot\:Q(s_{j+1},\:\boldsymbol{\mu}(s_{j+1};\boldsymbol{\theta}_{\mathrm{now}});\:\boldsymbol{w}_{\mathrm{now}})}_{\text{TD 目标}}\:,\quad\:\forall\:(s_j,\boldsymbol{a}_j,r_j,s_{j+1}). q(sj,aj;w)=TD 目标 rj+γQ(sj+1,μ(sj+1;θnow);wnow),(sj,aj,rj,sj+1).
在收集经验的过程中,行为策略决定了如何基于 s j s_j sj 生成 a j a_j aj,然而这不重要。上面的公式只希望等式左边去拟合等式右边,而不在乎 a j a_j aj 是如何生成的。

从价值学习的角度看待 DPG

假如我们知道最优动作价值函数 Q ⋆ ( s , a ; w ) Q_\star(s,a;\boldsymbol{w}) Q(s,a;w),我们可以这样做决策:给定当前状态 s t s_t st,选择最大化 Q 值的动作
a t   =   a r g m a x a ∈ A   Q ⋆ ( s t , a ) . a_{t}\:=\:\underset{a\in\mathcal{A}}{\mathrm{argmax}}\:Q_{\star}\big(s_{t},a\big). at=aAargmaxQ(st,a).

DQN 记作 Q ( s , a ; w ) Q(s,a;w) Q(s,a;w),它是 Q ⋆ ( s , a ; w ) Q_{\star}(s,a;\boldsymbol{w}) Q(s,a;w) 的函数近似。训练 DQN 的目的是让 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w) 趋近 Q ⋆ ( s , a ; w ) Q_\star(s,a;\boldsymbol{w}) Q(s,a;w), ∀ s ∈ S ,   a ∈ A \forall s\in\mathcal{S},\:a\in\mathcal{A} sS,aA。在训练好 DQN 之后,可以这样做决策:

a t   =   a r g m a x a ∈ A   Q ( s t , a ;   w ) . a_{t}\:=\:\mathop{\mathrm{argmax}}_{a\in\mathcal{A}}\:Q\big(s_{t},a;\:\boldsymbol{w}\big). at=argmaxaAQ(st,a;w).

如果动作空间 A A A 是离散集合,那么上述最大化很容易实现。可是如果 A A A 是连续集合,则很难对 Q Q Q求最大化。

可以把 DPG 看做对最优动作价值函数 Q ⋆ ( s , a ) Q_\star(s,\boldsymbol{a}) Q(s,a) 的另一种近似方式,用于连续控制问题。我们希望学到策略网络 μ ( s ; θ ) \mu(s;\theta) μ(s;θ) 和价值网络 q ( s , a ; w ) q(s,a;\boldsymbol{w}) q(s,a;w), 使得
q ( s ,   μ ( s ; θ ) ;   w )   ≈ max ⁡ a ∈ A   Q ⋆ ( s , a ) , ∀   s ∈ S . q\Big(s,\:\boldsymbol{\mu}(s;\boldsymbol{\theta});\:\boldsymbol{w}\Big)\:\approx\max_{\boldsymbol{a}\in\mathcal{A}}\:Q_{\star}(s,\boldsymbol{a}),\quad\forall\:s\in\mathcal{S}. q(s,μ(s;θ);w)aAmaxQ(s,a),sS.

我们可以把 μ \mu μ q q q 看做是 Q ⋆ Q_{\star} Q 的近似分解,而这种分解的目的在于方便做决策:

a t = μ ( s t ; θ ) ≈ a r g m a x a ∈ A Q ⋆ ( s t , a ) . \begin{array}{rcl}a_t&=&\boldsymbol{\mu}(s_t;\boldsymbol{\theta})\\&\approx&\mathop{\mathrm{argmax}}_{\boldsymbol{a}\in\mathcal{A}}Q_\star(s_t,\boldsymbol{a}).\end{array} at=μ(st;θ)argmaxaAQ(st,a).

DPG 的高估问题

在之前的笔记 深度强化学习(王树森)笔记08-CSDN博客,我们讨过 DQN 的高估问题:如果用 Q 学习算法训练 DQN, 则 DQN 会高估真实最优价值函数 Q ⋆ Q_{\star} Q。把 DQN 记作 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w)。如果用 Q 学习算法训练 DQN, 那么 TD 目标是
y ^ j   =   r j   +   γ   ⋅   max ⁡ a ∈ A   Q ( s j + 1 , a ; w ) . \widehat{y}_{j}\:=\:r_{j}\:+\:\gamma\:\cdot\:\max_{a\in\mathcal{A}}\:Q\big(s_{j+1},a;\boldsymbol{w}\big). y j=rj+γaAmaxQ(sj+1,a;w).

之前得出结论:如果 Q ( s , a ; w ) Q(s,a;\boldsymbol{w}) Q(s,a;w) 是最优动作价值函数 Q ⋆ ( s , a ) Q_\star(s,a) Q(s,a) 的无偏估计,那么 y ^ j \widehat{y}_j y j 是对 Q ⋆ ( s j , a j ) Q_\star(s_j,a_j) Q(sj,aj) 的高估。用 y ^ j \widehat{y}_j y j 作为目标去更新 DQN, 会导致 Q ( s j , a j ; w ) Q(s_j,a_j;\boldsymbol{w}) Q(sj,aj;w) 高估 Q ⋆ ( s j , a j ) Q_\star(s_j,a_j) Q(sj,aj)。另一个结论是自举会导致高估的传播,造成高估越来越严重。

DPG 也存在高估问题,用上一节的算法训练出的价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) 会高估真实动作价值 Q π ( s , a ) Q_\pi(s,\boldsymbol{a}) Qπ(s,a)。造成 DPG 高估的原因与 DQN 类似:第一,TD 目标是对真实动作价值的高估;第二,自举导致高估的传播。下面具体分析两个原因;如果读者不感兴趣,只需要记住上述结论即可,可以跳过下面的内容。

最大化造成高估

训练策略网络的时候,我们希望策略网络计算出的动作 a ^ = \widehat{a}= a = μ ( s ; θ ) \mu(s;\theta) μ(s;θ) 能得到价值网络尽量高的评价,也就是让 q ( s , a ^ ; w ) q(s,\widehat{a};w) q(s,a ;w) 尽量大。我们通过求解下面的优化模型来学习策略网络:
θ ⋆   =   argmax ⁡ θ   E S [   q ( S , A ^ ; w )   ] ,   s . t .   A ^ = μ ( S ; θ ) . \boldsymbol{\theta}^{\star}\:=\:\operatorname*{argmax}_{\boldsymbol{\theta}}\:\mathbb{E}_{S}\Big[\:q\big(S,\widehat{A};\boldsymbol{w}\big)\:\Big],\quad\:\mathrm{s.t.}\:\widehat{A}=\boldsymbol{\mu}(S;\boldsymbol{\theta}). θ=θargmaxES[q(S,A ;w)],s.t.A =μ(S;θ).

这个公式的意思是 μ ( s ; θ ⋆ ) \mu(s;\theta^\star) μ(s;θ) 是最优的确定策略网络。 上面的公式与下面的公式意义相同(虽然不严格等价):

μ ( s ; θ ⋆ )   =   a r g m a x a ∈ A   q ( s , a ; w )   , ∀   s ∈ S . \boldsymbol{\mu}(s;\boldsymbol{\theta}^{\star})\:=\:\mathop{\mathrm{argmax}}_{\boldsymbol{a}\in\mathcal{A}}\:q(s,\boldsymbol{a};\boldsymbol{w})\:,\quad\forall\:s\in\mathcal{S}. μ(s;θ)=argmaxaAq(s,a;w),sS.

这个公式的意思也是 μ ( s ; θ ⋆ ) \mu(s;\theta^\star) μ(s;θ) 是最优的确定策略网络。训练价值网络 q q q 时用的 TD 目标是

y ^ j = r j   +   γ ⋅ q (   s j + 1 ,   μ ( s j + 1 ; θ ) ;   w   ) ≈ r j   +   γ ⋅ max ⁡ a j + 1 q (   s j + 1 ,   a j + 1 ;   w   ) . \begin{array}{rcl}\widehat{y}_{j}&=&r_{j}\:+\:\gamma\cdot q\Big(\:s_{j+1},\:\boldsymbol{\mu}(s_{j+1};\boldsymbol{\theta});\:\boldsymbol{w}\:\Big)\\&\approx&r_{j}\:+\:\gamma\cdot\max_{\boldsymbol{a}_{j+1}}q\big(\:s_{j+1},\:\boldsymbol{a}_{j+1};\:\boldsymbol{w}\:\big).\end{array} y j=rj+γq(sj+1,μ(sj+1;θ);w)rj+γmaxaj+1q(sj+1,aj+1;w).

根据前面的分析,上面公式中的 max 会导致 y ^ j \widehat{y}_j y j 高估真实动作价值 Q π ( s j , a j ; w ) Q_\pi(s_j,a_j;\boldsymbol{w}) Qπ(sj,aj;w)。在训练 q q q 时,我们把 y ^ j \widehat{y}_j y j 作为目标,鼓励价值网络 q ( s j , a j ; w ) q(s_j,a_j;\boldsymbol{w}) q(sj,aj;w) 接近 y ^ j \widehat{y}_j y j, 这会导致 q ( s j , a j ; w ) q(s_j,a_j;\boldsymbol{w}) q(sj,aj;w) 高估真实动作价值。

自举造成偏差传播

前面的笔记中讨论过自举(bootstrapping)造成偏差的传播。
TD 目标
y ^ j = r j   +   γ ⋅ q (   s j + 1 ,   μ ( s j + 1 ; θ )   ;   w   ) \widehat{y}_{j}\quad=\quad r_{j}\:+\:\gamma\cdot q\Big(\:s_{j+1},\:\boldsymbol{\mu}(s_{j+1};\boldsymbol{\theta})\:;\:\boldsymbol{w}\:\Big) y j=rj+γq(sj+1,μ(sj+1;θ);w)

是用价值网络算出来的,而它又被用于更新价值网络 q q q 本身,这属于自举。假如价值网络 q ( s j + 1 , a j + 1 ; θ ) q(s_{j+1},a_{j+1};\theta) q(sj+1,aj+1;θ) 高估了真实动作价值 Q π ( s j + 1 , a j + 1 ) Q_\pi(s_{j+1},a_{j+1}) Qπ(sj+1,aj+1),那么 TD 目标 y ^ j \widehat{y}_j y j 则是对 Q π ( s j , a j ) Q_\pi(s_j,a_j) Qπ(sj,aj) 的高估,这会导致 q ( s j , a j ; w ) q(s_j,a_j;\boldsymbol{w}) q(sj,aj;w) 高估 Q π ( s j , a j ) Q_\pi(s_j,\boldsymbol{a}_j) Qπ(sj,aj)。自举让高估从 ( s j + 1 , a j + 1 ) (s_{j+1},\boldsymbol{a}_{j+1}) (sj+1,aj+1) 传播到 ( s j , a j ) (s_j,\boldsymbol{a}_j) (sj,aj)

双延时确定策略梯度 (TD3)

由于存在高估等问题,DPG 实际运行的效果并不好。本节介绍的 Twin Delayed Deep Deterministic Policy Gradient (TD3) 可以大幅提升算法的表现,把策略网络和价值网络训练得更好。注意,本节只是改进训练用的算法,并不改变神经网络的结构。

高估问题的解决方案

解决方案——目标网络

为了解决自举和最大化造成的高估,我们需要使用目标网络 (Target Networks) 计算 TD 目标 y ^ j \widehat{y}_j y j。训练中需要两个目标网络:
q ( s , a ; w − ) 和 μ ( s ; θ − ) . q(s,\boldsymbol{a};\boldsymbol{w}^{-})\quad\text{和}\quad\boldsymbol{\mu}(s;\boldsymbol{\theta}^{-}). q(s,a;w)μ(s;θ).

它们与价值网络、策略网络的结构完全相同,但是参数不同。TD 目标是用目标网络算的:

y ^ j   =   r j   +   γ ⋅ q ( s j + 1 ,   a ^ j + 1 ;   w − ) ,   其中   a ^ j + 1   =   μ ( s j + 1 ;   θ − ) . \widehat{y}_{j}\:=\:r_{j}\:+\:\gamma\cdot q\big(s_{j+1},\:\widehat{\boldsymbol{a}}_{j+1};\:\boldsymbol{w}^{-}\big),\quad\:\text{其中}\:\widehat{\boldsymbol{a}}_{j+1}\:=\:\mu\big(s_{j+1};\:\boldsymbol{\theta}^{-}\big). y j=rj+γq(sj+1,a j+1;w),其中a j+1=μ(sj+1;θ).

y ^ j \widehat{y}_j y j作为目标,更新 w \boldsymbol{w} w,鼓励 q ( s j , a j ; w ) q(s_j,a_j;\boldsymbol{w}) q(sj,aj;w) 接近 y ^ j \widehat{y}_j y j。四个神经网络之间的关系如图 10.7所示。

在这里插入图片描述

这种方法可以在一定程度上缓解高估,但是实验表明高估仍然很严重。

更好的解决方案——截断双 Q 学习 (clipped double Q-learning):

这种方法使用两个价值网络和一个策略网络:
q ( s , a ; w 1 ) , q ( s , a ; w 2 ) , μ ( s ; θ ) . q(s,\boldsymbol{a};\boldsymbol{w}_{1}),\quad q(s,\boldsymbol{a};\boldsymbol{w}_{2}),\quad\boldsymbol{\mu}(s;\boldsymbol{\theta}). q(s,a;w1),q(s,a;w2),μ(s;θ).
三个神经网络各对应一个目标网络:
q ( s , a ; w 1 − ) , q ( s , a ; w 2 − ) , μ ( s ; θ − ) . q(s,\boldsymbol{a};\boldsymbol{w}_1^-),\quad q(s,\boldsymbol{a};\boldsymbol{w}_2^-),\quad\boldsymbol{\mu}(s;\boldsymbol{\theta}^-). q(s,a;w1),q(s,a;w2),μ(s;θ).
用目标策略网络计算动作:

a ^ j + 1 −   =   μ ( s j + 1 ; θ − ) , \widehat a_{j+1}^{-}\:=\:\mu(s_{j+1};\boldsymbol{\theta}^{-}), a j+1=μ(sj+1;θ),
然后用两个目标价值网络计算:

y ^ j , 1 = r j   +   γ ⋅ q ( s j + 1 ,   a ^ j + 1 − ;   w 1 − ) , y ^ j , 2 = r j   +   γ ⋅ q ( s j + 1 ,   a ^ j + 1 − ;   w 2 − ) . \begin{array}{rcl}{ {\widehat y_{j,1}}}&{=}&{ {r_{j}\:+\:\gamma\cdot q\big(s_{j+1},\:\widehat a_{j+1}^{-};\:\boldsymbol w_{1}^{-}\big),}}\\{ {\widehat y_{j,2}}}&{=}&{ {r_{j}\:+\:\gamma\cdot q\big(s_{j+1},\:\widehat a_{j+1}^{-};\:\boldsymbol w_{2}^{-}\big).}}\end{array} y j,1y j,2==rj+γq(sj+1,a j+1;w1),rj+γq(sj+1,a j+1;w2).
取两者较小者为TD 目标:
y ^ j   =   min ⁡ { y ^ j , 1   ,   y ^ j , 2 } . \widehat{y}_{j}\:=\:\operatorname*{min}\Big\{\widehat{y}_{j,1}\:,\:\widehat{y}_{j,2}\Big\}. y j=min{ y j,1,y j,2}.
截断双 Q 学习中的六个神经网络的关系如图 10.8 所示。

在这里插入图片描述

其他改进方法

可以在截断双 Q 学习算法的基础上做两处小的改进、进一步提升算法的表现。两种改进分别是往动作中加噪声、减小更新策略网络和目标网络的频率。

往动作中加噪声

上一小节中截断双 Q 学习用目标策略网络计算动作 : a ^ j + 1 − = :\hat{a}_{j+1}^{-}= :a^j+1= μ ( s j + 1 ; θ − ) \mu(s_{j+1};\theta^-) μ(sj+1;θ)。把这一步改成:
a ^ j + 1 −   =   μ ( s j + 1 ; θ − )   +   ξ . \widehat a_{j+1}^{-}\:=\:\mu(s_{j+1};\theta^{-})\:+\:\xi. a j+1=μ(sj+1;θ)+ξ.

公式中的 ξ \xi ξ是个随机向量,表示噪声,它的每一个元素独立随机从截断正态分布 (clipped normal distribution) 中抽取。把截断正态分布记作 C N ( 0 , σ 2 , − c , c ) \mathcal{CN}(0,\sigma^2,-c,c) CN(0,σ2,c,c),意思是均值为零,标准差为 σ \sigma σ 的正态分布,但是变量落在区间 [ − c , c ] [-c,c] [c,c] 之外的概率为零。正态分布与截断正态分布的对比如图 10.9 所示。使用截断正态分布,而非正态分布,是为了防止噪声 ξ \xi ξ 过大。使用截断,保证噪声大小不会超过 − c -c c c c c

在这里插入图片描述

减小更新策略网络和目标网络的频率 :

Actor-critic 用价值网络来指导策略网络的更新。如果价值网络 q q q 本身不可靠,那么用价值网络 q q q 给动作打的分数是不准确的,无助于改进策略网络 μ \mu μ。在价值网络 q q q 还很差的时候就急于更新 μ \mu μ, 非但不能改进 μ \mu μ,反而会由于 μ \mu μ 的变化导致 q q q 的训练不稳定。
实验表明,应当让策略网络 μ \mu μ 以及三个目标网络的更新慢于价值网络 q q q。传统的actor-critic 的每一轮训练都对策略网络、价值网络、以及目标网络做一次更新。更好的方法是每一轮更新一次价值网络,但是每隔 k k k 轮更新一次策略网络和三个目标网络。 k k k 是超参数,需要调。

训练流程

本节介绍了三种技巧,改进 DPG 的训练。第一,用截断双 Q 学习,缓解价值网络的高估。第二,往目标策略网络中加噪声,起到平滑作用。第三,降低策略网络和三个目标网络的更新频率。使用这三种技巧的算法被称作双延时确定策略梯度 (twin delayed deep deterministic policy gradient), 缩写是 TD3。

TD3 与 DPG 都属于异策略 (off-policy), 可以用任意的行为策略收集经验,事后做经验回放训练策略网络和价值网络。收集经验的方式与原始的训练算法相同,用 a t = a_t= at= μ ( s t ; θ ) + ϵ \boldsymbol{\mu}(s_t;\boldsymbol{\theta})+\boldsymbol{\epsilon} μ(st;θ)+ϵ 与环境交互,把观测到的四元组 ( s t , a t , r t , s t + 1 ) (s_t,\boldsymbol{a}_t,r_t,s_{t+1}) (st,at,rt,st+1) 存入经验回放数组。

初始的时候,策略网络和价值网络的参数都是随机的。这样初始化目标网络的参数:

w 1 −   ←   w 1 ,   w 2 −   ←   w 2 ,   θ −   ←   θ . w_1^-\:\leftarrow\:w_1,\quad\:w_2^-\:\leftarrow\:w_2,\quad\:\theta^-\:\leftarrow\:\theta. w1w1,w2w2,θθ.

训练策略网络和价值网络的时候,每次从数组中随机抽取一个四元组,记作 ( s j , a j , r j , s j + 1 ) (s_j,a_j,r_j,s_{j+1}) (sj,aj,rj,sj+1)。用下标 now 表示神经网络当前的参数,用下标 new 表示更新后的参数。然后执行下面的步骤,更新价值网络、策略网络、目标网络。

  1. 让目标策略网络做预测 : a ^ j + 1 − = μ ( s j + 1 ; θ n o w − ) + ξ :\hat{a}_{j+1}^-=\mu(s_{j+1};\theta_\mathrm{now}^-)+\xi :a^j+1=μ(sj+1;θnow)+ξ。其中向量 ξ \xi ξ的每个元素都独立从截断正态分布 C N ( 0 , σ 2 , − c , c ) \mathcal{CN}(0,\sigma^2,-c,c) CN(0,σ2,c,c) 中抽取。

  2. 让两个目标价值网络做预测:

q ^ 1 , j + 1 −   =   q ( s j + 1 , a ^ j + 1 − ; w 1 , n o w − ) 和 q ^ 2 , j + 1 −   =   q ( s j + 1 , a ^ j + 1 − ; w 2 , n o w − )   . \widehat{q}_{1,j+1}^{-}\:=\:q\big(s_{j+1},\widehat{a}_{j+1}^{-};\boldsymbol{w}_{1,\mathrm{now}}^{-}\big)\quad\text{和}\quad\widehat{q}_{2,j+1}^{-}\:=\:q\big(s_{j+1},\widehat{\boldsymbol{a}}_{j+1}^{-};\boldsymbol{w}_{2,\mathrm{now}}^{-}\big)\:. q 1,j+1=q(sj+1,a j+1;w1,now)q 2,j+1=q(sj+1,a j+1;w2,now).

  1. 计算 TD 目标:

y ^ j   =   r j   +   γ   ⋅   min ⁡ {   q ^ 1 , j + 1   ,   q ^ 2 , j + 1   } . \widehat y_{j}\:=\:r_{j}\:+\:\gamma\:\cdot\:\operatorname*{min}\Big\{\:\widehat q_{1,j+1}\:,\:\widehat q_{2,j+1}\:\Big\}. y j=rj+γmin{ q 1,j+1,q 2,j+1}.

  1. 让两个价值网络做预测:

q ^ 1 , j   =   q ( s j , a j ; w 1 , n o w ) 和 q ^ 2 , j   =   q ( s j , a j ; w 2 , n o w ) . \widehat q_{1,j}\:=\:q(s_{j},\boldsymbol{a}_{j};\boldsymbol{w}_{1,\mathrm{now}})\quad\text{和}\quad\widehat q_{2,j}\:=\:q(s_{j},\boldsymbol{a}_{j};\boldsymbol{w}_{2,\mathrm{now}}). q 1,j=q(sj,aj;w1,now)q 2,j=q(sj,aj;w2,now).

  1. 计算 TD 误差:

δ 1 , j   =   q ^ 1 , j   −   y ^ j 和 δ 2 , j   =   q ^ 2 , j   −   y ^ j . \delta_{1,j}\:=\:\widehat q_{1,j}\:-\:\widehat y_{j}\quad\text{和}\quad\delta_{2,j}\:=\:\widehat q_{2,j}\:-\:\widehat y_{j}. δ1,j=q 1,jy jδ2,j=q 2,jy j.

  1. 更新价值网络:

w 1 , n e w ← w 1 , n o w − α ⋅ δ 1 , j ⋅ ∇ w q ( s j , a j ; w 1 , n o w ) , w 2 , n e w ← w 2 , n o w − α ⋅ δ 2 , j ⋅ ∇ w q ( s j , a j ; w 2 , n o w ) . \begin{array}{rcl}w_{1,\mathrm{new}}&\leftarrow&w_{1,\mathrm{now}}-\alpha\cdot\delta_{1,j}\cdot\nabla_{\boldsymbol{w}}q\big(s_{j},\boldsymbol{a}_{j};\boldsymbol{w}_{1,\mathrm{now}}\big),\\w_{2,\mathrm{new}}&\leftarrow&\boldsymbol{w}_{2,\mathrm{now}}-\alpha\cdot\delta_{2,j}\cdot\nabla_{\boldsymbol{w}}q\big(s_{j},\boldsymbol{a}_{j};\boldsymbol{w}_{2,\mathrm{now}}\big).\end{array} w1,neww2,neww1,nowαδ1,jwq(sj,aj;w1,now),w2,nowαδ2,jwq(sj,aj;w2,now).

  1. 每隔 k k k 轮更新一次策略网络和三个目标网络:
  • 让策略网络做预测 : a ^ j = μ ( s j ; θ ) :\widehat{a}_j=\mu(s_j;\theta) :a j=μ(sj;θ)。然后更新策略网络:

θ n e w   ←   θ n o w   +   β ⋅   ∇ θ μ ( s j ; θ n o w )   ⋅   ∇ a q ( s j ,   a ^ j ;   w 1 , n o w ) . \theta_\mathrm{new}\:\leftarrow\:\theta_\mathrm{now}\:+\:\beta\cdot\:\nabla_{\theta}\boldsymbol{\mu}(s_{j};\boldsymbol{\theta}_\mathrm{now})\:\cdot\:\nabla_{\boldsymbol{a}}q(s_{j},\:\widehat{\boldsymbol{a}}_{j};\:\boldsymbol{w}_{1,\mathrm{now}}). θnewθnow+βθμ(sj;θnow)aq(sj,a j;w1,now).

  • 更新目标网络的参数:
    θ n e w − ← τ θ n e w + ( 1 − τ ) θ n o w − , w 1 , n e w − ← τ w 1 , n e w + ( 1 − τ ) w 1 , n o w − , w 2 , n e w − ← τ w 2 , n e w + ( 1 − τ ) w 2 , n o w − . \begin{aligned}\\ \theta_{\mathrm{new}}^{-}& \leftarrow\tau\theta_{\mathrm{new}}+(1-\tau)\theta_{\mathrm{now}}^{-}, \\ w_{1,\mathrm{new}}^{-}& \leftarrow\tau w_{1,\mathrm{new}}+\left(1-\tau\right)\boldsymbol{w}_{1,\mathrm{now}}^{-}, \\ w_{2,\mathrm{new}}^{-}& \leftarrow\tau\boldsymbol{w}_{2,\mathrm{new}}+(1-\tau)\boldsymbol{w}_{2,\mathrm{now}}^{-}. \end{aligned} θneww1,neww2,newτθnew+(1τ)θnow,τw1,new+(1τ)w1,now,τw2,new+(1τ)w2,now.

随机高斯策略

上一节用确定策略网络解决连续控制问题。本节用不同的方法做连续控制,本节的策略网络是随机的,它是随机正态分布 (也叫高斯分布)。

基本思路

我们先研究最简单的情形:自由度等于 1, 也就是说动作 a a a 是实数,动作空间 A ⊂ R A\subset\mathbb{R} AR 。把动作的均值记作 μ ( s ) \mu(s) μ(s),标准差记作 σ ( s ) \sigma(s) σ(s), 它们都是状态 s s s 的函数。用正态分布的概率密度函数作为策略函数:

π ( a ∣ s ) = 1 6.28 ⋅ σ ( s ) ⋅ exp ⁡ ( − [ a − μ ( s ) ] 2 2 ⋅ σ 2 ( s ) ) . ( 10.2 ) \pi(a|s)=\frac{1}{\sqrt{6.28}\cdot\sigma(s)}\cdot\exp\left(-\frac{\left[a-\mu(s)\right]^{2}}{2\cdot\sigma^{2}(s)}\right).\quad(10.2) π(as)=6.28 σ(s)1exp(2σ2(s)[aμ(s)]2).(10.2)

假如我们知道函数 μ ( s ) \mu(s) μ(s) σ ( s ) \sigma(s) σ(s) 的解析表达式,可以这样做控制:

  1. 观测到当前状态 s s s, 预测均值 μ ^ = μ ( s ) \widehat{\mu}=\mu(s) μ =μ(s) 和标准差 σ ^ = σ ( s ) \widehat{\sigma}=\sigma(s) σ =σ(s)
  2. 从正态分布中做随机抽样 : a ∼ N ( μ ^ , σ ^ 2 ) :a\sim\mathcal{N}(\widehat{\mu},\widehat{\sigma}^2) :aN(μ ,σ 2); 智能体执行动作 a a a

然而我们并不知道 μ ( s ) \mu(s) μ(s) σ ( s ) \sigma(s) σ(s) 是怎么样的函数。一个很自然的想法是用神经网络来近似这两个函数。把神经网络记作 μ ( s ; θ ) \mu(s;\theta) μ(s;θ) σ ( s ; θ ) \sigma(s;\theta) σ(s;θ),其中 θ \theta θ 表示神经网络中的可训练参数。但实践中最好不要直接近似标准差 σ \sigma σ,而是近似方差对数 ln ⁡ σ 2 \ln\sigma^{2} lnσ2。定义两个神经网络:

μ ( s ; θ ) 和 ρ ( s ; θ ) , \mu(s;\boldsymbol{\theta})\quad\text{和}\quad\rho(s;\boldsymbol{\theta}), μ(s;θ)ρ(s;θ),

分别用于预测均值和方差对数。可以按照图10.10来搭建神经网络。

在这里插入图片描述

神经网络的输入是状态 s s s,通常是向量、矩阵或者张量。神经网络有两个输出头,分别记作 μ ( s ; θ ) \mu(s;\boldsymbol{\theta}) μ(s;θ) ρ ( s ; θ ) \rho(s;\boldsymbol{\theta}) ρ(s;θ) 可以这样用神经网络做控制:

  1. 观测到当前状态 s s s, 计算均值 μ ^ = μ ( s ; θ ) \widehat{\mu}=\mu(s;\boldsymbol{\theta}) μ =μ(s;θ), 方差对数 ρ ^ = ρ ( s ; θ ) \widehat{\rho}=\rho(s;\boldsymbol{\theta}) ρ =ρ(s;θ), 以及方差 σ ^ 2 = \widehat{\sigma}^2= σ 2= exp ⁡ ( ρ ^ ) 。 \exp(\widehat{\rho})。 exp(ρ )

  2. 从正态分布中做随机抽样: a ∼ N ( μ ^ , σ ^ 2 ) a\sim\mathcal{N}(\widehat{\mu},\widehat{\sigma}^2) aN(μ ,σ 2); 智能体执行动作 a a a

用神经网络近似均值和标准差之后,公式 (10.2) 中的策略函数 π ( a ∣ s ) \pi(a|s) π(as) 变成了下面的策略网络:

π ( a   ∣   s ;   θ )   =   1 6.28 ⋅ exp ⁡ [ ρ ( s ; θ ) ] ⋅ exp ⁡ ( − [ a − μ ( s ; θ ) ] 2 2 ⋅ exp ⁡ [ ρ ( s ; θ ) ] ) . \pi(a\:|\:s;\:\boldsymbol{\theta})\:=\:\frac{1}{\sqrt{6.28\cdot\exp[\rho(s;\boldsymbol{\theta})]}}\cdot\exp\bigg(-\frac{\left[a-\mu(s;\boldsymbol{\theta})\right]^{2}}{2\cdot\exp[\rho(s;\boldsymbol{\theta})]}\bigg). π(as;θ)=6.28exp[ρ(s;θ)] 1exp(2exp[ρ(s;θ)][aμ(s;θ)]2).

实际做控制的时候,我们只需要神经网络 μ ( s ; θ ) \mu(s;\theta) μ(s;θ) ρ ( s ; θ ) \rho(s;\theta) ρ(s;θ), 用不到真正的策略网络 π ( a ∣ s ; θ ) \pi(a|s;\boldsymbol{\theta}) π(as;θ)

随机高斯策略网络

上一小节假设控制问题的自由度是 d = 1 d=1 d=1,也就是说动作 a a a 是标量。实际问题中的自由度 d d d 往往大于 1, 那么动作 a a a d d d 维向量。对于这样的问题,我们修改一下神经网络结构,让两个输出 μ ( s ; θ ) \mu(s;\theta) μ(s;θ) ρ ( s ; θ ) \rho(s;\theta) ρ(s;θ) d d d 维向量;见图10.11。

在这里插入图片描述

用标量 a i a_i ai表示动作向量 a a a 的第 i i i 个元素。用函数 μ i ( s ; θ ) \mu_i(s;\boldsymbol{\theta}) μi(s;θ) ρ i ( s ; θ ) \rho_i(s;\boldsymbol{\theta}) ρi(s;θ) 分别表示 μ ( s ; θ ) \mu(s;\boldsymbol{\theta}) μ(s;θ) ρ ( s ; θ ) \rho(s;\boldsymbol{\theta}) ρ(s;θ) 的第 i i i 个元素。我们用下面这个特殊的多元正态分布的概率密度函数作为策略网络:

π ( a ∣ s ; θ )   =   ∏ i = 1 d 1 6.28 ⋅ exp ⁡ [ ρ i ( s ; θ ) ] ⋅ exp ⁡ (   − [ a i − μ i ( s ; θ ) ] 2 2 ⋅ exp ⁡ [ ρ i ( s ; θ ) ] ) . \pi(\boldsymbol{a}|s;\boldsymbol{\theta})\:=\:\prod_{i=1}^{d}\frac{1}{\sqrt{6.28\cdot\exp[\rho_{i}(s;\boldsymbol{\theta})]}}\cdot\exp\Big(\:-\frac{\left[a_{i}-\mu_{i}(s;\boldsymbol{\theta})\right]^{2}}{2\cdot\exp[\rho_{i}(s;\boldsymbol{\theta})]}\Big). π(as;θ)=i=1d6.28exp[ρi(s;θ)] 1exp(2exp[ρi(s;θ)][aiμi(s;θ)]2).

做控制的时候只需要均值网络 μ ( s ; θ ) \mu(s;\theta) μ(s;θ) 和方差对数网络 ρ ( s ; θ ) \rho(s;\theta) ρ(s;θ),不需要策略网络 π ( u ∣ s ; θ ) s \pi(u|s;\theta)_s π(us;θ)s 做训练的时候也不需要 π ( a ∣ s ; θ ) \pi(a|s;\theta) π(as;θ), 而是要用辅助网络 f ( s , a ; θ ) f(s,\boldsymbol{a};\boldsymbol{\theta}) f(s,a;θ)。总而言之,策略网络 π \pi π 只是帮助你理解本节的方法而已,实际算法中不会出现 π。

图10.11描述了辅助网络 f ( s , a ; θ ) f(s,a;\theta) f(s,a;θ) 与μ、 ρ \rho ρ a a a 的关系。辅助网络具体是这样定义的:

f ( s , a ; θ ) = − 1 2 ∑ i = 1 d ( ρ i ( s ; θ ) + [ a i − μ i ( s ; θ ) ] 2 exp ⁡ [ ρ i ( s ; θ ) ] ) . f\big(s,\boldsymbol{a};\boldsymbol{\theta}\big)=-\frac{1}{2}\sum_{i=1}^{d}\bigg(\rho_{i}(s;\boldsymbol{\theta})+\frac{[a_{i}-\mu_{i}(s;\boldsymbol{\theta})]^{2}}{\exp[\rho_{i}(s;\boldsymbol{\theta})]}\bigg). f(s,a;θ)=21i=1d(ρi(s;θ)+exp[ρi(s;θ)][aiμi(s;θ)]2).

它的可训练参数 θ \theta θ都是从 μ ( s ; θ ) \mu(s;\theta) μ(s;θ) ρ ( s ; θ ) \rho(s;\theta) ρ(s;θ) 中来的。不难发现,辅助网络与策略网络有

这样的关系:

f ( s , a ; θ )   =   ln ⁡ π ( a ∣ s ; θ ) + C o n s t a n t . ( 10.3 ) \boxed{\quad f(s,\boldsymbol{a};\boldsymbol{\theta})\:=\:\ln\pi(\boldsymbol{a}|s;\boldsymbol{\theta})+\mathrm{Constant.}}\quad(10.3) f(s,a;θ)=lnπ(as;θ)+Constant.(10.3)

策略梯度

回忆一下之前学过的内容。在 t t t 时刻的折扣回报记作随机变量
U t   =   R t + γ ⋅ R t + 1 + γ 2 ⋅ R t + 2 + ⋯ + γ n − t ⋅ R n . U_{t}\:=\:R_{t}+\gamma\cdot R_{t+1}+\gamma^{2}\cdot R_{t+2}+\cdots+\gamma^{n-t}\cdot R_{n}. Ut=Rt+γRt+1+γ2Rt+2++γntRn.

动作价值函数 Q π ( s t , a t ) Q_\pi(s_t,a_t) Qπ(st,at) 是对折扣回报 U t U_t Ut 的条件期望。前面章节推导过策略梯度的蒙特卡洛近似:

g   =   Q π ( s , a ) ⋅ ∇ θ ln ⁡ π ( a ∣ s ; θ ) . \boldsymbol{g}\:=\:Q_{\pi}(s,\boldsymbol{a})\cdot\nabla_{\boldsymbol{\theta}}\ln\pi(\boldsymbol{a}|s;\boldsymbol{\theta}). g=Qπ(s,a)θlnπ(as;θ).

由公式 (10.3) 可得:

g   =   Q π ( s , a ) ⋅ ∇ θ f ( s , a ; θ ) . ( 10.4 ) \boldsymbol{g}\:=\:Q_{\pi}(s,\boldsymbol{a})\cdot\nabla_{\boldsymbol{\theta}}f(s,\boldsymbol{a};\boldsymbol{\theta}). \quad(10.4) g=Qπ(s,a)θf(s,a;θ).(10.4)
有了策略梯度,就可以学习参数 θ \theta θ。训练的过程大致如下:

  1. 搭建均值网络 μ ( s ; θ ) \mu(s;\theta) μ(s;θ)、方差对数网络 ρ ( s ; θ ) \rho(s;\theta) ρ(s;θ)、辅助网络 f ( s , a ; θ ) f(s,\boldsymbol{a};\boldsymbol{\theta}) f(s,a;θ)

  2. 让智能体与环境交互,记录每一步的状态、动作、奖励,并对参数 θ \theta θ 做更新:

(a). 观测到当前状态 s s s,计算均值、方差对数、方差:

μ ^   =   μ ( s ; θ ) , ρ ^   =   ρ ( s ; θ ) , σ ^ 2   =   exp ⁡ ( ρ ^ ) . \widehat{\mu}\:=\:\mu(s;\theta),\quad\widehat{\rho}\:=\:\rho(s;\theta),\quad\widehat{\sigma}^{2}\:=\:\exp{(\widehat{\rho})}. μ =μ(s;θ),ρ =ρ(s;θ),σ 2=exp(ρ ).

此处的指数函数 exp ⁡ ( ⋅ ) \exp(\cdot) exp() 应用到向量的每一个元素上。
(b). 设 μ ^ i \widehat{\mu}_i μ i σ ^ i \widehat{\sigma}_i σ i 分别是 d d d 维向量 μ ^ \widehat{\boldsymbol{\mu}} μ σ ^ \hat{\sigma} σ^ 的第 i i i 个元素。从正态分布中做抽样:
a i   ∼   N ( μ ^ i , σ ^ i 2 ) , ∀   i = 1 , ⋯   , d . a_{i}\:\sim\:\mathcal{N}\big(\widehat{\mu}_{i},\widehat{\sigma}_{i}^{2}\big),\quad\forall\:i=1,\cdots,d. aiN(μ i,σ i2),i=1,,d.

把得到的动作记作 a = [ a 1 , ⋯   , a d ] a=[a_1,\cdots,a_d] a=[a1,,ad]

(c ). 近似计算动作价值 : q ^ ≈ Q π ( s , a ) :\widehat{q}\approx Q_\pi(s,\boldsymbol{a}) :q Qπ(s,a)

​(d). 用反向传播计算出辅助网络关于参数 θ \theta θ 的梯度: ∇ θ f ( s , a ; θ ) \nabla_{\theta}f(s,\boldsymbol{a};\boldsymbol{\theta}) θf(s,a;θ)
​(e). 用策略梯度上升更新参数:
θ   ←   θ   +   β ⋅ q ^ ⋅ ∇ θ f ( s , a ; θ ) . \theta\:\leftarrow\:\theta\:+\:\beta\cdot\widehat{q}\cdot\nabla_{\boldsymbol{\theta}}f(s,\boldsymbol{a};\boldsymbol{\theta}). θθ+βq θf(s,a;θ).

此处的 β \beta β 是学习率。

用 REINFORCE 学习参数

REINFORCE 用实际观测的折扣回报 u t = ∑ k = t n γ k − t ⋅ r k u_t=\sum_{k=t}^n\gamma^{k-t}\cdot r_k ut=k=tnγktrk 代替动作价值 Q π ( s t , a t ) Q_\pi(s_t,\boldsymbol{a}_t) Qπ(st,at)
道理是这样的。动作价值是回报的期望:
Q π ( s t , a t )   =   E [ U t ∣   S t = s t , A t = a t ] . Q_{\pi}(s_{t},\boldsymbol{a}_{t})\:=\:\mathbb{E}\big[U_{t}\big|\:S_{t}=s_{t},A_{t}=\boldsymbol{a}_{t}\big]. Qπ(st,at)=E[Ut St=st,At=at].

随机变量 U t U_t Ut 的一个实际观测值 u t u_t ut 是期望的蒙特卡洛近似。这样一来,公式 (10.4) 中的策略梯度就能近似成

g   ≈   u t ⋅ ∇ θ f ( s , a ; θ ) . \boldsymbol{g}\:\approx\:u_{t}\cdot\nabla_{\boldsymbol{\theta}}f(s,\boldsymbol{a};\boldsymbol{\theta}). gutθf(s,a;θ).

在搭建好均值网络 μ ( s ; θ ) \mu(s;\theta) μ(s;θ)、方差对数网络 ρ ( s ; θ ) \rho(s;\theta) ρ(s;θ)、辅助网络 f ( s , a ; θ ) f(s,a;\theta) f(s,a;θ) 之后,我们用REINFORCE 更新参数 θ \theta θ。设当前参数为 θ n o w \theta_\mathrm{now} θnow。REINFORCE 重复以下步骤,直到收敛:

  1. μ ( s ; θ n o w ) \mu(s;\theta_\mathrm{now}) μ(s;θnow) ρ ( s ; θ n o w ) \rho(s;\theta_\mathrm{now}) ρ(s;θnow) 控制智能体与环境交互,完成一局游戏,得到一条轨迹

s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , ⋯   , s n , a n , r n . s_{1},\boldsymbol{a}_{1},r_{1},\quad s_{2},\boldsymbol{a}_{2},r_{2},\quad\cdots,\quad s_{n},\boldsymbol{a}_{n},r_{n}. s1,a1,r1,s2,a2,r2,,sn,an,rn.

  1. 计算所有的回报:
    u t = ∑ k = t T γ k − t ⋅ r k , ∀ t = 1 , ⋯   , n . u_t=\sum\limits_{k=t}^T\gamma^{k-t}\cdot r_k,\quad\forall t=1,\cdots,n. ut=k=tTγktrk,t=1,,n.

  2. 对辅助网络做反向传播,得到所有的梯度:

∇ θ f ( s t , a t ; θ n o w ) , ∀   t = 1 , ⋯   , n . \nabla_{\boldsymbol{\theta}}f\big(s_{t},\boldsymbol{a}_{t};\boldsymbol{\theta}_{\mathrm{now}}\big),\quad\forall\:t=1,\cdots\:,n. θf(st,at;θnow),t=1,,n.

  1. 用策略梯度上升更新参数:

θ n e w   ←   θ n o w   +   β ⋅ ∑ t = 1 n γ t − 1 ⋅ u t ⋅ ∇ θ f ( s t , a t ; θ n o w ) \theta_{\mathrm{new}}\:\leftarrow\:\theta_{\mathrm{now}}\:+\:\beta\cdot\sum_{t=1}^{n}\gamma^{t-1}\cdot u_{t}\cdot\nabla_{\theta}f\big(s_{t},\boldsymbol{a}_{t};\boldsymbol{\theta}_{\mathrm{now}}\big) θnewθnow+βt=1nγt1utθf(st,at;θnow)

上述算法标准的 REINFORCE, 效果不如使用基线的 REINFORCE。可以用基线改进上面描述的算法。REINFORCE 算法属于同策略(on-policy),不能使用经验回放。

用 Actor-Critic 学习参数

Actor-critic 需要搭建一个价值网络 q ( s , a ; w ) q(s,\boldsymbol{a};\boldsymbol{w}) q(s,a;w), 用于近似动作价值函数 Q π ( s , a ) Q_\pi(s,\boldsymbol{a}) Qπ(s,a)。价值网络的结构如图 10.12 所示。此外,还需要一个目标价值网络 q ( s , a ; w − ) q(s,a;w^-) q(s,a;w), 网络结构相同,但是参数不同。

在这里插入图片描述

在搭建好均值网络 μ \mu μ、方差对数网络 ρ \rho ρ、辅助网络 f f f、价值网络 q q q 之后,我们用 SARSA 算法更新价值网络参数 w w w, 用近似策略梯度更新控制器参数 θ \theta θ。设当前参数为 w n o w w_\mathrm{now} wnow θ n o w \theta_\mathrm{now} θnow。重复以下步骤更新价值网络参数、控制器参数,直到收敛:

  1. 实际观测到当前状态 s t s_t st,用控制器算出均值 μ ( s t ; θ n o w ) \mu(s_t;\theta_\mathrm{now}) μ(st;θnow) 和方差对数 ρ ( s t ; θ n o w ) \rho(s_t;\theta_\mathrm{now}) ρ(st;θnow),然后随机抽样得到动作 a t a_t at。智能体执行动作 a t a_t at, 观测到奖励 r t r_t rt 与新的状态 s t + 1 s_{t+1} st+1

  2. 计算均值 μ ( s t + 1 ; θ n o w ) \mu(s_{t+1};\theta_\mathrm{now}) μ(st+1;θnow) 和方差对数 ρ ( s t + 1 ; θ n o w ) \rho(s_{t+1};\theta_\mathrm{now}) ρ(st+1;θnow),然后随机抽样得到动作 a ~ t + 1 \tilde{a}_{t+1} a~t+1。这个动作只是假想动作,智能体不予执行。

  3. 用价值网络计算出:

q t ^   =   q ( s t , a t ; w n o w ) . \widehat{q_{t}}\:=\:q\big(s_{t},\boldsymbol{a_{t}};\boldsymbol{w_{\mathrm{now}}}\big). qt =q(st,at;wnow).

  1. 用目标网络计算出:

q ^ t + 1   =   q ( s t + 1 , a ~ t + 1 ; w n o w ˉ ) . \widehat q_{t+1}\:=\:q\big(s_{t+1},\tilde{\boldsymbol{a}}_{t+1};\bar{\boldsymbol{w_{\mathrm{now}}}}\big). q t+1=q(st+1,a~t+1;wnowˉ).

  1. 计算 TD 目标和 TD 误差:

y ^ t   =   r t + γ ⋅ q ^ t + 1 , δ t   =   q ^ t − y ^ t . \widehat y_{t}\:=\:r_{t}+\gamma\cdot\widehat q_{t+1},\quad\delta_{t}\:=\:\widehat q_{t}-\widehat y_{t}. y t=rt+γq t+1,δt=q ty t.

  1. 更新价值网络的参数:

w n e w   ←   w n o w − α ⋅ δ t ⋅ ∇ w q ( s t , a t ; w n o w ) . \boldsymbol{w_\mathrm{new}}\:\leftarrow\:\boldsymbol{w_\mathrm{now}}-\alpha\cdot\delta_{t}\cdot\nabla_{\boldsymbol{w}q}(s_{t},\boldsymbol{a_{t}};\boldsymbol{w_\mathrm{now}}). wnewwnowαδtwq(st,at;wnow).

  1. 更新策略网络参数参数:

θ n e w   ←   θ n o w + β ⋅ q ^ t ⋅ ∇ θ f ( s t , a t ; θ n o w ) \theta_{\mathrm{new}}\:\leftarrow\:\theta_{\mathrm{now}}+\beta\cdot\widehat{q}_{t}\cdot\nabla_{\boldsymbol{\theta}}f(s_{t},\boldsymbol{a}_{t};\boldsymbol{\theta}_{\mathrm{now}}) θnewθnow+βq tθf(st,at;θnow)

  1. 更新目标网络参数:

w n e w ˉ   ←   τ ⋅ w n e w   +   ( 1 − τ ) ⋅ w n o w − . \bar{\boldsymbol{w_\mathrm{new}}}\:\leftarrow\:\tau\cdot\boldsymbol{w_\mathrm{new}}\:+\:(1-\tau)\cdot\boldsymbol{w_\mathrm{now}^-}. wnewˉτwnew+(1τ)wnow.

算法中的 α \alpha α、β、 τ \tau τ都是超参数,需要手动调整。上述算法是标准的 actor-critic. 效果不如advantage actor-critic (A2C)。可以用A2C改进上述方法。

总结

离散控制问题的动作空间 A A A 是个有限的离散集,连续控制问题的动作空间 A A A 是个连续集。如果想将 DQN 等离散控制方法应用到连续控制问题,可以对连续动作空间做离散化,但这只适用于自由度较小的问题。

可以用确定策略网络 a = μ ( s ; θ ) a=\mu(s;\theta) a=μ(s;θ) 做连续控制。网络的输入是状态 s s s, 输出是动作 a a a, a a a 是向量,大小等于问题的自由度。

确定策略梯度 (DPG) 借助价值网络 q ( s , a ; w ) q(s,a;w) q(s,a;w) 训练确定策略网络。DPG 属于异策略,用行为策略收集经验,做经验回放更新策略网络和价值网络。

DPG 与 DQN 有很多相似之处,而且它们的训练都存在高估等问题。TD3 使用几种技巧改进 DPG: 截断双 Q 学习、往动作中加噪声、降低更新策略网络和目标网络的频率。

可以用随机高斯策略做连续控制。用两个神经网络分别近似高斯分布的均值和方差对数,并用策略梯度更新两个神经网络的参数。

后记

截至2024年1月30日13点04分,整理完王树森的《深度强化学习》的关于连续控制的笔记。

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-31 21:48:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-31 21:48:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-31 21:48:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-31 21:48:02       20 阅读

热门阅读

  1. QT基础篇(20)QT Quick Controls2新颖界面开发

    2024-01-31 21:48:02       27 阅读
  2. 回想起研发之路

    2024-01-31 21:48:02       33 阅读
  3. Hammerspoon配置

    2024-01-31 21:48:02       30 阅读
  4. Ruby详解及安装流程

    2024-01-31 21:48:02       51 阅读
  5. 基于单片机的感应自动门控制器的设计

    2024-01-31 21:48:02       38 阅读
  6. 3015. 按距离统计房屋对数目 I

    2024-01-31 21:48:02       32 阅读
  7. MATLAB中conv和filter函数的区别

    2024-01-31 21:48:02       29 阅读