网站seo推广怎么做,青岛永诚网络管理有限公司,西安建设局网站地址,我省推行制度推动山西品牌建设目录 第一部分#xff1a;基础知识1.机器学习基础2.蒙特卡洛估计3.强化学习基础知识3.1 马尔科夫决策过程马尔可夫决策过程#xff08;Markov decision process#xff0c;MDP#xff09;智能体环境状态状态空间动作动作空间奖励状态转移状态转移概率 3.2 策略策略定义 3.3… 目录 第一部分基础知识1.机器学习基础2.蒙特卡洛估计3.强化学习基础知识3.1 马尔科夫决策过程马尔可夫决策过程Markov decision processMDP智能体环境状态状态空间动作动作空间奖励状态转移状态转移概率 3.2 策略策略定义 3.3 随机性的来源随机性的两个来源马尔科夫性质(无后效性)轨迹 3.4 回报与折扣汇报回报折扣回报回报中的随机性 3.5 价值函数动作-价值函数 第二部分价值学习4.DQN与Q学习4.1 DQN4.2 时间差分(TD)算法4.3 用TD算法训练DQN4.4 Q学习算法4.5 同策略(On-policy) 与异策略(Off-policy)行为策略目标策略同策略异策略 5.SARSA算法5.1 表格形式的SARSASARSA表格形式Q学习与SARSA的对比 5.2 神经网络形式的SARSA价值网络 5.3 多步TD 目标5.4 蒙特卡洛与自举自举 6.价值学习高级技巧6.1 经验回放经验回放定义经验回放的优点经验回放局限性优先经验回放 6.2 高估问题及解决方法自举导致高估最大化导致高估高估的危害使用目标网络双Q学习算法 6.3 对决网络6.4 噪声网络噪声网络的原理 第三部分策略学习7.策略梯度方法7.1 策略网络策略学习策略网络 7.2 策略学习的目标函数7.3 策略梯度定理的证明近似策略梯度 7.4 REINFORCEREINFORCE简化推导训练流程 7.5 Actor-Critic价值网络算法推导训练过程用目标网络改进训练 8.带基线的策略梯度方法9.策略学习高级技巧10.连续控制11.对状态的不完全观测12.模仿学习 第四部分多智能体强化学习13.并行计算 第一部分基础知识
1.机器学习基础
2.蒙特卡洛估计
3.强化学习基础知识 基本术语状态state、状态空间state space、动作action、动作空间action space、智能体agent、环境environment、策略 (policy)、奖励reward、状态转移state transition。马尔可夫决策过程 (MDP) 通常指的是四元组 ( S , A , p , r ) (\mathcal{S}, \mathcal{A}, p, r) (S,A,p,r), 其中 S \mathcal{S} S 是状态空间, A \mathcal{A} A 是动作空间, p p p 是状态转移函数, r r r 是奖励函数。有时 MDP 指的是五元组 ( S , A , p , r , γ ) (\mathcal{S}, \mathcal{A}, p, r, \gamma) (S,A,p,r,γ),其中 γ \gamma γ 是折扣率。强化学习中的随机性来自于状态和动作。状态的随机性来源于状态转移, 动作的随机性来源于策略。奖励依赖于状态和动作, 因此奖励也具有随机性。回报或折扣回报是未来所有奖励的加和或加权和。回报取决于奖励奖励取决于状态和动作, 因此回报的随机性来自于未来的状态和动作。强化学习的目标是最大化回报而不是最大化奖励。动作价值函数 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a) 、最优动作价值函数 Q ⋆ ( s , a ) Q^{\star}(s, a) Q⋆(s,a) 、状态价值函数 V π ( s ) V_\pi(s) Vπ(s) 。强化学习分为基于模型的方法、无模型方法两大类。其中无模型方法又分为价值学习、策略学习两类。本书第二部分、第三部分会详细讲解价值学习和策略学习; 第 18 章用 AlphaGo 的例子讲解基于模型的方法。 3.1 马尔科夫决策过程
马尔可夫决策过程Markov decision processMDP
一个MDP 通常由状态空间、动作空间、状态转移函数、奖励函数、折扣因子等组成
智能体
强化学习中谁做动作谁就是智能体
环境
与智能体交互的对象
状态
在每个时刻环境有一个状态(state)可以理解为对当前时刻环境的概括
状态空间
指所有可能存在状态的集合记作花体字母 S \mathcal{S} S。状态空间可以是离散的也可以是连续的。状态空间可以是有限集合也可以是无限可数集合。在超级玛丽、星际争霸、无人驾驶这些例子中状态空间是无限集合存在无穷多种可能的状态。围棋、五子棋、中国象棋这些游戏中状态空间是离散有限集合可以枚举出所有可能存在的状态也就是棋盘上的格局。
动作
智能体基于当前状态所做出的决策
动作空间
指所有可能动作的集合记作花体字母 A \mathcal{A} A。动作空间可以是离散集合或连续集合可以是有限集合或无限集合。
奖励
是指在智能体执行一个动作之后环境返回给智能体的一个数值。奖励往往由我们自己来定义奖励定义得好坏非常影响强化学习的结果
通常假设奖励是当前状态 s s s 、当前动作 a a a 、下一时刻状态 s ′ s^{\prime} s′ 的函数, 把奖励函数记作 r ( s , a , s ′ ) r\left(s, a, s^{\prime}\right) r(s,a,s′) 。有时假设奖励仅仅是 s s s 和 a a a 的函数, 记作 r ( s , a ) r(s, a) r(s,a) 。我们总是假设奖励函数是有界的, 即对于所有 a ∈ A a \in \mathcal{A} a∈A 和 s , s ′ ∈ S s, s^{\prime} \in \mathcal{S} s,s′∈S, 有 ∣ r ( s , a , s ′ ) ∣ ∞ \left|r\left(s, a, s^{\prime}\right)\right|\infty ∣r(s,a,s′)∣∞ 。
此处隐含的假设是奖励函数是平稳的stationary即它不随着时刻t变化(不太理解)
状态转移
是指智能体从当前t时刻的状态 s s s转移到下一个时刻状态为 s ′ s^{\prime} s′的过程。
状态转移概率
状态转移可能是随机的强化学习通常假设状态转移随机随机性来源于环境。用状态转移概率函数描述状态转移 p ( s ′ ∣ s , a ) P ( S ′ s ′ ∣ S s , A a ) , p\left(s^{\prime} \mid s, a\right)\mathbb{P}\left(S^{\prime}s^{\prime} \mid Ss, Aa\right), p(s′∣s,a)P(S′s′∣Ss,Aa), 表示在当前状态 s s s, 智能体执行动作 a a a, 环境的状态变成 s ′ s^{\prime} s′的概率 大写字母表示随机变量小写字母表示观测值状态转移也可能是确定的下一个状态 s ′ s^{\prime} s′完全由s和a决定
3.2 策略
策略定义
根据观测到的状态如何做出决策即如何从动作空间中选取一个动作。强化学习的目标就是得到一个策略函数在每个时刻根据观测到的状态做出决策。
随机策略记随机策略函数 π : ( s , a ) ↦ [ 0 , 1 ] \pi:(s, a) \mapsto[0,1] π:(s,a)↦[0,1]是一个概率密度函数 : π ( a ∣ s ) P ( A a ∣ S s ) . \pi(a \mid s)\mathbb{P}(Aa \mid Ss) . π(a∣s)P(Aa∣Ss). 策略函数的输入是状态s和动作a输出是一个0到1之间的概率值。含义是给定状态s做出动作a的概率确定策略输入状态s直接输出相应的动作a
3.3 随机性的来源
随机性的两个来源
状态是随机的依赖于状态转移函数动作是随机的依赖于策略函数
马尔科夫性质(无后效性)
假设状态转移具有马有马尔可夫性质, 即 P ( S t 1 ∣ S t , A t ) P ( S t 1 ∣ S 1 , A 1 , S 2 , A 2 , ⋯ , S t , A t ) . \mathbb{P}\left(S_{t1} \mid S_t, A_t\right)\mathbb{P}\left(S_{t1} \mid S_1, A_1, S_2, A_2, \cdots, S_t, A_t\right) . P(St1∣St,At)P(St1∣S1,A1,S2,A2,⋯,St,At).
公式的意思是下一时刻状态 S t 1 S_{t1} St1 仅依赖于当前状态 S t S_t St 和动作 A t A_t At, 而不依赖于过去的状态和动作。 即在推导后面阶段的状态的时候我们只关心前一个阶段的状态值不关心这个状态是怎么一步一步推导出来的。
轨迹
指一回合episode游戏中智能体观测到的所有的状态、动作、奖励。
3.4 回报与折扣汇报
回报
回报return 是从当前时刻开始到本回合结束的所有奖励的总和所以回报也叫做累计奖励cumulative future reward U t R t R t 1 R t 2 R t 3 ⋯ R n U_tR_tR_{t1}R_{t2}R_{t3}\cdotsR_n UtRtRt1Rt2Rt3⋯Rn 强化学习的目标就是寻找一个策略使得回报的期望最大化
折扣回报
在MDP中通常使用折扣回报给未来的奖励做折扣 U t R t γ ⋅ R t 1 γ 2 ⋅ R t 2 γ 3 ⋅ R t 3 ⋯ U_tR_t\gamma \cdot R_{t1}\gamma^2 \cdot R_{t2}\gamma^3 \cdot R_{t3}\cdots UtRtγ⋅Rt1γ2⋅Rt2γ3⋅Rt3⋯其中 γ ∈ [ 0 , 1 ] \gamma∈[0,1] γ∈[0,1]叫做折扣率
回报中的随机性
t时刻的 U t U_t Ut依赖于t时刻往后所有的奖励奖励又依赖于状态与动作因此t时刻 U t U_t Ut是未知的。
3.5 价值函数
动作-价值函数 定义 在t时刻我们不知道 U t U_t Ut的值而我们又想预判 U t U_t Ut的值从而知道局势的好坏。该怎么办呢解决方案就是对 U t U_t Ut求期望消除掉其中的随机性。 假设我们已经观测到状态 s t s_t st而且做完决策选中动作 a t a_t at。那么 U t U_t Ut中的随机性来自于 t 1 t 1 t1时刻起的所有的状态和动作 S t 1 , A t 1 , S t 2 , A t 2 , ⋯ , S n , A n S_{t1}, A_{t1}, \quad S_{t2}, A_{t2}, \cdots, \quad S_n, A_n St1,At1,St2,At2,⋯,Sn,An对 U t U_t Ut 关于变量 S t 1 , A t 1 , ⋯ , S n , A n S_{t1}, A_{t1}, \cdots, S_n, A_n St1,At1,⋯,Sn,An 求条件期望, 得到的就是动作-价值函数 Q π ( s t , a t ) E S t 1 , A t 1 , ⋯ , S n , A n [ U t ∣ S t s t , A t a t ] Q_\pi\left(s_t, a_t\right)\mathbb{E}_{S_{t1}, A_{t1}, \cdots, S_n, A_n}\left[U_t \mid S_ts_t, A_ta_t\right] Qπ(st,at)ESt1,At1,⋯,Sn,An[Ut∣Stst,Atat] 动作价值函数 Q π ( s t , a t ) Q_\pi\left(s_t, a_t\right) Qπ(st,at) 仅依赖于 s t s_t st 与 a t a_t at, 而不依赖于 t 1 t1 t1 时刻及其之后的状态和动作因为随机变量 S t 1 , A t 1 , ⋯ , S n , A n S_{t1}, A_{t1}, \cdots, S_n, A_n St1,At1,⋯,Sn,An 都被期望消除了。由于动作 A t 1 , ⋯ , A n A_{t1}, \cdots, A_n At1,⋯,An 的概率质量函数都是 π \pi π, 公式中的期望依赖于 π \pi π; 用不同的 π \pi π, 求期望得出的结果就会不同。因此 Q π ( s t , a t ) Q_\pi\left(s_t, a_t\right) Qπ(st,at) 依赖于 π \pi π, 这就是为什么动作价值函数有下标 π 。 \pi_。 π。 因此动作价值函数依赖于三个因素当前状态 s t s_t st当前动作 a t a_t at策略函数 π \pi π 直观含义Q(s,a) 表示的是智能体在状态 s 下选择动作a 后并一直按照策略 π 行动所能获得的总奖励(回报)的期望 具体过程 1.起始:在状态s下选择动作 a。 2.转移:选择动作 a后环境根据转移概率转移到新状态s’并给予即时奖励 r1。 3.策略 π 执行:从状态 s’开始智能体按照策略 π选择下一个动作 a’ . 4.重复:从状态s’开始重复上述步骤(2和3)直到达到终止状态或无限循环。
第二部分价值学习
4.DQN与Q学习 D Q N \mathrm{DQN} DQN 是对最优动作价值函数 Q ⋆ Q^{\star} Q⋆ 的近似。 D Q N \mathrm{DQN} DQN 的输入是当前状态 s t s_t st, 输出是每个动作的 Q \mathrm{Q} Q 值。 D Q N \mathrm{DQN} DQN 要求动作空间 A \mathcal{A} A 是离散集合, 集合中的元素数量有限。如果动作空间 A \mathcal{A} A 的大小是 k k k, 那么 D Q N \mathrm{DQN} DQN 的输出就是 k k k 维向量。 D Q N \mathrm{DQN} DQN 可以用于做决策, 智能体执行 Q \mathrm{Q} Q 值最大的动作。TD 算法的目的在于让预测更接近实际观测。以驾车问题为例, 如果使用 T D \mathrm{TD} TD 算法,无需完成整个旅途就能做梯度下降更新模型。 理解TD 目标、TD 误差 Q \mathrm{Q} Q 学习算法是 T D \mathrm{TD} TD 算法的一种, 可以用于训练 D Q N \mathrm{DQN} DQN 。 Q \mathrm{Q} Q 学习算法由最优贝尔曼方程推导出。 Q \mathrm{Q} Q 学习算法属于异策略, 允许使用经验回放。由任意行为策略收集经验,存入经验回放数组。事后做经验回放, 用 TD 算法更新 DQN 参数。如果状态空间 S \mathcal{S} S 、动作空间 A \mathcal{A} A 都是较小的有限离散集合, 那么可以用表格形式的 Q \mathrm{Q} Q 学习算法学习 Q ⋆ Q^{\star} Q⋆ 。如今表格形式的 Q \mathrm{Q} Q 学习已经不常用。理解同策略、异策略、目标策略、行为策略这几个专业术语, 理解同策略与异策略的区别。异策略的好处在于允许做经验回放, 反复利用过去收集的经验。但这不意味着异策略一定优于同策略。 4.1 DQN
4.2 时间差分(TD)算法
4.3 用TD算法训练DQN
4.4 Q学习算法
上一节用TD算法训练DQNTD算法是一大类算法常见的有Q学习和SARSA。 Q Q Q 学习的目的是学到最优动作价值函数 Q ⋆ Q^{\star} Q⋆, 而 SARSA 的目的是学习动作价值函数 Q π Q_\pi Qπ。
Q学习的表格形式是用一个表格 Q ~ \widetilde{Q} Q 来近似 Q ⋆ Q^{\star} Q⋆首先初始化 Q ~ \widetilde{Q} Q , 可以让它是全零的表格。然后用表格形式的 Q \mathrm{Q} Q 学习算法更新 Q ~ \widetilde{Q} Q , 每次更新表格的一个元素。最终 Q ~ \widetilde{Q} Q 会收敛到 Q ⋆ Q^{\star} Q⋆ 。Q学习的表格法与策略无关
4.5 同策略(On-policy) 与异策略(Off-policy)
行为策略 定义 在强化学习中我们让智能体与环境交互记录下观测到的状态、动作、奖励用这些经验来学习一个策略函数。在这一过程中控制智能体与环境交互的策略被称作行为策略 作用 收集经验experience即观测的状态、动作、奖励
目标策略
定义 强化学习的目的是得到一个策略函数用这个策略函数来控制智能体。这个策略函数就叫做目标策略。
同策略
定义用相同的行为策略和目标策略
异策略
定义用不同的行为策略和目标策略
DQN 是异策略, 行为策略可以不同于目标策略, 可以用任意的行为策略收集经验, 比如最常用的行为策略是 ϵ \epsilon ϵ-greedy: a t { argmax a Q ( s t , a ; w ) , 以概率 ( 1 − ϵ ) ; 均匀抽取 A 中的一个动作, 以概率 ϵ . a_t \begin{cases}\operatorname{argmax}_a Q\left(s_t, a ; \boldsymbol{w}\right), \text { 以概率 }(1-\epsilon) ; \\ \text { 均匀抽取 } \mathcal{A} \text { 中的一个动作, } \text { 以概率 } \epsilon .\end{cases} at{argmaxaQ(st,a;w), 均匀抽取 A 中的一个动作, 以概率 (1−ϵ); 以概率 ϵ.
让行为策略带有随机性的好处在于能探索更多没见过的状态。在实验中, 初始的时候让 ϵ \epsilon ϵ 比较大 (比如 ϵ 0.5 \epsilon0.5 ϵ0.5 ) ; 在训练的过程中, 让 ϵ \epsilon ϵ 逐渐衰减, 在几十万步之后衰减到较小的值比如 ϵ 0.01 \epsilon0.01 ϵ0.01, 此后固定住 ϵ 0.01 \epsilon0.01 ϵ0.01 。
异策略的好处是可以用行为策略收集经验, 把 ( s t , a t , r t , s t 1 ) \left(s_t, a_t, r_t, s_{t1}\right) (st,at,rt,st1) 这样的四元组记录到一个数组里, 在事后反复利用这些经验去更新目标策略。这个数组被称作经验回放数组 replay buffer, 这种训练方式被称作经验回放experience replay。注意经验回放只适用于异策略, 不适用于同策略, 其原因是收集经验时用的行为策略不同于想要训练出的目标策略。
5.SARSA算法 SARSA 和 Q \mathrm{Q} Q 学习都属于 T D \mathrm{TD} TD 算法, 但是两者有所区别。SARSA 算法的目的是学习动作价值函数 Q π Q_\pi Qπ, 而 Q \mathrm{Q} Q 学习算法目的是学习最优动作价值函数 Q ⋆ Q^{\star} Q⋆ 。SARSA 算法是同策略, 而 Q \mathrm{Q} Q 学习算法是异策略。SARSA 不能用经验回放, 而 Q \mathrm{Q} Q 学习可以用经验回放。价值网络 q ( s , a ; w ) q(s, a ; \boldsymbol{w}) q(s,a;w) 是对动作价值函数 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a) 的近似。可以用 SARSA 算法学习价值网络。多步 TD 目标是对单步 TD 目标的推广。多步 TD 目标可以平衡蒙特卡洛和自举,取得比单步 TD 目标更好的效果。 5.1 表格形式的SARSA
SARSA表格形式
Actor-Critic方法中策略函数 π \pi π控制智能体被当做Actor(运动员)动作价值函数 Q π Q_{\pi} Qπ评价策略的好坏被当做Critic(评委)SARSA算法尝用于训练评委 Q π Q_{\pi} Qπ
用一个表格表示动作价值函数 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a)该表格与策略函数 π ( a ∣ s ) \pi(a \mid s) π(a∣s) 相关联; 如果 π \pi π 发生变化,表格 Q π Q_\pi Qπ 也会发生变化。因此SARSA算法与策略有关【但注意Q学习的表格与策略无关】
Q学习与SARSA的对比 Q \mathrm{Q} Q 学习的目标是学到表格 Q ~ \tilde{Q} Q~, 作为最优动作价值函数 Q ⋆ Q^{\star} Q⋆ 的近似。因为 Q ⋆ Q^{\star} Q⋆ 与 π \pi π 无关, 所以在理想情况下, 不论收集经验用的行为策略 π \pi π 是什么, 都不影响 Q \mathrm{Q} Q 学习得到的最优动作价值函数。因此, Q \mathrm{Q} Q 学习属于异策略off-policy), 允许行为策略区别于目标策略。Q 学习允许使用经验回放, 可以重复利用过时的经验。SARSA 算法的目标是学到表格 q q q, 作为动作价值函数 Q π Q_\pi Qπ 的近似。 Q π Q_\pi Qπ 与一个策略 π \pi π相对应, 用不同的策略 π \pi π, 对应 Q π Q_\pi Qπ 就会不同。策略 π \pi π 越好, Q π Q_\pi Qπ 的值越大。经验回放数组里的经验 ( s j , a j , r j , s j 1 ) \left(s_j, a_j, r_j, s_{j1}\right) (sj,aj,rj,sj1) 是过时的行为策略 π old \pi_{\text {old }} πold 收集到的, 与当前策略 π now \pi_{\text {now }} πnow 及其对而不能用过时的 π old \pi_{\text {old }} πold 收集到的经验。这就是为什么 SARSA 不能用经验回放的原因。 5.2 神经网络形式的SARSA
价值网络
价值网络如果状态空间 S \mathcal{S} S 是无限集, 那么我们无法用一张表格表示 Q π Q_\pi Qπ, 否则表格的行数是无穷。一种可行的方案是用一个神经网络 q ( s , a ; w ) q(s, a ; \boldsymbol{w}) q(s,a;w) 来近似 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a); 理想情况下 q ( s , a ; w ) Q π ( s , a ) , ∀ s ∈ S , a ∈ A . q(s, a ; \boldsymbol{w})Q_\pi(s, a), \quad \forall s \in \mathcal{S}, a \in \mathcal{A} . q(s,a;w)Qπ(s,a),∀s∈S,a∈A.
这个神经网络 q ( s , a ; w ) q(s, a ; \boldsymbol{w}) q(s,a;w) 被称为价值网络value network, 其中的 w \boldsymbol{w} w 表示神经网络中可训练的参数。神经网络的结构是人预先设定的比如有多少层, 每一层的宽度是多少), 而参数 w \boldsymbol{w} w 需要通过智能体与环境的交互来学习。
5.3 多步TD 目标
5.4 蒙特卡洛与自举
自举
自举意思是“用一个估算去更新同类的估算”类似于“自己把自己给举起来”
6.价值学习高级技巧 经验回放可以用于异策略算法。经验回放有两个好处打破相邻两条经验的相关性、重复利用收集的经验。优先经验回放是对经验回放的一种改进。在做经验回放的时候从经验回放数组中做加权随机抽样, T D \mathrm{TD} TD 误差的绝对值大的经验被赋予较大的抽样概率、较小的学习率。 Q \mathrm{Q} Q 学习算法会造成 D Q N \mathrm{DQN} DQN 高估真实的价值。高估的原因有两个第一最大化造成 T D \mathrm{TD} TD 目标高估真实价值; 第二, 自举导致高估传播。高估并不是由 DQN 本身的缺陷造成的, 而是由于 Q \mathrm{Q} Q 学习算法不够好。双 Q \mathrm{Q} Q 学习是对 Q \mathrm{Q} Q 学习算法的改进, 可以有效缓解高估。对决网络与 D Q N \mathrm{DQN} DQN 一样, 都是对最优动作价值函数 Q ⋆ Q_{\star} Q⋆ 的近似; 两者的唯一区别在于神经网络结构。对决网络由两部分组成 D ( s , a ; w D ) D\left(s, a ; \boldsymbol{w}^D\right) D(s,a;wD) 是对最优优势函数的近似, V ( s ; w V ) V\left(s ; \boldsymbol{w}^V\right) V(s;wV) 是对最优状态价值函数的近似。对决网络的训练与 D Q N \mathrm{DQN} DQN 完全相同。噪声网络是一种特殊的神经网络结构, 神经网络中的参数带有随机噪声。噪声网络可以用于 DQN 等多种深度强化学习模型。噪声网络中的噪声可以鼓励探索, 让智能体尝试不同的动作, 这有利于学到更好的策略。 6.1 经验回放
经验回放定义
经验回放experience replay是强化学习中一个重要的技巧可以大幅提升强化学习的表现。经验回放的意思是把智能体与环境交互的记录即经验储存到一个数组里事后反复利用这些经验训练智能体。这个数组被称为经验回放数组replay buffer 具体来说, 把智能体的轨迹划分成 ( s t , a t , r t , s t 1 ) \left(s_t, a_t, r_t, s_{t1}\right) (st,at,rt,st1) 这样的四元组, 存入一个数组。要人为指定数组的大小 (记作 b b b )。数组中只保留最近 b b b 条数据; 当数组存满之后, 删掉最旧的数据。数组的大小 b b b 是个需要调的超参数, 会影响训练的结果。通常设置 b b b 为 1 0 5 ∼ 1 0 6 10^5 \sim 10^6 105∼106 。
经验回放的优点 经验回放的一个好处在于打破序列的相关性。 训练 DQN 的时候, 每次我们用一个四元组对 DQN 的参数做一次更新。我们希望相邻两次使用的四元组是独立的。然而当智能体收集经验的时候, 相邻两个四元组 ( s t , a t , r t , s t 1 ) \left(s_t, a_t, r_t, s_{t1}\right) (st,at,rt,st1) 和 ( s t 1 , a t 1 , r t 1 , s t 2 ) \left(s_{t1}, a_{t1}, r_{t1}, s_{t2}\right) (st1,at1,rt1,st2) 有很强的相关性。依次使用这些强关联的四元组训练 DQN效果往往会很差。经验回放每次从数组里随机抽取一个四元组, 用来对 DQN 参数做一次更新。这样随机抽到的四元组都是独六的, 消除了相关性。 经验回放的另一个好处是重复利用收集到的经验而不是用一次就丢弃这样可以用更少的样本数量达到同样的表现。 注意暂时还不太理解的点 在阅读文献的时候请注意“样本数量”sample complexity与“更新次数”两者的区别。样本数量是指智能体从环境中获取的奖励r的数量。而一次更新的意思是从经验回放数组里取出一个或多个四元组用它对参数w 做一次更新。通常来说样本数量更重要因为在实际应用中收集经验比较困难。比如在机器人的应用中需要在现实世界做一次实验才能收集到一条经验花费的时间和金钱远大于做一次计算。相对而言做更新的次数不是那么重要更新次数只会影响训练时的计算量而已。
经验回放局限性
经验回放只适用于异策略不适用于同策略比如SRASAREINFORCEA2C
优先经验回放
优先经验回放prioritized experience replay是一种特殊的经验回放方法, 它比普通的经验回放效果更好既能让收敛更快也能让收敛时的平均回报更高。经验回放数组里有 b b b 个四元组, 普通经验回放每次均匀抽样得到一个样本——即四元组 ( s j , a j , r j , s j 1 ) \left(s_j, a_j, r_j, s_{j1}\right) (sj,aj,rj,sj1),用它来更新 DQN 的参数。优先经验回放给每个四元组一个权重, 然后根据权重做非均匀随机抽样。如果 DQN 对 ( s j , a j ) \left(s_j, a_j\right) (sj,aj) 的价值判断不准确, 即 Q ( s j , a j ; w ) Q\left(s_j, a_j ; \boldsymbol{w}\right) Q(sj,aj;w) 离 Q ∗ ( s j , a j ) Q^*\left(s_j, a_j\right) Q∗(sj,aj) 较远,则四元组 ( s j , a j , r j , s j 1 ) \left(s_j, a_j, r_j, s_{j1}\right) (sj,aj,rj,sj1) 应当有较高的权重。
6.2 高估问题及解决方法 Q \mathrm{Q} Q 学习算法有一个缺陷用 Q \mathrm{Q} Q 学习训练出的 D Q N \mathrm{DQN} DQN 会高估真实的价值, 而且高估通常是非均匀的。这个缺陷导致 DQN 的表现很差。高估问题并不是 DQN 模型的缺陷, 而是 Q \mathrm{Q} Q 学习算法的缺陷。 Q \mathrm{Q} Q 学习产生高估的原因有两个第一, 自举导致偏差的传播; 第二, 最大化导致 TD 目标高估真实价值。为了缓解高估, 需要从导致高估的两个原因下手, 改进 Q \mathrm{Q} Q 学习算法。双 Q \mathrm{Q} Q 学习算法是一种有效的改进, 可以大幅缓解高估及其危害。
自举导致高估
最大化导致高估
高估的危害
如果高估是均匀的则高估没有危害如果高估非均匀就会有危害
想要避免DQN 的高估要么切断自举要么避免最大化造成高估注意高估并不是DQN 自身的属性高估纯粹是算法造成的。想要避免高估就要用更好的算法替代原始的Q学习算法。
使用目标网络
使用目标网络训练DQN可以缓解DQN高估
双Q学习算法
造成 D Q N \mathrm{DQN} DQN 高估的原因不是 D Q N \mathrm{DQN} DQN 模型本身的缺陷, 而是 Q \mathrm{Q} Q 学习算法有不足之处: 第一, 自举造成偏差的传播; 第二, 最大化造成 T D \mathrm{TD} TD 目标的高估。在 Q \mathrm{Q} Q 学习算法中使用目标网络, 可以缓解自举造成的偏差, 但是无助于缓解最大化造成的高估。本小节介绍双 Q \mathbf{Q} Q 学习double Q \mathrm{Q} Q learning算法, 它在目标网络的基础上做改进, 缓解最大化造成的高估。 注本小节介绍的双 Q \mathrm{Q} Q 学习算法在文献中被称作 double D Q N \mathrm{DQN} DQN, 缩写 DDQN。本书不采用 D D Q N \mathrm{DDQN} DDQN 这名字, 因为这个名字比较误导。双 Q \mathrm{Q} Q 学习即所谓的 DDQN只是一种 T D \mathbf{T D} TD 算法而已, 它可以把 DQN 训练得更好。双 Q \mathrm{Q} Q 学习并没有用区别于 D Q N \mathrm{DQN} DQN 的模型。本节中的模型只有一个, 就是 D Q N \mathrm{DQN} DQN 。我们讨论的只是训练 D Q N \mathrm{DQN} DQN 的三种 T D \mathrm{TD} TD 算法原始的 Q \mathrm{Q} Q 学习、用目标网络的 Q \mathrm{Q} Q 学习、双 Q \mathrm{Q} Q 学习。
下面是三种算法的对比
注1如果使用原始 Q \mathrm{Q} Q 学习算法, 自举和最大化都会造成严重高估。在实践中, 应当尽量使用双 Q \mathrm{Q} Q 学习, 它是三种算法中最好的。
注2如果使用 SARSA 算法比如在 actor-critic 中), 自举的问题依然存在, 但是不存在最大化造成高估这一问题。对于 SARSA, 只需要解决自举问题, 所以应当将目标网络应用到 SARSA。
6.3 对决网络
对决网络 (dueling network)是对 DQN 的神经网络结构的改进。它的基本想法是将最优动作价值 Q ⋆ Q^{\star} Q⋆ 分解成最优状态价值 V ⋆ V_{\star} V⋆ 加最优优势 D ⋆ D_{\star} D⋆ 。对决网络的训练与 D Q N \mathrm{DQN} DQN 完全相同, 可以用 Q \mathrm{Q} Q 学习算法或者双 Q \mathrm{Q} Q 学习算法。
6.4 噪声网络
噪声网络noisy net是一种非常简单的方法, 可以显著提高 DQN 的表现。噪声网络的应用不局限于 DQN, 它可以用于几乎所有的深度强化学习方法。
噪声网络的原理
把神经网络中的参数 w \boldsymbol{w} w 替换成 μ σ ∘ ξ \mu\sigma \circ \xi μσ∘ξ 。此处的 μ , σ , ξ \mu, \sigma, \xi μ,σ,ξ 的形状与 w \boldsymbol{w} w完全相同。 μ 、 σ \mu 、 \sigma μ、σ 分别表示均值和标准差, 它们是神经网络的参数, 需要从经验中学习。 ξ \boldsymbol{\xi} ξ 是随机噪声, 它的每个元素独立从标准正态分布 N ( 0 , 1 ) \mathcal{N}(0,1) N(0,1) 中随机抽取。符号“o”表示逐项乘积。如果 w \boldsymbol{w} w 是向量, 那么有 w i μ i σ i ⋅ ξ i . w_i\mu_i\sigma_i \cdot \xi_i . wiμiσi⋅ξi.
如果 w w w 是矩阵, 那么有 w i j μ i j σ i j ⋅ ξ i j . w_{i j}\mu_{i j}\sigma_{i j} \cdot \xi_{i j} . wijμijσij⋅ξij.
噪声网络的意思是参数 w \boldsymbol{w} w 的每个元素 w i w_i wi 从均值为 μ i \mu_i μi 、标准差为 σ i \sigma_i σi 的正态分布中抽取。
第三部分策略学习
7.策略梯度方法 可以用神经网络 π ( a ∣ s ; θ ) \pi(a \mid s ; \boldsymbol{\theta}) π(a∣s;θ) 近似策略函数。策略学习的目标函数是 J ( θ ) E S [ V π ( S ) ] J(\boldsymbol{\theta})\mathbb{E}_S\left[V_\pi(S)\right] J(θ)ES[Vπ(S)],它的值越大, 意味着策略越好。策略梯度指的是 J ( θ ) J(\boldsymbol{\theta}) J(θ) 关于策略了参数 θ \boldsymbol{\theta} θ 的梯度。策略梯度定理将策略梯度表示成 g ( s , a ; θ ) ≜ Q π ( s , a ) ⋅ ∇ θ ln π ( a ∣ s ; θ ) \boldsymbol{g}(s, a ; \boldsymbol{\theta}) \triangleq Q_\pi(s, a) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta}) g(s,a;θ)≜Qπ(s,a)⋅∇θlnπ(a∣s;θ)的期望。REINFORCE 算法用实际观测的回报 u u u 近似 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a), 从而把 g ( s , a ; θ ) \boldsymbol{g}(s, a ; \boldsymbol{\theta}) g(s,a;θ) 近似成: g ~ ( s , a ; θ ) ≜ u ⋅ ∇ θ ln π ( a ∣ s ; θ ) . \tilde{\boldsymbol{g}}(s, a ; \boldsymbol{\theta}) \triangleq u \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta}) . g~(s,a;θ)≜u⋅∇θlnπ(a∣s;θ).REINFORCE 算法做梯度上升更新策略网络 θ ← θ β ⋅ g ~ ( s , a ; θ ) \boldsymbol{\theta} \leftarrow \boldsymbol{\theta}\beta \cdot \tilde{\boldsymbol{g}}(s, a ; \boldsymbol{\theta}) θ←θβ⋅g~(s,a;θ) 。Actor-critic 用价值网络 q ( s , a ; w ) q(s, a ; \boldsymbol{w}) q(s,a;w) 近似 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a), 从而把 g ( s , a ; θ ) \boldsymbol{g}(s, a ; \boldsymbol{\theta}) g(s,a;θ) 近似成: g ^ ( s , a ; θ ) ≜ q ( s , a ; w ) ⋅ ∇ θ ln π ( a ∣ s ; θ ) . \widehat{\boldsymbol{g}}(s, a ; \boldsymbol{\theta}) \triangleq q(s, a ; \boldsymbol{w}) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta}) . g (s,a;θ)≜q(s,a;w)⋅∇θlnπ(a∣s;θ). Actor-critic 用 SARSA 算法更新价值网络 q q q, 用梯度上升更新策略网络: θ ← θ β \boldsymbol{\theta} \leftarrow \boldsymbol{\theta}\beta θ←θβ. g ^ ( s , a ; θ ) \widehat{\boldsymbol{g}}(s, a ; \boldsymbol{\theta}) g (s,a;θ) 策略网络→策略学习描述成最大化问题→策略梯度→用REINFORCE和Actor-critic训练策略网络→本章介绍的REINFORCE 和actor-critic 只是帮助大家理解算法而已实际效果并不好
7.1 策略网络
策略学习
策略学习的意思是通过求解一个优化问题学出最优策略函数或它的近似函数比如策略网络
策略网络
用神经网络 π ( a ∣ s ; θ ) \pi(a \mid s ; \boldsymbol{\theta}) π(a∣s;θ) 近似策略函数 π ( a ∣ s ) \pi(a \mid s) π(a∣s) 。神经网络 π ( a ∣ s ; θ ) \pi(a \mid s ; \boldsymbol{\theta}) π(a∣s;θ) 被称为策略网络。 θ \boldsymbol{\theta} θ 表示神经网络的参数; 一开始随机初始化 θ \theta θ, 随后利用收集的状态、动作、奖励去更新 θ \boldsymbol{\theta} θ 。
7.2 策略学习的目标函数 回报 U t U_t Ut 是从 t t t 时刻开始的所有奖励之和。 U t U_t Ut 依赖于 t t t 时刻开始的所有状态和动作: S t , A t , S t 1 , A t 1 , S t 2 , A t 2 , ⋯ S_t, A_t, S_{t1}, A_{t1}, \quad S_{t2}, A_{t2}, \cdots St,At,St1,At1,St2,At2,⋯ 在 t t t 时刻, U t U_t Ut 是随机变量, 它的不确定性来自于未来未知的状态和动作。 动作价值函数的定义是: Q π ( s t , a t ) E [ U t ∣ S t s t , A t a t ] . Q_\pi\left(s_t, a_t\right)\mathbb{E}\left[U_t \mid S_ts_t, A_ta_t\right] . Qπ(st,at)E[Ut∣Stst,Atat].条件期望把 t t t 时刻状态 s t s_t st 和动作 a t a_t at 看做已知观测值, 把 t 1 t1 t1 时刻后的状态和动作看做未知变量, 并消除这些变量。 状态价值函数的定义 V π ( s t ) E A t ∼ π ( ⋅ ∣ s t ; θ ) [ Q π ( s t , A t ) ] . V_\pi\left(s_t\right)\mathbb{E}_{A_t \sim \pi\left(\cdot \mid s_t ; \theta\right)}\left[Q_\pi\left(s_t, A_t\right)\right] . Vπ(st)EAt∼π(⋅∣st;θ)[Qπ(st,At)].状态价值既依赖于当前状态 s t s_t st, 也依赖于策略网络 π \pi π 的参数 θ \boldsymbol{\theta} θ 。 当前状态 s t s_t st 越好, 则 V π ( s t ) V_\pi\left(s_t\right) Vπ(st) 越大, 即回报 U t U_t Ut 的期望越大。例如, 在超级玛丽游戏中, 如果玛丽奥已经接近终点也就是说当前状态 s t s_t st 很好, 那么回报的期望就会很大。策略 π \pi π 越好即参数 θ \boldsymbol{\theta} θ 越好, 那么 V π ( s t ) V_\pi\left(s_t\right) Vπ(st) 也会越大。例如, 从同一起点出发打游戏, 高手好的策略的期望回报远高于初学者差的策略。 如果一个策略很好, 那么状态价值 V π ( S ) V_\pi(S) Vπ(S) 的均值应当很大。因此我们定义目标函数 J ( θ ) E S [ V π ( S ) ] J(\boldsymbol{\theta})\mathbb{E}_S\left[V_\pi(S)\right] J(θ)ES[Vπ(S)] 这个目标函数排除掉了状态 S S S 的因素, 只依赖于策略网络 π \pi π 的参数 θ \boldsymbol{\theta} θ; 策略越好, 则 J ( θ ) J(\theta) J(θ) 越大。所以策略学习可以描述为这样一个优化问题: max θ J ( θ ) \max _{\boldsymbol{\theta}} J(\boldsymbol{\theta}) θmaxJ(θ) 希望通过对策略网络参数 θ \boldsymbol{\theta} θ 的更新, 使得目标函数 J ( θ ) J(\boldsymbol{\theta}) J(θ) 越来越大, 也就意味着策略网络越来越强。想要求解最大化问题, 显然可以用梯度上升更新 θ \boldsymbol{\theta} θ, 使得 J ( θ ) J(\boldsymbol{\theta}) J(θ) 增大。设当前策略网络的参数为 θ now \theta_{\text {now }} θnow , 做梯度上升更新参数, 得到新的参数 θ new \theta_{\text {new }} θnew : θ new ← θ now β ⋅ ∇ θ J ( θ now ) . \boldsymbol{\theta}_{\text {new }} \leftarrow \boldsymbol{\theta}_{\text {now }}\beta \cdot \nabla_{\boldsymbol{\theta}} J\left(\boldsymbol{\theta}_{\text {now }}\right) . θnew ←θnow β⋅∇θJ(θnow ). 此处的 β \beta β 是学习率, 需要手动调整。上面的公式就是训练策略网络的基本思路, 其中的梯度 ∇ θ J ( θ now ) ≜ ∂ J ( θ ) ∂ θ ∣ θ θ now \left.\nabla_{\boldsymbol{\theta}} J\left(\boldsymbol{\theta}_{\text {now }}\right) \triangleq \frac{\partial J(\boldsymbol{\theta})}{\partial \boldsymbol{\theta}}\right|_{\boldsymbol{\theta}\theta_{\text {now }}} ∇θJ(θnow )≜∂θ∂J(θ) θθnow 被称作策略梯度。策略梯度可以写成下面定理中的期望形式。之后的算法推导都要基于这个定理, 并对其中的期望做近似。
7.3 策略梯度定理的证明
证明过程见书
近似策略梯度
策略学习可以描述为一个最大化问题 max θ { J ( θ ) ≜ E S [ V π ( S ) ] } . \max _\theta\left\{J(\theta) \triangleq \mathbb{E}_S\left[V_\pi(S)\right]\right\} . θmax{J(θ)≜ES[Vπ(S)]}.
求解这个最大化问题最简单的算法就是梯度上升: θ ← θ β ⋅ ∇ θ J ( θ ) . \boldsymbol{\theta} \leftarrow \boldsymbol{\theta}\beta \cdot \nabla_{\boldsymbol{\theta}} J(\theta) . θ←θβ⋅∇θJ(θ).
其中的 ∇ θ J ( θ ) \nabla_\theta J(\theta) ∇θJ(θ) 是策略梯度。
策略梯度表示为: ∇ θ J ( θ ) E S [ E A ∼ π ( ⋅ ∣ S ; θ ) [ Q π ( S , A ) ⋅ ∇ θ ln π ( A ∣ S ; θ ) ] ] . \nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta})\mathbb{E}_S\left[\mathbb{E}_{A \sim \pi(\cdot \mid S ; \boldsymbol{\theta})}\left[Q_\pi(S, A) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(A \mid S ; \boldsymbol{\theta})\right]\right] . ∇θJ(θ)ES[EA∼π(⋅∣S;θ)[Qπ(S,A)⋅∇θlnπ(A∣S;θ)]].
解析求出这个期望是不可能的, 因为我们并不知道状态 S S S 概率密度函数; 即使我们知道 S S S 的概率密度函数, 能够通过连加或者定积分求出期望, 我们也不愿意这样做, 因为连加或者定积分的计算量非常大。
回忆一下, 第 2 章介绍了期望的蒙特卡洛近似方法, 可以将这种方法用于近似策略梯度。每次从环境中观测到一个状态 s s s, 它相当于随机变量 S S S 的观测值。然后再根据当前的策略网络策略网络的参数必须是最新的随机抽样得出一个动作 a ∼ π ( ⋅ ∣ s ; θ ) . a \sim \pi(\cdot \mid s ; \theta) . a∼π(⋅∣s;θ).
计算随机梯度: g ( s , a ; θ ) ≜ Q π ( s , a ) ⋅ ∇ θ ln π ( a ∣ s ; θ ) . \boldsymbol{g}(s, a ; \boldsymbol{\theta}) \triangleq Q_\pi(s, a) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta}) . g(s,a;θ)≜Qπ(s,a)⋅∇θlnπ(a∣s;θ).
很显然, g ( s , a ; θ ) \boldsymbol{g}(s, a ; \boldsymbol{\theta}) g(s,a;θ) 是策略梯度 ∇ θ J ( θ ) \nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta}) ∇θJ(θ) 的无偏估计: ∇ θ J ( θ ) E S [ E A ∼ π ( ⋅ ∣ S ; θ ) [ g ( S , A ; θ ) ] ] \nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta})\mathbb{E}_S\left[\mathbb{E}_{A \sim \pi(\cdot \mid S ; \boldsymbol{\theta})}[\boldsymbol{g}(S, A ; \boldsymbol{\theta})]\right] ∇θJ(θ)ES[EA∼π(⋅∣S;θ)[g(S,A;θ)]] 应用上述结论, 我们可以做随机梯度上升来更新 θ \boldsymbol{\theta} θ, 使得目标函数 J ( θ ) J(\theta) J(θ) 逐渐增长: θ ← θ β ⋅ g ( s , a ; θ ) . \boldsymbol{\theta} \leftarrow \boldsymbol{\theta}\beta \cdot \boldsymbol{g}(s, a ; \boldsymbol{\theta}) . θ←θβ⋅g(s,a;θ).
此处的 β \beta β 是学习率, 需要手动调整。但是这种方法仍然不可行, 我们计算不出 g ( s , a ; θ ) \boldsymbol{g}(s, a ; \boldsymbol{\theta}) g(s,a;θ),原因在于我们不知道动作价值函数 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a) 。在后面两节中, 我们用两种方法对 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a)做近似: 一种方法是 REINFORCE, 用实际观测的回报 u u u 近似 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a); 另一种方法是 actor-critic, 用神经网络 q ( s , a ; w ) q(s, a ; \boldsymbol{w}) q(s,a;w) 近似 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a) 。
7.4 REINFORCE
策略梯度 ∇ θ J ( θ ) \nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta}) ∇θJ(θ) 的无偏估计是下面的随机梯度: g ( s , a ; θ ) ≜ Q π ( s , a ) ⋅ ∇ θ ln π ( a ∣ s ; θ ) . \boldsymbol{g}(s, a ; \boldsymbol{\theta}) \triangleq Q_\pi(s, a) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta}) . g(s,a;θ)≜Qπ(s,a)⋅∇θlnπ(a∣s;θ).
但是其中的动作价值函数 Q π Q_\pi Qπ 是未知的导致无法直接计算 g ( s , a ; θ ) \boldsymbol{g}(s, a ; \boldsymbol{\theta}) g(s,a;θ) 。REINFORCE 进一步对 Q π Q_\pi Qπ 做蒙特卡洛近似, 把它替换成回报 u u u 。
REINFORCE简化推导
设一局游戏有 n n n 步, 一局中的奖励记作 R 1 , ⋯ , R n R_1, \cdots, R_n R1,⋯,Rn 。 t t t 时刻的折扣回报定义为: U t ∑ k t n γ k − t ⋅ R k U_t\sum_{kt}^n \gamma^{k-t} \cdot R_k Utkt∑nγk−t⋅Rk
而动作价值定义为 U t U_t Ut 的条件期望: Q π ( s t , a t ) E [ U t ∣ S t s t , A t a t ] . Q_\pi\left(s_t, a_t\right)\mathbb{E}\left[U_t \mid S_ts_t, A_ta_t\right] . Qπ(st,at)E[Ut∣Stst,Atat].
我们可以用蒙特卡洛近似上面的条件期望。从时刻 t t t 开始, 智能体完成一局游戏, 观测到全部奖励 r t , ⋯ , r n r_t, \cdots, r_n rt,⋯,rn, 然后可以计算出 u t ∑ k t n γ k − t ⋅ r k u_t\sum_{kt}^n \gamma^{k-t} \cdot r_k ut∑ktnγk−t⋅rk 。因为 u t u_t ut 是随机变量 U t U_t Ut 的观测值, 所以 u t u_t ut 是上面公式中期望的蒙特卡洛近似(不太理解)。在实践中, 可以用 u t u_t ut 代替 Q π ( s t , a t ) Q_\pi\left(s_t, a_t\right) Qπ(st,at),那么随机梯度 g ( s t , a t ; θ ) \boldsymbol{g}\left(s_t, a_t ; \boldsymbol{\theta}\right) g(st,at;θ) 可以近似成 g ~ ( s t , a t ; θ ) u t ⋅ ∇ θ ln π ( a t ∣ s t ; θ ) . \tilde{\boldsymbol{g}}\left(s_t, a_t ; \boldsymbol{\theta}\right)u_t \cdot \nabla_{\boldsymbol{\theta}} \ln \pi\left(a_t \mid s_t ; \boldsymbol{\theta}\right) . g~(st,at;θ)ut⋅∇θlnπ(at∣st;θ). g ~ \tilde{\boldsymbol{g}} g~ 是 g \boldsymbol{g} g 的无偏估计所以也是策略梯度 ∇ θ J ( θ ) \nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta}) ∇θJ(θ) 的无偏估计 g ~ \tilde{\boldsymbol{g}} g~ 也是一种随机梯度。 我们可以用反向传播计算出 ln π \ln \pi lnπ 关于 θ \boldsymbol{\theta} θ 的梯度, 而且可以实际观测到 u t u_t ut, 于是我们可以实际计算出随机梯度 g ~ \tilde{\boldsymbol{g}} g~ 的值。有了随机梯度的值, 我们可以做随机梯度上升更新策略网络参数 θ \theta θ : θ ← θ β ⋅ g ~ ( s t , a t ; θ ) . \boldsymbol{\theta} \leftarrow \boldsymbol{\theta}\beta \cdot \tilde{\boldsymbol{g}}\left(s_t, a_t ; \boldsymbol{\theta}\right) . θ←θβ⋅g~(st,at;θ).
根据上述推导, 我们得到了训练策略网络的算法, 即 REINFORCE。
训练流程
当前策略网络的参数是 θ now。 \theta_{\text {now。 }} θnow。 REINFORCE 执行下面的步骤对策略网络的参数做一次更新 用策略网络 θ now \theta_{\text {now }} θnow 控制智能体从头开始玩一局游戏 从开始玩到结束, 得到一条轨迹 (trajectory): s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , ⋯ , s n , a n , r n . s_1, a_1, r_1, \quad s_2, a_2, r_2, \quad \cdots, \quad s_n, a_n, r_n . s1,a1,r1,s2,a2,r2,⋯,sn,an,rn. 计算所有的回报: u t ∑ k t n γ k − t ⋅ r k , ∀ t 1 , ⋯ , n u_t\sum_{kt}^n \gamma^{k-t} \cdot r_k, \quad \forall t1, \cdots, n utkt∑nγk−t⋅rk,∀t1,⋯,n 用 { ( s t , a t ) } t 1 n \left\{\left(s_t, a_t\right)\right\}_{t1}^n {(st,at)}t1n 作为数据, 做反向传播计算: ∇ θ ln π ( a t ∣ s t ; θ now ) , ∀ t 1 , ⋯ , n . \nabla_{\boldsymbol{\theta}} \ln \pi\left(a_t \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right), \quad \forall t1, \cdots, n . ∇θlnπ(at∣st;θnow ),∀t1,⋯,n. 做随机梯度上升更新策略网络参数: θ new ← θ now β ⋅ ∑ t 1 n γ t − 1 ⋅ u t ⋅ ∇ θ ln π ( a t ∣ s t ; θ now ) ⏟ 即随机梯度 g ~ ( s t , a t ; θ now ) . \boldsymbol{\theta}_{\text {new }} \leftarrow \boldsymbol{\theta}_{\text {now }}\beta \cdot \sum_{t1}^n \gamma^{t-1} \cdot \underbrace{u_t \cdot \nabla_{\boldsymbol{\theta}} \ln \pi\left(a_t \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right)}_{\text {即随机梯度 } \tilde{\boldsymbol{g}}\left(s_t, a_t ; \theta_{\text {now }}\right)} . θnew ←θnow β⋅t1∑nγt−1⋅即随机梯度 g~(st,at;θnow ) ut⋅∇θlnπ(at∣st;θnow ).
注在算法最后一步中, 随机梯度前面乘以系数 γ t − 1 \gamma^{t-1} γt−1 。读者可能会好奇, 为什么需要这个系数呢? 原因是这样的: 前面 REINFORCE 的推导是简化的, 而非严谨的数学推导; 按照我们简化的推导, 不应该乘以系数 γ t − 1 \gamma^{t-1} γt−1 。下一小节做严格的数学推导, 得出的 REINFORCE 算法需要系数 γ t − 1 \gamma^{t-1} γt−1 。读者只要知道这个事实就行了, 不必读懂下一小节的数学推导。 注REINFORCE 属于同策略on-policy, 要求行为策略behavior policy与目标策略 (target policy)相同, 两者都必须是策略网络 π ( a ∣ s ; θ now ) \pi\left(a \mid s ; \boldsymbol{\theta}_{\text {now }}\right) π(a∣s;θnow ), 其中 θ now \boldsymbol{\theta}_{\text {now }} θnow 是策略网络当前的参数。所以经验回放不适用于 REINFORCE。
7.5 Actor-Critic
本节的actor-critic用神经网络近似 Q π Q_{\pi} Qπ
价值网络
Actor-critic 方法用一个神经网络近似动作价值函数 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a), 这个神经网络叫做“价值网络”, 记为 q ( s , a ; w ) q(s, a ; \boldsymbol{w}) q(s,a;w), 其中的 w \boldsymbol{w} w 表示神经网络中可训练的参数。价值网络的输入是状态 s s s, 输出是每个动作的价值。
虽然价值网络 q ( s , a ; w ) q(s, a ; \boldsymbol{w}) q(s,a;w) 与之前学的 DQN 有相同的结构, 但是两者的意义不同, 训练算法也不同。
价值网络是对动作价值函数 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a) 的近似。而 DQN 则是对最优动作价值函数 Q ⋆ ( s , a ) Q_{\star}(s, a) Q⋆(s,a) 的近似。对价值网络的训练使用的是 SARSA 算法, 它属于同策略, 不能用经验回放。对 DQN 的训练使用的是 Q \mathrm{Q} Q 学习算法, 它属于异策略, 可以用经验回放。
算法推导
训练策略网络 训练策略网络的基本想法是用策略梯度 ∇ θ J ( θ ) \nabla_\theta J(\theta) ∇θJ(θ) 的近似来更新参数 θ \boldsymbol{\theta} θ 。之前我们推导过策略梯度的无偏估计 g ( s , a ; θ ) ≜ Q π ( s , a ) ⋅ ∇ θ ln π ( a ∣ s ; θ ) . \boldsymbol{g}(s, a ; \boldsymbol{\theta}) \triangleq Q_\pi(s, a) \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta}) . g(s,a;θ)≜Qπ(s,a)⋅∇θlnπ(a∣s;θ). 价值网络 q ( s , a ; w ) q(s, a ; \boldsymbol{w}) q(s,a;w) 是对动作价值函数 Q π ( s , a ) Q_\pi(s, a) Qπ(s,a) 的近似所以把上面公式中的 Q π Q_\pi Qπ 替换成价值网络得到近似策略梯度 g ^ ( s , a ; θ ) ≜ q ( s , a ; w ) ⏟ 评委的打分 ⋅ ∇ θ ln π ( a ∣ s ; θ ) . \widehat{\boldsymbol{g}}(s, a ; \boldsymbol{\theta}) \triangleq \underbrace{q(s, a ; \boldsymbol{w})}_{\text {评委的打分 }} \cdot \nabla_{\boldsymbol{\theta}} \ln \pi(a \mid s ; \boldsymbol{\theta}) . g (s,a;θ)≜评委的打分 q(s,a;w)⋅∇θlnπ(a∣s;θ). 最后做梯度上升更新策略网络的参数: θ ← θ β ⋅ g ^ ( s , a ; θ ) . \boldsymbol{\theta} \leftarrow \boldsymbol{\theta}\beta \cdot \widehat{\boldsymbol{g}}(s, a ; \boldsymbol{\theta}) . θ←θβ⋅g (s,a;θ). 训练价值网络——SARSA
训练过程
下面概括 actor-critic 训练流程。设当前策略网络参数是 θ now \theta_{\text {now }} θnow , 价值网络参数是 w now。 w_{\text {now。 }} wnow。 执行下面的步骤, 将参数更新成 θ new \theta_{\text {new }} θnew 和 w new w_{\text {new }} wnew :
观测到当前状态 s t s_t st, 根据策略网络做决策: a t ∼ π ( ⋅ ∣ s t ; θ now ) a_t \sim \pi\left(\cdot \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right) at∼π(⋅∣st;θnow ), 并让智能体执行动作 a t a_t at 。从环境中观测到奖励 r t r_t rt 和新的状态 s t 1 s_{t1} st1 。根据策略网络做决策: a ~ t 1 ∼ π ( ⋅ ∣ s t 1 ; θ now ) \tilde{a}_{t1} \sim \pi\left(\cdot \mid s_{t1} ; \boldsymbol{\theta}_{\text {now }}\right) a~t1∼π(⋅∣st1;θnow ), 但不让智能体执行动作 a ~ t 1 \tilde{a}_{t1} a~t1 。让价值网络打分: q ^ t q ( s t , a t ; w now ) 和 q ^ t 1 q ( s t 1 , a ~ t 1 ; w now ) \widehat{q}_tq\left(s_t, a_t ; \boldsymbol{w}_{\text {now }}\right) \quad \text { 和 } \quad \widehat{q}_{t1}q\left(s_{t1}, \tilde{a}_{t1} ; \boldsymbol{w}_{\text {now }}\right) q tq(st,at;wnow ) 和 q t1q(st1,a~t1;wnow )计算 TD 目标和 TD 误差: y ^ t r t γ ⋅ q ^ t 1 和 δ t q ^ t − y ^ t . \widehat{y}_tr_t\gamma \cdot \widehat{q}_{t1} \quad \text { 和 } \quad \delta_t\widehat{q}_t-\widehat{y}_t \text {. } y trtγ⋅q t1 和 δtq t−y t. 更新价值网络 w new ← w now − α ⋅ δ t ⋅ ∇ w q ( s t , a t ; w now ) . \boldsymbol{w}_{\text {new }} \leftarrow \boldsymbol{w}_{\text {now }}-\alpha \cdot \delta_t \cdot \nabla_{\boldsymbol{w}} q\left(s_t, a_t ; \boldsymbol{w}_{\text {now }}\right) . wnew ←wnow −α⋅δt⋅∇wq(st,at;wnow ).更新策略网络: θ new ← θ now β ⋅ q ^ t ⋅ ∇ θ ln π ( a t ∣ s t ; θ now ) . \boldsymbol{\theta}_{\text {new }} \leftarrow \boldsymbol{\theta}_{\text {now }}\beta \cdot \widehat{q}_t \cdot \nabla_{\boldsymbol{\theta}} \ln \pi\left(a_t \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right) . θnew ←θnow β⋅q t⋅∇θlnπ(at∣st;θnow ).
用目标网络改进训练
第 6.2 节讨论了 Q Q Q 学习中的自举及其危害, 以及用目标网络target network缓解自举造成的偏差。SARSA 算法中也存在自举一一即用价值网络自己的估值 q ^ t 1 \widehat{q}_{t1} q t1 去更新价值网络自己; 我们同样可以用目标网络计算 TD 目标, 从而缓解偏差。把目标网络记作 q ( s , a ; w − ) q\left(s, a ; \boldsymbol{w}^{-}\right) q(s,a;w−), 它的结构与价值网络相同, 但是参数不同。使用目标网络计算 TD 目标, 那么 actor-critic 的训练就变成了:
观测到当前状态 s t s_t st, 根据策略网络做决策: a t ∼ π ( ⋅ ∣ s t ; θ now ) a_t \sim \pi\left(\cdot \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right) at∼π(⋅∣st;θnow ), 并让智能体执行动作 a t a_t at 。从环境中观测到奖励 r t r_t rt 和新的状态 s t 1 s_{t1} st1 。根据策略网络做决策: a ~ t 1 ∼ π ( ⋅ ∣ s t 1 ; θ now ) \tilde{a}_{t1} \sim \pi\left(\cdot \mid s_{t1} ; \boldsymbol{\theta}_{\text {now }}\right) a~t1∼π(⋅∣st1;θnow ), 但是不让智能体执行动作 a ~ t 1 \tilde{a}_{t1} a~t1 。让价值网络给 ( s t , a t ) \left(s_t, a_t\right) (st,at) 打分: q ^ t q ( s t , a t ; w now ) . \widehat{q}_tq\left(s_t, a_t ; \boldsymbol{w}_{\text {now }}\right) . q tq(st,at;wnow ).让目标网络给 ( s t 1 , a ~ t 1 ) \left(s_{t1}, \tilde{a}_{t1}\right) (st1,a~t1) 打分: q ~ t 1 q ( s t 1 , a ~ t 1 ; w now − ) \widetilde{q}_{t1}q\left(s_{t1}, \tilde{a}_{t1} ; \boldsymbol{w}_{\text {now }}^{-}\right) q t1q(st1,a~t1;wnow −)计算 TD 目标和 TD 误差: y ^ t − r t γ ⋅ q ^ t 1 − 和 δ t q t ^ − y ^ t − . \widehat{y}_t^{-}r_t\gamma \cdot \widehat{q}_{t1}^{-} \quad \text { 和 } \quad \delta_t\widehat{q_t}-\widehat{y}_t^{-} \text {. } y t−rtγ⋅q t1− 和 δtqt −y t−. 更新价值网络 w new ← w now − α ⋅ δ t ⋅ ∇ w q ( s t , a t ; w now ) \boldsymbol{w}_{\text {new }} \leftarrow \boldsymbol{w}_{\text {now }}-\alpha \cdot \delta_t \cdot \nabla_w q\left(s_t, a_t ; \boldsymbol{w}_{\text {now }}\right) wnew ←wnow −α⋅δt⋅∇wq(st,at;wnow )更新策略网络: θ new ← θ now β ⋅ q ^ t ⋅ ∇ θ ln π ( a t ∣ s t ; θ now ) . \boldsymbol{\theta}_{\text {new }} \leftarrow \boldsymbol{\theta}_{\text {now }}\beta \cdot \widehat{q}_t \cdot \nabla_{\boldsymbol{\theta}} \ln \pi\left(a_t \mid s_t ; \boldsymbol{\theta}_{\text {now }}\right) . θnew ←θnow β⋅q t⋅∇θlnπ(at∣st;θnow ).设 τ ∈ ( 0 , 1 ) \tau \in(0,1) τ∈(0,1) 是需要手动调整的超参数。做加权平均更新目标网络的参数: w new − ← τ ⋅ w new ( 1 − τ ) ⋅ w now − . \boldsymbol{w}_{\text {new }}^{-} \leftarrow \tau \cdot \boldsymbol{w}_{\text {new }}(1-\tau) \cdot \boldsymbol{w}_{\text {now }}^{-} . wnew −←τ⋅wnew (1−τ)⋅wnow −.
8.带基线的策略梯度方法
上一章推导出策略梯度, 并介绍了两种策略梯度方法REINFORCE 和 actor-critic。虽然上一章的方法在理论上是正确的但是在实践中效果并不理想。本章介绍的带基线的策略梯度policy gradient with baseline可以大幅提升策略梯度方法的表现。使用基线 (baseline) 之后, REINFORCE 变成 REINFORCE with baseline, actor-critic 变成 advantage actor-critic (A2C)。| 在策略梯度中加入基线 (baseline) 可以降低方差, 显著提升实验效果。实践中常用 b V π ( s ) bV_\pi(s) bVπ(s) 作为基线。可以用基线来改进 REINFORCE 算法。价值网络 v ( s ; w ) v(s ; \boldsymbol{w}) v(s;w) 近似状态价值函数 V π ( s ) V_\pi(s) Vπ(s),把 v ( s ; w ) v(s ; \boldsymbol{w}) v(s;w) 作为基线。用策略梯度上升来更新策略网络 π ( a ∣ s ; θ ) \pi(a \mid s ; \boldsymbol{\theta}) π(a∣s;θ) 。用蒙特卡洛而非自举来更新价值网络 v ( s ; w ) v(s ; \boldsymbol{w}) v(s;w) 。可以用基线来改进 actor-critic, 得到的方法叫做 advantage actor-critic (A2C), 它也有一个策略网络 π ( a ∣ s ; θ ) \pi(a \mid s ; \boldsymbol{\theta}) π(a∣s;θ) 和一个价值网络 v ( s ; θ ) v(s ; \boldsymbol{\theta}) v(s;θ) 。用策略梯度上升来更新策略网络, 用 T D \mathrm{TD} TD 算法来更新价值网络。 9.策略学习高级技巧
本章介绍策略学习的高级技巧 置信域方法指的是一大类数值优化算法, 通常用于求解非凸问题。对于一个最大化问题算法重复两个步骤一一做近似、最大化一一直到算法收玫。置信域策略优化 (TRPO) 是一种置信域算法, 它的目标是最大化目标函数 J ( θ ) J(\theta) J(θ) E S [ V π ( S ) ] \mathbb{E}_S\left[V_\pi(S)\right] ES[Vπ(S)] 。与策略梯度算法相比, TRPO 的优势在于更好的稳定性、用更少的样本达到收敛。策略学习中常用熵正则这种技巧, 即鼓励策略网络输出的概率分布有较大的熵。熵越大, 概率分布越均匀; 摘越小, 概率质量越集中在少数动作上。 10.连续控制
本书前面章节的内容全部都是离散控制, 即动作空间是一个离散的集合, 比如超级玛丽游戏中的动作空间 A { \mathcal{A}\{ A{ 左, 右, 上 } \} } 就是个离散集合。本章的内容是连续控制, 即动作空间是个连续集合, 比如汽车的转向 A [ − 4 0 ∘ , 4 0 ∘ ] \mathcal{A}\left[-40^{\circ}, 40^{\circ}\right] A[−40∘,40∘] 就是连续集合。如果把连续动作空间做离散化, 那么离散控制的方法就能直接解决连续控制问题; 我们在第10.1节讨论连续集合的离散化。然而更好的办法是直接用连续控制方法, 而非离散化之后借用离散控制方法。本章介绍两种连续控制方法第10.2节介绍确定策略网络, 第10.5节介绍随机策略网络。 离散控制问题的动作空间 A \mathcal{A} A 是个有限的离散集连续控制问题的动作空间 A \mathcal{A} A 是个连续集。如果想将 DQN 等离散控制方法应用到连续控制问题, 可以对连续动作空间做离散化, 但这只适用于自由度较小的问题。可以用确定策略网络 a μ ( s ; θ ) \boldsymbol{a}\boldsymbol{\mu}(s ; \boldsymbol{\theta}) aμ(s;θ) 做连续控制。网络的输入是状态 s s s, 输出是动作 a , a a, a a,a 是向量, 大小等于问题的自由度。确定策略梯度DPG借助价值网络 q ( s , a ; w ) q(s, a ; \boldsymbol{w}) q(s,a;w) 训练确定策略网络。DPG 属于异策略, 用行为策略收集经验, 做经验回放更新策略网络和价值网络。DPG 与 DQN 有很多相似之处, 而且它们的训练都存在高估等问题。TD3 使用几种技巧改进 D P G \mathrm{DPG} DPG : 截断双 Q \mathrm{Q} Q 学习、往动作中加噪声、降低更新策略网络和目标网络的频率。可以用随机高斯策略做连续控制。用两个神经网络分别近似高斯分布的均值和方差对数, 并用策略梯度更新两个神经网络的参数。 11.对状态的不完全观测
在很多应用中, 智能体只能部分观测到当前环境的状态, 这会给决策造成困难。本章内容分三节, 分别介绍不完全观测问题、循环神经网络RNN、用 RNN 策略网络解决不完全观测问题。 在很多强化学习的应用中, 智能体无法完整观测到环境当前的状态 s t s_t st 。我们把观测记作 o t o_t ot, 以区别完整的状态。仅仅基于当前观测 o t o_t ot 做决策, 效果会不理想。一种合理的解决方案是记忆过去的状态, 基于历史上全部的观测 o 1 , ⋯ , o t o_1, \cdots, o_t o1,⋯,ot 做决策。常用循环神经网络RNN做为策略函数, 做出的决策依赖于历史上全部的观测。 12.模仿学习
模仿学习imitation learning不是强化学习, 而是强化学习的一种替代品。模仿学习与强化学习有相同的目的: 两者的目的都是学习策略网络, 从而控制智能体。模仿学习与强化学习有不同的原理模仿学习向人类专家学习, 目标是让策略网络做出的决策与人类专家相同; 而强化学习利用环境反馈的奖励改进策略, 目标是让累计奖励即回报最大化。
本章内容分三节, 分别介绍三种常见的模仿学习方法行为克隆 (behavior cloning)、逆向强化学习 (inverse reinforcement learning)、生成判别模仿学习 (GAIL)。行为克隆不需要让智能体与环境交互, 因此学习的“成本”很低。而逆向强化学习、生成判别模仿学习则需要让智能体与环境交互。 模仿学习起到与强化学习相同的作用, 但模仿学习不是强化学习。模仿学习从专家的动作中学习策略, 而强化学习从奖励中学习策略。行为克隆是最简单的模仿学习, 其本质是分类或回归。行为克隆可以完全线下训练,无需与环境交互, 因此训练的代价很小。行为克隆存在错误累加的缺点, 实践中效果不如强化学习。强化学习利用奖励学习策略, 而逆向强化学习IRL从策略中反推奖励函数。IRL 适用于不知道奖励函数的控制问题比如无人驾驶。对于这种问题可以先用 IRL 从人类专家的行为中学习奖励函数, 再利用奖励函数做强化学习; 这种方法被称作学徒学习。生成判别模仿学习 (GAIL) 借用 GAN 的思想, 使用一个生成器和一个判别器。生成器是策略函数, 学习的目标是让生成的轨迹与人类专家的行为相似, 使得判别器无法区分。 第四部分多智能体强化学习
13.并行计算
机器学习的实践中普遍使用并行计算, 利用大量的计算资源比如很多块 GPU缩短训练所需的时间, 用几个小时就能完成原本需要很多天才能完成的训练。深度强化学习自然也不例外。可以用很多处理器同时收集经验、计算梯度, 让原本需要很长时间的训练在较短的时间内完成。第 13.1 以并行梯度下降为例讲解并行计算基础知识。第 13.2 介绍异步并行梯度下降算法。第 13.3 介绍两种异步强化学习算法。 并行计算用多个处理器、多台机器加速计算, 使得计算所需的钟表时间减少。使用并行计算, 每块处理器承担的计算量会减小, 有利于减小钟表时间。常用加速比作为评价并行算法的指标。理想情况下, 处理器数量增加 m m m 倍, 加速比就是 m m m 。然而并行计算还有通信、同步等代价, 加速比通常小于 m m m 。减小通信时间、同步时间是设计并行算法的关键。可以用 MapReduce 在集群上做并行计算。MapReduce 属于 client-server 架构, 需要做同步。同步算法每一轮更新模型之前, 要求所有节点都完成计算。这会造成空闲和等待,影响整体的效率。而异步算法无需等待, 因此效率更高。在机器学习的实践中, 异步并行算法比同步并行算法所需的钟表时间更短。本章讲解了异步并行的双 Q \mathrm{Q} Q 学习算法与 A 3 C \mathrm{A} 3 \mathrm{C} A3C 算法。两种算法都是让 worker 端并行计算梯度, 在服务器端用梯度更新神经网络参数。