【算法】强化学习算法知识点面试准备

强化学习基础部分

1. 强化学习与监督学习和无监督学习有什么区别?

  • 首先强化学习和无监督学习是不需要标签的,而监督学习需要许多有标签的样本来进行模型的构建;
  • 对于强化学习与无监督学习,无监督学习是直接对于给定的数据进行建模,寻找数据(特征)给定的隐藏的结构,一般对应的聚类问题,而强化学习需要通过延迟奖励学习策略来得到"模型"对于正确目标的远近(通过奖励惩罚函数进行判断),这里我们可以将奖励惩罚函数视为正确目标的一个稀疏、延迟形式。
  • 监督学习假设模型的决策不会影响环境,而强化学习假设模型的决策会改变环境
  • 另外强化学习处理的多是序列数据,样本之间通常具有强相关性,但其很难像监督学习的样本一样满足IID条件。

2. 强化学习的使用场景有哪些?

序列决策问题。或者说是对应的模型未知,需要通过学习逐渐逼近真实模型的问题并且当前的动作会影响环境的状态,即服从马尔可夫性的问题。同时应满足所有状态是可重复到达的(满足可学习型的)。

3. RL中所谓的损失函数与DL中的损失函数有什么区别?

DL中的loss function目的是使预测值和真实值之间的差距最小,而RL中的loss function是使奖励和的期望最大。

4. model-free和model-based两者有什么区别?

参考:https://zhuanlan.zhihu.com/p/162787188

  • Model-based

    强化学习中所说的model-based并不是已知环境模型,或者已知状态转移概率。而是要从经验中学习到一个环境模型或者其他映射,并利用这个learned model 加速策略迭代的进程

    model-based 旨在高效的利用experience,提高学习效率以及实现 data-efficient。

    一般来说,model-based的好处是由于其对环境的动力学特性(dynamic )进行建模,其sample efficiency更好,在样本很少的情况下学习的更好。但是一般来说其渐近表现不如model-free的算法好,即收敛之后的性能。

    model-based算法有两个关键的问题,一个是建立什么样的模型,一个是怎样使用模型去做控制。

  • Model-free

    Model-free就是我们常听到的 DQN, DDPG, PPO ,SAC等SOTA算法。它和model-based 的区别就在于是否利用经验做策略迭代之外的事。Model-free RL不需要去学Transition或者Reward Models

    model-free在其中就是下图的 direct RL,因此 model-free 就是value/policy->acting->experience->direct RL->value/policy 的过程。

    Model-free RL方法一般分成3类:

    • Value-Based Method (Q-Learning,DQN等)。
    • Policy-Based Method (Policy Gradient)。
    • Policy and Value Based Method(Actor Critic,如典型的DDPG)。

所谓的 model-based 就是在其上增加了 model learning->model->planning 的过程。通过 experience data 学习得到一个环境的模型。

显然,所有model-free都可以转变为model-based, model-based只是一个框架,任意的model-free算法都可以嵌套进去。
【算法】强化学习算法知识点面试准备_第1张图片

5. Model-free vs Model-based

  • 无模型的方法不需要构建环境模型。智能体直接与环境交互,并基于探索得到的样本提升其策略性能。
  • 与基于模型的方法相比,无模型的方法由于不关心环境模型,无须学习环境模型,也就不存在环境拟合不准确的问题,相对更易于实现和训练。
  • 然而,无模型的方法也有其自身的问题。最常见的问题是,有时在真实环境中进行探索的代价是极高的,如巨大的时间消耗、不可逆的设备损耗及安全风险,等等。比如在自动驾驶中,我们不能在没有任何防护措施的情况下,让智能体用无模型的方法在现实世界中探索,因为任何交通事故的代价都将是难以承受的。
  • 基于模型的强化学习算法由于具有一个环境模型,智能体可以额外和环境模型进行交互,对真实环境中样本的需求量往往就会减少,因此通常会比无模型的强化学习算法具有更低的样本复杂度。但是,环境模型可能并不准确,不能完全代替真实环境,因此基于模型的强化学习算法收敛后其策略的期望回报可能不如无模型的强化学习算法

6. 马尔科夫性-马尔可夫过程-马尔可夫决策过程

  • 马尔科夫性:系统的下一个状态只取决于它当前状态,而跟它当前状态之前的状态都没有关系。
  • 马尔可夫过程:具有马尔可夫性质(Markov property)且存在于离散的指数集(index set)和状态空间(state space)内的随机过程(stochastic process),也即马尔科夫链。
  • 马尔可夫奖励过程(Markov Reward Process, MRP) 是马尔可夫链再加上了一个奖励函数。在 MRP 中,转移矩阵和状态都是跟马尔可夫链一样的,只是多了一个奖励函数(reward function)。奖励函数 R R R 是一个期望,表示到达某一个状态的时候,可以获得多大的奖励。这里另外定义了一个 discount factor γ \gamma γ 。如果状态数是有限的, R R R 可以是一个向量。
  • 马尔可夫决策过程:相对于 MRP,马尔可夫决策过程(Markov Decision Process)多了一个 决策,即系统的下一个状态只取决于它当前状态和和当前决策,而跟它当前状态之前的状态和决策无关。

7. e-greedy策略

【算法】强化学习算法知识点面试准备_第2张图片

8. 请问on-policy跟off-policy的区别是什么?

On-policy 指的是环境互动的策略和训练时更新的策略是同一个策略,相应地 off-policy 则是互动和更新时使用的是不同的策略。

  • On-policy 的思想比较直观,相当于一个智能体在环境中边试错边学习,但是其主要问题是样本利用率低,进而训练效率低。使用了一个策略与环境进行交互取得数据进而更新模型后,就产生了一个新的策略,那么旧策略交互得来的数据可能就不服从新策略的条件分布了,所以这些数据不能再使用会被丢弃。

  • Off-policy 则缓解了这个问题,主要通过将之前策略收集来的数据通过一个经验回放池 (experience replay buffer) 储存起来,然后从中采样数据进行训练。那么 off-policy 类方法为什么能使用旧策略产生的数据进行训练? 既然数据分布不同导致新旧数据不能放一起训练,那就调整数据分布使之接近就可以了,所以 Off-policy 类的算法普遍采用了重要性采样的思想对不同数据施加不同的权重。

9. Offline reinforcement learning

其特点是一次性收集完一批数据后就只用这批数据进行训练,在正式部署之前不再与环境作任何交互。

10. 梯度消失与梯度爆炸

梯度爆炸

误差梯度是神经网络训练过程中计算的方向和数量,用于以正确的方向和合适的量更新网络权重。 在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。 网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长会产生梯度爆炸。 梯度爆炸引发的问题 在深度多层感知机网络中,梯度爆炸会引起网络不稳定,最好的结果是无法从训练数据中学习,而最坏的结果是出现无法再更新的 NaN 权重值。

梯度消失

某些情况下梯度趋近于0导致无法更新。

在某些情况下,梯度会变得非常小,有效地阻止了权重值的变化。在最坏的情况下,这可能会完全停止神经网络的进一步训练。例如,传统的激活函数(如双曲正切函数)具有范围(0,1)内的梯度,反向传播通过链式法则计算梯度。这样做的效果是,用这些小数字的n乘以n来计算n层网络中“前端”层的梯度,这意味着梯度(误差信号)随n呈指数递减,而前端层的训练非常缓慢。

解决方案

【算法】强化学习算法知识点面试准备_第3张图片
【算法】强化学习算法知识点面试准备_第4张图片
【算法】强化学习算法知识点面试准备_第5张图片

11. 贝尔曼方程推导

价值函数贝尔曼方程

【算法】强化学习算法知识点面试准备_第6张图片

最优价值函数贝尔曼方程

【算法】强化学习算法知识点面试准备_第7张图片

动作价值函数贝尔曼方程

【算法】强化学习算法知识点面试准备_第8张图片 【算法】强化学习算法知识点面试准备_第9张图片

最优动作价值函数贝尔曼方程

在这里插入图片描述

13. Exploration and Exploitation

在强化学习里面,探索利用 是两个很核心的问题。

  • 探索是说我们怎么去探索这个环境,通过尝试不同的行为来得到一个最佳的策略,得到最大奖励的策略。
  • 利用是说我们不去尝试新的东西,就采取已知的可以得到很大奖励的行为。
  • 以挖油为例,
    利用:我们直接在已知的地方挖油,我们就可以确保挖到油。
    探索:我们在一个新的地方挖油,就有很大的概率,你可能不能发现任何油,但也可能有比较小的概率可以发现一个非常大的油田。

14. bootstrapping

bootstrapping 的意思就是我们基于之前估计的量来估计当前的量。

15. 蒙特卡洛与时序差分

在这里插入图片描述

Monte-Carlo Policy Evaluation

  • 蒙特卡罗(Monte-Carlo,MC)方法是基于采样的方法,让 agent 跟环境进行交互,就会得到很多轨迹。每条轨迹都有对应的 return:

G t = R t + 1 + γ R t + 2 + γ 2 R t + 3 + … G_{t}=R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\ldots Gt=Rt+1+γRt+2+γ2Rt+3+

  • 把每个轨迹的 return 加起来进行平均,就可以知道某一个策略下面对应状态的价值。

  • MC 是用 经验平均回报(empirical mean return) 的方法来估计。

  • MC 方法不需要 MDP 的转移函数和奖励函数,并且不需要像动态规划那样用 bootstrapping 的方法。这个独特的性质可以让我们直接通过采样的回报来对状态值进行估算,从而有更小的偏差但会有更大的方差

  • MC 的局限性:只能用在有终止的 MDP 。

MC算法步骤

  • 为了评估 v ( s ) v(s) v(s),需要进行如下步骤:

    • 在每个回合中,如果在时间步 t 时状态 s 被访问了,那么
      • 状态 s 的访问数 N ( s ) N(s) N(s) 增加 1,
      • 状态 s 的总的回报 S ( s ) S(s) S(s) 增加 G t G_t Gt​。
    • 状态 s 的价值可以通过 return 的平均来估计,即 v ( s ) = S ( s ) / N ( s ) v(s)=S(s)/N(s) v(s)=S(s)/N(s)
  • 根据大数定律,只要我们得到足够多的轨迹,就可以趋近这个策略对应的价值函数。

TD 方法介绍

时序差分是一种用来估计一个策略的价值函数的方法,它结合了蒙特卡洛和动态规划算法的思想。时序差分方法和蒙特卡洛的相似之处在于可以从样本数据中学习,不需要事先知道环境;和动态规划的相似之处在于根据贝尔曼方程的思想,利用后续状态的价值估计来更新当前状态的价值估计。

它使用自举法的原因是它需要从观察到的回报和对下个状态的估值中来构造它的目标。

  • TD 是介于 MC 和 DP 之间的方法。

  • TD 是 model-free 的,不需要 MDP 的转移矩阵和奖励函数。

  • TD 可以从不完整的 episode 中学习,结合了 bootstrapping 的思想。

  • 目的:对于某个给定的策略,在线(online)地算出它的价值函数,即一步一步地(step-by-step)算。

  • 最简单的算法是 TD(0),每往前走一步,就做一步 bootstrapping,用得到的估计回报(estimated return)来更新上一时刻的值。

  • 估计回报 R t + 1 + γ v ( S t + 1 ) R_{t+1}+\gamma v(S_{t+1}) Rt+1+γv(St+1) 被称为 TD target,TD target 是带衰减的未来收益的总和。TD target 由两部分组成:

    • 走了某一步后得到的实际奖励: R t + 1 R_{t+1} Rt+1​,
    • γ v ( S t + 1 ) \gamma v(S_{t+1}) γv(St+1)是利用了 bootstrapping 的方法,通过之前的估计来估计 v ( S t + 1 ) v(S_{t+1}) v(St+1) ,然后加了一个折扣系数,具体过程如下式所示:
      v ( s ) = E [ G t ∣ s t = s ] = E [ R t + 1 + γ R t + 2 + γ 2 R t + 3 + … ∣ s t = s ] = E [ R t + 1 ∣ s t = s ] + γ E [ R t + 2 + γ R t + 3 + γ 2 R t + 4 + … ∣ s t = s ] = R ( s ) + γ E [ G t + 1 ∣ s t = s ] = R ( s ) + γ E [ v ( s t + 1 ) ∣ s t = s ] \begin{aligned} v(s)&=\mathbb{E}\left[G_{t} \mid s_{t}=s\right] \\ &=\mathbb{E}\left[R_{t+1}+\gamma R_{t+2}+\gamma^{2} R_{t+3}+\ldots \mid s_{t}=s\right] \\ &=\mathbb{E}\left[R_{t+1}|s_t=s\right] +\gamma \mathbb{E}\left[R_{t+2}+\gamma R_{t+3}+\gamma^{2} R_{t+4}+\ldots \mid s_{t}=s\right]\\ &=R(s)+\gamma \mathbb{E}[G_{t+1}|s_t=s] \\ &=R(s)+\gamma \mathbb{E}[v(s_{t+1})|s_t=s]\\ \end{aligned} v(s)=E[Gtst=s]=E[Rt+1+γRt+2+γ2Rt+3+st=s]=E[Rt+1st=s]+γE[Rt+2+γRt+3+γ2Rt+4+st=s]=R(s)+γE[Gt+1st=s]=R(s)+γE[v(st+1)st=s]
  • 之所以TD target 是一个估计,是因为:它对期望值进行采样,并且使用当前估计 V 而不是真实的 v π v_{\pi} vπ​。

  • TD error(误差)
    δ = R t + 1 + γ v ( S t + 1 ) − v ( S t ) \delta=R_{t+1}+\gamma v(S_{t+1})-v(S_t) δ=Rt+1+γv(St+1)v(St)

  • 可以类比于 Incremental Monte-Carlo的方法,写出如下的更新方法:

v ( S t ) ← v ( S t ) + α ( R t + 1 + γ v ( S t + 1 ) − v ( S t ) ) v\left(S_{t}\right) \leftarrow v\left(S_{t}\right)+\alpha\left(R_{t+1}+\gamma v\left(S_{t+1}\right)-v\left(S_{t}\right)\right) v(St)v(St)+α(Rt+1+γv(St+1)v(St))

  • 通过上式与MC的更新式子对比,我们可知:
    v ( S t ) ← v ( S t ) + α ( G i , t − v ( S t ) ) \begin{array}{l}v\left(S_{t}\right) \leftarrow v\left(S_{t}\right)+\alpha\left(G_{i,t}-v\left(S_{t}\right)\right) \end{array} v(St)v(St)+α(Gi,tv(St))
    • 在 MC 里面 G i , t G_{i,t} Gi,t​ 是实际得到的值(可以看成 target),因为它已经把一条轨迹跑完了,可以算每个状态实际的 return。
    • TD 没有等轨迹结束,往前走了一步,就可以更新价值函数。

TD vs MC

【算法】强化学习算法知识点面试准备_第10张图片【算法】强化学习算法知识点面试准备_第11张图片

  • TD 只执行了一步,状态的值就更新。

  • MC 全部走完了之后,到了终止状态之后,再更新它的值。

  • TD 可以在线学习(online learning),每走一步就可以更新,效率高

  • MC 必须等一个回合结束才可以学习。

  • TD 可以从不完整序列上进行学习。

  • MC 只能从完整的序列上进行学习。

  • TD 可以在连续的环境下(没有终止)进行学习。

  • MC 只能在有终止的情况下学习。

  • TD 利用了马尔可夫性质,在马尔可夫环境下有更高的学习效率。

  • MC 没有假设环境具有马尔可夫性质,利用采样的价值来估计某一个状态的价值,在不是马尔可夫的环境下更加有效。

  • 举个例子来解释 TD 和 MC 的区别,

    • TD 是指在不清楚马尔可夫状态转移概率的情况下,以采样的方式得到不完整的状态序列,估计某状态在该状态序列完整后可能得到的收益,并通过不断地采样持续更新价值。

    • MC 则需要经历完整的状态序列后,再来更新状态的真实价值。

    • 例如,你想获得开车去公司的时间,每天上班开车的经历就是一次采样。假设今天在路口 A 遇到了堵车,

      • TD 会在路口 A 就开始更新预计到达路口 B、路口 C ⋯ ⋯ \cdots \cdots ⋯⋯,以及到达公司的时间;
      • 而 MC 并不会立即更新时间,而是在到达公司后,再修改到达每个路口和公司的时间。
  • TD 能够在知道结果之前就开始学习,相比 MC,其更快速、灵活。

16. 动态规划

动态规划(Dynamic Programming,DP)适合解决满足如下两个性质的问题:

  • 最优子结构(optimal substructure)。最优子结构意味着,我们的问题可以拆分成一个个的小问题,通过解决这个小问题,最后,我们能够通过组合小问题的答案,得到大问题的答案,即最优的解。
  • 重叠子问题(Overlapping subproblems)。重叠子问题意味着,子问题出现多次,并且子问题的解决方案能够被重复使用。

MDP 是满足动态规划的要求的:

  • Bellman equation 里面,我们可以把它分解成一个递归的结构。当我们把它分解成一个递归的结构的时候,如果我们的子问题子状态能得到一个值,那么它的未来状态因为跟子状态是直接相连的,那我们也可以继续推算出来。
  • 价值函数就可以储存并重用它的最佳的解。

动态规划应用于 MDP 的规划问题(planning)而不是学习问题(learning),我们必须对环境是完全已知的(Model-Based),才能做动态规划,直观的说,就是要知道状态转移概率和对应的奖励才行.

动态规划能够完成预测问题和控制问题的求解,是解 MDP prediction 和 control 一个非常有效的方式。

17. policy iteration VS value iteration

  • Policy Iteration 分两步,首先进行 policy evaluation,即对当前已经搜索到的策略函数进行一个估值。得到估值过后,进行 policy improvement,即把 Q 函数算出来,我们进一步进行改进。不断重复这两步,直到策略收敛。
  • Value iteration 直接把 Bellman Optimality Equation 拿进来,然后去寻找最佳的 value function,在这里没有 policy function 。当算出 optimal value function 过后,我们再来提取最佳策略。

一般策略迭代比值迭代快得多。策略迭代每次是在上一次迭代后的策略基础上进行优化的,而值迭代是一次性地从一开始一直迭代到最优策略,比如在一个大地图上找东西,策略迭代每次学到一点就会运用之前学到的东西也就是以非线性的方式扩大视野再进一步找,而值迭代则是不断的找最优点(即每次找max的点),每次都是固定的视野范围,需要的迭代次数也更多

18. 最佳价值函数(optimal value function) v ∗ v^* v 和最佳策略(optimal policy) π ∗ \pi^* π为什么等价?

最佳价值函数的定义为: v ∗ ( s ) = max ⁡ π v π ( s ) v^* (s)=\max_{\pi} v^{\pi}(s) v(s)=maxπvπ(s) 即我们去搜索一种 policy π \pi π 来让每个状态的价值最大。 v ∗ v^* v 就是到达每一个状态,它的值的极大化情况。在这种极大化情况上面,我们得到的策略就可以说它是最佳策略(optimal policy),即 π ∗ ( s ) = arg ⁡ max ⁡ π   v π ( s ) \pi^{*}(s)=\underset{\pi}{\arg \max }~ v^{\pi}(s) π(s)=πargmax vπ(s)

Optimal policy 使得每个状态的价值函数都取得最大值,它的最佳的价值函数是一致的,但这里可能有多个最佳的 policy,即多个 policy 可以取得相同的最佳价值。

19. 一般怎么求解马尔可夫决策过程?

答:我们求解马尔可夫决策过程可以直接求解贝尔曼等式(动态规划方程),即 V ( s ) = R ( S ) + γ ∑ s ′ ∈ S P ( s ′ ∣ s ) V ( s ′ ) V(s)=R(S)+ \gamma \sum_{s' \in S}P(s'|s)V(s') V(s)=R(S)+γsSP(ss)V(s),用矩阵形式表示: V = R + γ P V V=R+\gamma PV V=R+γPV。但是贝尔曼等式很难求解且计算复杂度较高,所以可以使用动态规划、蒙特卡洛、时间差分等方法求解.

20. 如果数据流不满足马尔科夫性怎么办?应该如何处理?

答: 如果不满足马尔科夫性,即下一个状态与之前的状态也有关,若还仅仅用当前的状态来进行求解决策过程,势必导致决策的泛化能力变差。 为了解决这个问题,可以利用RNN对历史信息建模,获得包含历史信息的状态表征。表征过程可以使用注意力机制等手段。最后在表征状态空间求解马尔可夫决策过程问题。

21. 请问value-based和policy-based的区别是什么?

  • 基于价值的方法的优点在于采样效率相对较高,值函数估计方差小,不易陷入局部最优;缺点是它通常不能处理连续动作空间问题,且最终的策略通常为确定性策略而不是概率分布的形式。
  • 基于策略的方法直接对策略进行优化,通过对策略迭代更新,实现累积奖励最大化。与基于价值的方法相比,基于策略的方法具有策略参数化简单、收敛速度快的优点,且适用于连续或高维的动作空间
  • value-based,例如Q-learning,是通过求解最优值函数间接的求解最优策略;
  • policy-based,例如REINFORCE,Monte-Carlo Policy Gradient,等方法直接将策略参数化,通过策略搜索,策略梯度或者进化方法来更新策略的参数以最大化回报。基于值函数的方法不易扩展到连续动作空间,并且当同时采用非线性近似、自举和离策略时会有收敛性问题。策略梯度具有良好的收敛性证明。
  • 策略迭代。它有两个循环,一个是在策略估计的时候,为了求当前策略的值函数需要迭代很多次。另外一个是外面的大循环,就是策略评估,策略提升这个循环。值迭代算法则是一步到位,直接估计最优值函数,因此没有策略提升环节。

策略梯度( PolicyGradient)算法不对值函数进行估计,而是将策略参数化,直接在策略空间中搜索最优策略,最大化累积奖励。

22. 随机性策略和确定性策略有什么区别吗?

随机策略表示为某个状态下动作取值的分布,确定性策略在每个状态只有一个确定的动作可以选。 从熵的角度来说,确定性策略的熵为0,没有任何随机性。随机策略有利于我们进行适度的探索,确定 性策略的探索问题更为严峻。

23. 不打破数据相关性,神经网络的训练效果为什么就不好?

在神经网络中通常使用随机梯度下降法。随机的意思是我们随机选择一些样本来增量式的估计梯度,比如常用的 采用batch训练。如果样本是相关的,那就意味着前后两个batch的数据很可能也是相关的,那么估计的梯度也会呈现出某种相关性。不幸的情况下,后面的梯度估计可能会抵消掉前面的梯度量。从而使得训练难以收敛。

24. 重要性采样(important sampling)

参考:https://zhuanlan.zhihu.com/p/108628315

IS出现于统计里面,对于难以直接采样但是知道分布函数的一种分布,可以采用另一种已知的容易采样的分布来采样,这样获得的expectation是没有bias的。另一个作用是给不同的区域给不同的sample权重,比如我更想知道某个局部的准确分布,就可以用IS。

important sampling(重要性采样): 使用另外一种数据分布,来逼近所求分布的一种方法,在强化学习中通常和蒙特卡罗方法结合使用,公式如下: ∫ f ( x ) p ( x ) d x = ∫ f ( x ) p ( x ) q ( x ) q ( x ) d x = E x ∼ q [ f ( x ) p ( x ) q ( x ) ] = E x ∼ p [ f ( x ) ] \int f(x) p(x) d x=\int f(x) \frac{p(x)}{q(x)} q(x) d x=E_{x \sim q}[f(x){\frac{p(x)}{q(x)}}]=E_{x \sim p}[f(x)] f(x)p(x)dx=f(x)q(x)p(x)q(x)dx=Exq[f(x)q(x)p(x)]=Exp[f(x)]我们在已知 q q q 的分布后,可以使用上述公式计算出从 p p p 这个distribution sample x 代入 f f f 以后所算出来的期望值。

Importance sampling在RL中最直接的作用是化on policy为局部off policy,提升sample efficiency。

25. 深度强化学习中的不同策略类型

【算法】强化学习算法知识点面试准备_第12张图片

26. 再参数化技巧( Reparameterization Trick)

参考:https://zhuanlan.zhihu.com/p/542478018

在这里插入图片描述

【算法】强化学习算法知识点面试准备_第13张图片

【算法】强化学习算法知识点面试准备_第14张图片

比如,在 SAC 中,随机性策略被一个均值和一个方差,以及一个从正态分布( Normal Distribution)中采样的噪声项再参数化。

SAC 中使用的策略是一个 Tanh 归一化高斯分布,这与传统设置不同。 SAC 中的动作表示可以使用如下再参数化技巧:
在这里插入图片描述
由于 SAC 中策略的随机性,策略梯度可以在最大化期望价值函数时使用再参数化技巧得到

【算法】强化学习算法知识点面试准备_第15张图片

因而,梯度可以经过 Q 网络到策略网络,与 DPG 类似,即:

【算法】强化学习算法知识点面试准备_第16张图片
其使用一个采样batch 来更新策略,而 a(St, ϵ) 通过再参数化技巧来从随机性策略中采样。在这种情况下,再参数化技巧使得随机性策略能够以一种类似于 DPG 的方式来更新,而所得到的 SVG是介于 DPG 和 SPG 之间的方法。 DPG 也可以被看作 SVG(0) 的一种确定性极限( Deterministic Limit)

27. 无梯度优化

除了基于梯度( Gradient-Based)的优化方法来实现基于策略( Policy-Based)的学习,也有非基于梯度( Non-Gradient-Based)方法,也称无梯度( Gradient-Gree)优化方法,包括交叉熵( Cross-Entropy, CE)方法、协方差矩阵自适应( Covariance Matrix Adaptation, CMA)、爬山法( Hill Climbing), Simplex / Amoeba / Nelder-Mead 算法等。

28. 使用经验池的优势

  • 首先,它可以重用每个时间步的经验来学习 Q函数,这样可以提高数据使用效率。
  • 其次,如果没有回放缓存,那么一个批次中的样本将会是连续采集的,即样本高度相关。这样会增加更新的方差。
  • 最后,经验回放防止用于训练的样本只来自上一个策略,这样能平滑学习过程并减少参数的震荡或发散。

29. A3C在训练时有很多的worker进行异步的工作。那么其具体的如何运作的呢?

答:A3C一开始会有一个 global network。它们有包含 policy 的部分和 value 的部分,假设它的参数就是 θ 1 \theta_1 θ1​。对于每一个 worker 都用一张 CPU 训练(举例子说明),第一个 worker 就把 global network 的参数 copy 过来,每一个 worker 工作前都会global network 的参数 copy 过来。然后这个worker就要去跟environment进行交互,每一个 actor 去跟environment做互动后,就会计算出 gradient并且更新global network的参数。这里要注意的是,所有的 actor 都是平行跑的、之间没有交叉。所以每个worker都是在global network“要”了一个参数以后,做完就把参数传回去。所以当第一个 worker 做完想要把参数传回去的时候,本来它要的参数是 θ 1 \theta_1 θ1​,等它要把 gradient 传回去的时候。可能别人已经把原来的参数覆盖掉,变成 θ 2 \theta_2 θ2​了。但是没有关系,它一样会把这个 gradient 覆盖过去。

30. on policy 和off policy分类

【算法】强化学习算法知识点面试准备_第17张图片

31. A3C是on-policy还是off-policy

答:A3C中,评论家学习值函数,同时有多个actor并行训练并且不时与全局参数同步。A3C旨在用于并行训练,是 on-policy 的方法。

31. Actor - Critic有何优点

答:

  • 相比以value-based的算法,Actor - Critic应用了策略梯度的做法,这能让它在连续动作或者高维动作空间中选取合适的动作,而 Q-learning 做这件事会很困难。

  • 相比单纯策略梯度,Actor - Critic应用了Q-learning或其他策略评估的做法,使得Actor Critic能进行单步更新而不是回合更新,比单纯的Policy Gradient的效率要高。

  • Actor-Critic 方法结合了两种方法的优点,利用基于价值的方法学习 Q 值函数或状态价值函数V 来提高采样效率( Critic),并利用基于策略的方法学习策略函数( Actor),从而适用于连续或高维的动作空间。 Actor-Critic 方法可以看作是基于价值的方法在连续动作空间中的扩展,也可以看作是基于策略的方法在减少样本方差和提升采样效率方面的改进。虽然 Actor-Critic 方法吸收了上述两种方法的优点,但同时也继承了相应的缺点。比如, Critic 存在过估计的问题, Actor 存在探索不足的问题等。

32. actor-critic框架中的critic起了什么作用?

答:critic表示了对于当前决策好坏的衡量。结合策略模块,当critic判别某个动作的选择时有益的,策略就更新参数以增大该动作出现的概率,反之降低动作出现的概率。

33. 简述A3C的优势函数?

答: A ( s , a ) = Q ( s , a ) − V ( s ) A(s,a)=Q(s,a)-V(s) A(s,a)=Q(s,a)V(s)是为了解决value-based方法具有高变异性。它代表着与该状态下采取的平均行动相比所取得的进步。

如果 A(s,a)>0: 梯度被推向了该方向

如果 A(s,a)<0: (我们的action比该state下的平均值还差) 梯度被推向了反方

但是这样就需要两套 value function,所以可以使用TD error 做估计: A ( s , a ) = r + γ V ( s ′ ) − V ( s ) A(s,a)=r+\gamma V(s')-V(s) A(s,a)=r+γV(s)V(s)

34. 对于连续动作的控制空间和离散动作的控制空间,如果我们都采取使用Policy网络的话,分别应该如何操作?

首先需要说明的是,对于连续的动作控制空间,Q-learning、DQN等算法是没有办法处理的,所以我们需要使用神经网络进行处理,因为其可以既输出概率值 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ(atst) ,也可以输出确定的策略 μ θ ( s t ) \mu_{\theta}(s_t) μθ(st)

  • 要输出离散动作的话,最后的output的激活函数使用 softmax 就可以实现。其可以保证输出是的动作概率,而且所有的动作概率加和为 1。

  • 要输出连续动作的话,可以在输出层这里加一层 tanh激活函数。其作用可以把输出限制到 [-1,1] 之间。我们拿到这个输出后,就可以根据实际动作的一个范围再做一下缩放,然后再输出给环境。

35. 描述D4PG算法呢?

分布的分布式DDPG(Distributed Distributional DDPG ,简称 D4PG),相对于DDPG其优化部分为:

  • 分布式 critic: 不再只估计Q值的期望值,而是去估计期望Q值的分布, 即将期望Q值作为一个随机变量来进行估计。
  • N步累计回报: 当计算TD误差时,D4PG计算的是N步的TD目标值而不仅仅只有一步,这样就可以考虑未来更多步骤的回报。
  • 多个分布式并行actor:D4PG使用K个独立的actor并行收集训练样本并存储到同一个replay buffer中。
  • 优先经验回放(Prioritized Experience Replay,PER):使用一个非均匀概率 π \pi π 从replay buffer中采样。

36. GAN与AC

  • 对于 GAN,有两个部分:用于根据某些输入生成对象的生成网络,以及紧接生成网络的用于判断生成对象真实与否的判别网络。对于 Actor-Critic方法,也有两部分:根据状态输入生成动作的动作网络,以及一个紧接动作网络之后用价值函数(比如下一个动作的价值或 Q 值)评估动作好坏的批判网络。
  • GAN 和 Actor-Critic 基本遵循相同的结构。在这个结构中有两个相继的部分:一个用于生成物体,第二个用一个分数来评估生成物体的好坏;随后选择一个优化过程来使第二部分能够准确评估,并通过第二部分反向传播梯度到第一部分来保证它生成我们想要的内容,通过一个定义为损失函数的标准,也就是一个来自结构第二部分的分数或价值函数来实现。

【算法】强化学习算法知识点面试准备_第18张图片

  • 对第一个生成物体的部分: GAN 中的生成器和 Actor-Critic 中的Actor基本一致,包括其前向推理过程和反向梯度优化过程。对于前向过程,生成器采用随机变量做输入,并输出生成的对象;对于方向优化过程,它的目标是最大化对生成对象的判别分数。Actor用状态作为输入并输出动作,对于优化来说,它的目标是最大化状态-动作对的评估值。
  • 对于第二个评估物体的部分:判别器和Critic由于其功能不同而优化公式也不同,但是遵循相同的目标。判别器有来自真实对象额外输入。它的优化规则是最大化真实对象的判别值而最小化生成对象的判别值,这与我们的需要相符。对于Critic,它使用时间差分( Temporal Difference, TD)误差作为强化学习中的一种自举方法来按照最优贝尔曼方程优化价值函数。也有一些其他模型彼此非常接近。

37. 纳什均衡

定义: 令 ( X , u ) (\mathcal{X}, \boldsymbol{u}) (X,u) 表示 m m m 个智能体下的静态场景, 其中 X = X 1 × X 2 × , ⋯   , × X m \mathcal{X}=\mathcal{X}_{1} \times \mathcal{X}_{2} \times, \cdots, \times \mathcal{X}_{m} X=X1×X2×,,×Xm 表示智能体 的策略空间。当所有智能体采取策略 x \boldsymbol{x} x, 其中 x ∈ X \boldsymbol{x} \in \mathcal{X} xX 时, u = ( u 1 ( x ) , ⋯   , u m ( x ) ) \boldsymbol{u}=\left(u_{1}(\boldsymbol{x}), \cdots, u_{m}(\boldsymbol{x})\right) u=(u1(x),,um(x)) 表示智能体的 效用空间。我们同时设 x i x_{i} xi 为智能体 i i i 的策略, 设 x − i \boldsymbol{x}_{-i} xi 为除智能体 i i i 外其他所有智能体的策略集 合。当 ∀ i , x i ∈ X i \forall i, x_{i} \in \mathcal{X}_{i} i,xiXi 时,
u i ( x i ∗ , x − i ∗ ) ⩾ u i ( x i , x − i ∗ ) . u_{i}\left(x_{i}^{*}, \boldsymbol{x}_{-i}^{*}\right) \geqslant u_{i}\left(x_{i}, \boldsymbol{x}_{-i}^{*}\right) . ui(xi,xi)ui(xi,xi).
策略 x ∗ ∈ X x^{*} \in \mathcal{X} xX 使当前场景达到纳什均衡。

38. 强化学习面临的挑战

  • 样本效率
  • 学习稳定性
  • 灾难性遗忘
  • 安全性问题

39. 模仿学习知识点

假设存在一个专家智能体,其策略可以看成最优策略,我们就可以直接模仿这个专家在环境中交互的状态动作数据来训练一个策略,并且不需要用到环境提供的奖励信号。模仿学习(imitation learning)研究的便是这一类问题,在模仿学习的框架下,专家能够提供一系列状态动作 { ( s t , a t ) } \{(s_t,a_t)\} {(st,at)},表示专家在 s t s_t st环境下做出了 a t a_t at的动作,而模仿者的任务则是利用这些专家数据进行训练,无须奖励信号就可以达到一个接近专家的策略。目前学术界模仿学习的方法基本上可以分为 3 类:

  • 行为克隆(behavior cloning,BC)
  • 逆强化学习(inverse RL)
  • 生成式对抗模仿学习(generative adversarial imitation learning,GAIL)

下面分别简单的介绍:

Behavior Cloning

行为克隆 ( B C ) \mathrm{BC}) BC) 就是直接使用监督学习方法,将专家数据中 ( s t , a t ) \left(s_{t}, a_{t}\right) (st,at) s t s_{t} st 看作样本输入, a t a_{t} at 视为标签,学习的目标 为

θ ∗ = arg ⁡ min ⁡ θ E ( s , a ) ∼ B [ L ( π θ ( s ) , a ) ] \theta^{*} = \arg \min _{\theta} \mathbb{E}_{(s, a) \sim B}\left[\mathcal{L}\left(\pi_{\theta}(s), a\right)\right] θ=argθminE(s,a)B[L(πθ(s),a)]

其中, B B B 是专家的数据集, L \mathcal{L} L 是对应监督学习框架下的损失函数。若动作是离散的,该损失函数可以是最大似然估 计得到的。若动作是连续的,该损失函数可以是均方误差函数。

在强化学习的情况下, 有标签的示范数据 D \mathcal{D} D 通常包含配对的状态和动作: D = { ( s i , a i ) ∣ i = 1 , ⋯   , N } \mathcal{D}=\left\{\left(s_{i}, a_{i}\right) \mid i=1, \cdots, N\right\} D={(si,ai)i=1,,N}, 其中 N N N 是示范数据集的大小而指标 i i i 表示 s i s_{i} si a i a_{i} ai 是在同一个时间步的。在满足 MDP 假设的情况下(即最优动作只依赖 于当前状态), 状态-动作对的顺序在训练中可以被打乱。考虑强化学习设定下, 有一个以 θ \theta θ 参数 化和 s s s 为输入状态的初始策略 π θ \pi_{\theta} πθ, 其输出的确定性动作为 π θ ( s ) \pi_{\theta}(s) πθ(s), 我们有专家生成的示范数据集 D = { ( s i , a i ) ∣ i = 1 , ⋯   , N } \mathcal{D}=\left\{\left(s_{i}, a_{i}\right) \mid i=1, \cdots, N\right\} D={(si,ai)i=1,,N}, 可以用来训练这个策略, 其目标如下:
min ⁡ θ ∑ ( s i , a i ) ∼ D ∥ a i − π θ ( s i ) ∥ 2 2 \min _{\theta} \sum_{\left(s_{i}, a_{i}\right) \sim \mathcal{D}}\left\|a_{i}-\pi_{\theta}\left(s_{i}\right)\right\|_{2}^{2} θmin(si,ai)Daiπθ(si)22
一些随机性策略 π θ ( a ~ ∣ s ) \pi_{\theta}(\tilde{a} \mid s) πθ(a~s) 的具体形式, 比如高斯策略等, 可以用再参数化技巧来处理:
min ⁡ θ ∑ a ~ i ∼ π ( ⋅ ∣ s i ) , ( s i , a i ) ∼ D ∥ a i − a ~ i ∥ 2 2 \min _{\theta} \sum_{\tilde{a}_{i} \sim \pi\left(\cdot \mid s_{i}\right),\left(s_{i}, a_{i}\right) \sim \mathcal{D}}\left\|a_{i}-\tilde{a}_{i}\right\|_{2}^{2} θmina~iπ(si),(si,ai)Daia~i22
这个使用监督学习直接模仿专家示范的方法称为行为克隆 (Behavioral Cloning, BC)。

局限性

BC 也存在很大的局限性,该局限在数据量比较小的时候犹为明显。具体来说,由于通过 BC 学习得到的策略只是拿小部分专家数据进行训练,因此 BC 只能在专家数据的状态分布下预测得比较准。然而,强化学习面对的是一个序贯决策问题,通过 BC 学习得到的策略在和环境交互过程中不可能完全学成最优,只要存在一点偏差,就有可能导致下一个遇到的状态是在专家数据中没有见过的。此时,由于没有在此状态(或者比较相近的状态)下训练过,策略可能就会随机选择一个动作,这会导致下一个状态进一步偏离专家策略遇到的的数据分布。最终,该策略在真实环境下不能得到比较好的效果,这被称为行为克隆的复合误差(compounding error)问题.

Dataset Aggregation:

数据集聚合( Dataset Aggregation, DAgger) 是一种更先进的基于 BC 方法的从示范中模仿学习的算法,它是一种无悔的( No-Regret)迭代算法。根据先前的训练迭代过程,它主动选择策略,在随后过程中有更大几率遇到示范样本,这使得 DAgger 成为一种更有用且高效的在线模仿学习方法, 可以应用于像强化学习中的连续预测问题。示范数据集 D \mathcal{D} D 会在每个时间步 i i i 连续地聚合新的数据集 D i \mathcal{D}_{i} Di, 这些数据集包含当前策略在整个模仿学习过程中遇到的状态 和相应的专家动作。因此, DAgger 同样有一个缺陷, 即它需要不断地与专家交互, 而这在现实应 用中通常是一种苛求。

生成式对抗模仿学习

生成式对抗模仿学习 (generative adversarial imitation learning,GAIL) 是基于生成式对抗网络的模仿学习,它诠释了生成式对抗网络的本质其实就是模仿学习。GAIL 实质上是模仿了专家 策略的占用度量 ρ E ( s , a ) \rho_E(s, a) ρE(s,a) ,即尽量使得策略在环境中的所有状态动作对 ( s , a ) (s, a) (s,a) 的占用度量 ρ π ( s , a ) \rho_\pi(s, a) ρπ(s,a) 和专家策略的占 用度量一致。为了达成这个目标,策略需要和环境进行交互,收集下一个状态的信息并进一步做出动作。这一点 和 BC 不同,BC 完全不需要和环境交互。GAIL 算法中有一个判别器和一个策略,策略 π \pi π 就相当于是生成式对抗网 络中的生成器(generator),给定一个状态,策略会输出这个状态下应该采取的动作,而判别器(discriminator) D D D 将状态动作对 ( s , a ) (s, a) (s,a) 作为输入,输出一个 0 到 1 之间的实数,表示判别器认为该状态动作对 ( s , a ) (s, a) (s,a) 是来自智能体策略而非专家的概率。判别器 D D D 的目标是尽量将专家数据的输出靠近 0 ,将模仿者策略的输出 靠近 1,这样就可以将两组数据分辨开来。于是,判别器 D D D 的损失函数为
L ( ϕ ) = − E ρ π ~ [ log ⁡ D ϕ ( s , a ) ] − E ρ E [ log ⁡ ( 1 − D ϕ ( s , a ) ) ] \mathcal{L}(\phi)=-\mathbb{E}_{\rho_{\tilde{\pi}}}\left[\log D_\phi(s, a)\right]-\mathbb{E}_{\rho_E}\left[\log \left(1-D_\phi(s, a)\right)\right] L(ϕ)=Eρπ~[logDϕ(s,a)]EρE[log(1Dϕ(s,a))]
其中 ϕ \phi ϕ 是判别器 D D D 的参数。有了判别器 D D D 之后,模仿者策略的目标就是其交互产生的轨迹能被判别器误认为专家轨 迹。于是,我们可以用判别器 D D D 的输出来作为奖励函数来训练模仿者策略。具体来说,若模仿者策略在环境中采 样到状态 s s s ,并且采取动作 a a a ,此时该状态动作对 ( s , a ) (s, a) (s,a) 会输入到判别器 D D D 中,输出 D ( s , a ) D(s, a) D(s,a) 的值,然后将奖励设置 为 r ( s , a ) = − log ⁡ D ( s , a ) r(s, a)=-\log D(s, a) r(s,a)=logD(s,a) 。于是,我们可以用任意强化学习算法,使用这些数据继续训练模仿者策略。最后,在 对抗过程不断进行后,模仿者策略生成的数据分布将接近真实的专家数据分布,达到模仿学习的目标。GAIL 的优 化目标如图所示。

【算法】强化学习算法知识点面试准备_第19张图片

BC vs GAIL

在数据样本有限的情况下,BC 不能学习到最优策略,但是 GAIL 在相同的专家数据下可以取得非常好的结果。这一方面归因于 GAIL 的训练目标(拉近策略和专家的占用度量)十分贴合模仿学习任务的目标,避免了 BC 中的复合误差问题;另一方面得益于 GAIL 训练中,策略可以和环境交互出更多的数据,以此训练判别器,进而生成对基于策略“量身定做”的指导奖励信号。

Inverse Reinforcement learning(IRL):

另一种主要的模仿学习方法基于逆向强化学习(Inverse Reinforcement Learning, IRL) )。IRL 可以归结为解决从观察到的最优行为中提取奖励函数(Reward Function)的问题, 这些最优行为也可以表示为专家策略 π E \pi_{\mathrm{E}} πE

基于 IRL 的方法反复地在两个过程中交替: 一个是使用示范来推断一个隐藏的奖励或代价(Cost)函数, 另一个是使用强化学习基 于推断的奖励函数来学习一个模仿策略。

  • Third Person Imitation Learning: 一种把第三人称视角所观察到的经验 generalize 到第一人称视角的经验的技术。

40. Gumbel-Softmax Trick

参考博客:

  • https://blog.csdn.net/weixin_40255337/article/details/83303702
  • https://www.cnblogs.com/initial-h/p/9468974.html

在这里插入图片描述

Gumbel-Softmax就是在采用argmax的同时,让我们得到的结果可以保证是对原分布的逼近,也就是通过重参数化技巧来解决argmax不可导的问题,其实本质上还是重参数化的作用,而Gumbel-sofmax+argmax得到的效果和softmax+random.choice是相同的!

【算法】强化学习算法知识点面试准备_第20张图片

41. GAE

参考博客:https://zhuanlan.zhihu.com/p/45107835

【算法】强化学习算法知识点面试准备_第21张图片

全称是generalized advantage estimator,几乎所有最先进的policy gradient算法实现里面都使用了该技术。

【算法】强化学习算法知识点面试准备_第22张图片

42. Rollout

不同地方有不同的含义。

含义1

  • rollout算法是对于当前状态,从每一个可能的动作开始,之后根据给定的策略进行路径采样,根据多次采样的奖励和来对当前状态的行动值进行估计。当当前估计基本收敛时,会根据行动值最大的原则选择动作进入下一个状态再重复上述过程。在蒙特卡洛控制中,采样的目的是估计一个完整的,最优价值函数,但是rollout中的采样目的只是为了计算当前状态的行动值以便进入下一个状态,而且这些估计的行动值并不会被保留。在rollout中采用的策略往往比较简单被称作rollout策略(rollout policy)
  • 本质上讲,rollout和trajectory是一个意思, 就是agent在环境里行动得到奖励进入下一个状态,再行动再得到奖励进入下一个状态的序列,所以这两个词本身换着用也没问题. 但是区分不同的Trajectory的点在于所使用的policy, 也就是如何选择行动, 比如Monte Carlo trajectory, 严格意义上就是使用随机策略(当然也有专门用于采样的简单策略, 比如AlphaGo用的), 如果在纯强化学习的文章里面看到Trajectory或者rollout的话, 那意思就是用的agent当前的policy采样得到的轨迹.

含义2

  • Rollout 算法的基本思想就是 在未来有限的k步之内采用直接优化的方法(lookahead minimization),而在k步之外采用 base policy 对 Value function 来进行近似。
  • Rollout 算法的框架 可以将传统数学优化/启发式算法 与 动态规划/强化学习相结合。整体上 Rollout 算法就是一个动态规划的架构,但是里边的 base policy 可以采用我们数学优化里边 常用的一些方法来得到,例如贪心算法,例如线性规划,例如次模优化等等,如果是面对整数规划的问题 还可以用到 Relaxation 和 decomposition 的方法。
  • Rollout 算法具有 Policy improvement 的性质,简单来说就是采用了 Rollout 算法就会比以往单纯使用 base policy 要好。

43. 强化学习调参技巧

https://zhuanlan.zhihu.com/p/345353294

  • 数据预处理

如果输入的state是图片,那么可以进行resize和变成灰度图。进行resize的时候,尽可能保持原来的尺寸,这样进行输出action的时候能够保持尺度一致性。至于要不要变成灰度图,需要看看输入的state是否有较好的边缘,颜色是否携带较多信息等等。

  • weight初始化

采用随机或者normal distribution,均值为0,方差为1,可以设得小一些。太大的话,收敛会比较慢。当然,最好的初始化是用已经训练好的模型进行初始化,这个也叫做迁移学习。

  • Optimizer的选择

一般使用Adam效果会比较好,也不需要自己设置参数。RMSProp和Adam效果差不多,不过收敛速度慢一些。

  • 训练过程

训练过程可以把episode的reward打出来看,要是很久都没有改进,基本上可以停了,马上开始跑新的。

  • 过大、过深的神经网络不适合DRL

    深度学习可以在整个训练结束后再使用训练好的模型。而强化学习需要在几秒钟的训练后马上使用刚训好的模型。这导致DRL只能用比较浅的网络来保证快速拟合(10层以下)并且强化学习的训练数据不如有监督学习那么稳定,无法划分出训练集测试集去避免过拟合,因此DRL也不能用太宽的网络(超过1024),避免参数过度冗余导致过拟合。

  • dropout
    在DL中得到广泛地使用,可惜不适合DRL。如果非要用,那么也要选择非常小的 dropout rate(0~0.2),而且要注意在使用的时候关掉dropout。我不用dropout。

    好处:在数据不足的情况下缓解过拟合;像Noisy DQN那样去促进策略网络探索坏处:影响DRL快速拟合的能力;略微增加训练时间

  • 批归一化
    经过大量实验,DRL绝对不能直接使用批归一化,如果非要用,那么就要修改Batch Normalization的动量项超参数。

算法部分

1. Q-Learning

【算法】强化学习算法知识点面试准备_第23张图片
  • Q-learning是通过计算最优动作值函数来求策略的一种时序差分的学习方法,其更新公式为:
    Q ( s , a ) ← Q ( s , a ) + α [ r ( s , a ) + γ max ⁡ a ′ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) \larr Q(s, a) + \alpha [r(s,a) + \gamma \max_{a'} Q(s', a') - Q(s, a)] Q(s,a)Q(s,a)+α[r(s,a)+γamaxQ(s,a)Q(s,a)]

  • Q-learning建立了一张存储每个状态下所有动作 Q Q Q 值的 表格。表格中的每一个动作价值 Q ( s , a ) Q(s, a) Q(s,a) 表示在状态 s s s 下选择动作 a a a 然后继续遵循某一策略预期能够得到的期望回报。Q-learning 是一种典型的off policy方法。它在选择动作时采用 max 操作和 ϵ-贪心策略,使得与环境交互的策略和更新的策略不是同一个策略。

扩展阅读:Q-Learning 收敛性证明

2. SARSA

【算法】强化学习算法知识点面试准备_第24张图片

SARSA更新公式为:
Q ( s , a ) ← Q ( s , a ) + α [ r ( s , a ) + γ Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) \larr Q(s, a) + \alpha [r(s,a) + \gamma Q(s', a') - Q(s, a)] Q(s,a)Q(s,a)+α[r(s,a)+γQ(s,a)Q(s,a)]

SARSA必须执行两次动作得到 ( s , a , r , s ′ , a ′ ) (s,a,r,s',a') (s,a,r,s,a)才可以更新一次;而且 a ′ a' a是在特定策略 π \pi π 的指导下执行的动作,因此估计出来的 Q ( s , a ) Q(s,a) Q(s,a) 是在该策略 π \pi π 之下的Q-value,样本生成用的 π \pi π和估计的 π \pi π 是同一个,因此是on-policy。

3. DQN

  • Q-learning 的方式建立了一张存储每个状态下所有动作 Q Q Q 值的 表格。表格中的每一个动作价值 Q ( s , a ) Q(s, a) Q(s,a) 表示在状态 s s s 下选择动作 a a a 然后继续遵循某一策略预期能够得 到的期望回报。然而,这种用表格存储动作价值的做法只在环境的状态和动作都是离散的,并且空间都比较小的情况下适用,当状态或者动作数量非常大的时候,这种做法就不适用了

  • 对于这种情况,我们需要用函数拟合的方法来估计 Q Q Q 值,即将这个复杂的 Q Q Q 值表格视作数据,使用一个参数化的函数 Q θ Q_\theta Qθ 来拟合这些数据。很显然,这种函数拟合的方法存在一定的精度损失,因此被称为近似方法。DQN 算法便可以用来解决连续状态下离散动作的问题。

  • 相比于Q learning,DQN算法使用深度神经网络近似拟合状态动作值函数

  • DQN 将 Q-learning 与深度学习结合,用深度网络来近似动作价值函数,而 Q-learning 则是采用表格存储;DQN 采用了经验回放的训练方法,从历史数据中随机采样,而 Q-learning 直接采用下一个状态的数据进行学习

  • 那么 Q 网络的损失函数是什么呢? 我们先来回顾一下 Q-learning 的更新规则:
    Q ( s , a ) ← Q ( s , a ) + α [ r + γ max ⁡ a ′ ∈ A Q ( s ′ , a ′ ) − Q ( s , a ) ] Q(s, a) \leftarrow Q(s, a)+\alpha\left[r+\gamma \max _{a^{\prime} \in \mathcal{A}} Q\left(s^{\prime}, a^{\prime}\right)-Q(s, a)\right] Q(s,a)Q(s,a)+α[r+γaAmaxQ(s,a)Q(s,a)]
    上述公式用时序差分 (temporal difference,TD) 学习目标 r + γ max ⁡ a ′ ∈ A Q ( s ′ , a ′ r+\gamma \max _{a^{\prime} \in \mathcal{A}} Q\left(s^{\prime}, a^{\prime}\right. r+γmaxaAQ(s,a ) 来增量式更新 Q ( s , a ) Q(s, a) Q(s,a) ,也就是说要使 Q ( s , a ) Q(s, a) Q(s,a) 和 TD 目标 r + γ max ⁡ a ′ ∈ A Q ( s ′ , a ′ ) r+\gamma \max _{a^{\prime} \in \mathcal{A}} Q\left(s^{\prime}, a^{\prime}\right) r+γmaxaAQ(s,a) 靠近。于是,对于一组数据 { ( s i , a i , r i , s i ′ ) } \left\{\left(s_i, a_i, r_i, s_i^{\prime}\right)\right\} {(si,ai,ri,si)} ,我们可以很自然地将 Q 网络的损失函数构造为均方误差的形式:
    ω ∗ = arg ⁡ min ⁡ ω 1 2 N ∑ i = 1 N [ Q ω ( s i , a i ) − ( r i + γ max ⁡ a ′ Q ω ( s i ′ , a ′ ) ) ] 2 \omega^*=\arg \min _\omega \frac{1}{2 N} \sum_{i=1}^N\left[Q_\omega\left(s_i, a_i\right)-\left(r_i+\gamma \max _{a^{\prime}} Q_\omega\left(s_i^{\prime}, a^{\prime}\right)\right)\right]^2 ω=argωmin2N1i=1N[Qω(si,ai)(ri+γamaxQω(si,a))]2

采用的关键技术

  • 使用经验池

    • 首先,它可以重用每个时间步的经验来学习 Q函数,这样可以提高数据使用效率。
    • 其次,如果没有回放缓存,那么一个批次中的样本将会是连续采集的,即样本高度相关。这样会增加更新的方差。
    • 最后,经验回放防止用于训练的样本只来自上一个策略,这样能平滑学习过程并减少参数的震荡或发散。
  • 目标网络

    • DQN 算法最终更新的目标是让 Q ω ( s , a ) Q_\omega(s, a) Qω(s,a) 逼近 r + γ max ⁡ a ′ Q ω ( s ′ , a ′ ) r+\gamma \max _{a^{\prime}} Q_\omega\left(s^{\prime}, a^{\prime}\right) r+γmaxaQω(s,a) ,由于 TD 误差目标本身就包含 神经网络的输出,因此在更新网络参数的同时目标也在不断地改变,这非常容易造成神经网络训练的 不稳定性。
    • 为了解决这一问题, DQN 便使用了目标网络(target network)的思想:既然训练过程中 Q Q Q 网络的不断更新会导致目标不断发生改变,不如暂时先将 T D T D TD 目标中的 Q Q Q 网络固定住。
    • 为了实现 这一思想,我们需要利用两套 Q Q Q 网络。
      • 原来的训练网络 Q ω ( s , a ) Q_\omega(s, a) Qω(s,a) ,用于计算原来的损失函数 1 2 [ Q ω ( s , a ) − ( r + γ max ⁡ a ′ Q ω − ( s ′ , a ′ ) ) ] 2 \frac{1}{2}\left[Q_\omega(s, a)-\left(r+\gamma \max _{a^{\prime}} Q_{\omega^{-}}\left(s^{\prime}, a^{\prime}\right)\right)\right]^2 21[Qω(s,a)(r+γmaxaQω(s,a))]2 中的 Q ω ( s , a ) Q_\omega(s, a) Qω(s,a) 项,并且使用正常梯度下降方法来进行更新。
      • 目标网络 Q ω − ( s , a ) Q_{\omega^{-}}(s, a) Qω(s,a) ,用于计算原先损失函数 1 2 [ Q ω ( s , a ) − ( r + γ max ⁡ a ′ Q ω − ( s ′ , a ′ ) ) ] 2 \frac{1}{2}\left[Q_\omega(s, a)-\left(r+\gamma \max _{a^{\prime}} Q_{\omega^{-}}\left(s^{\prime}, a^{\prime}\right)\right)\right]^2 21[Qω(s,a)(r+γmaxaQω(s,a))]2 中的 ( r + γ max ⁡ a ′ Q ω − ( s ′ , a ′ ) ) \left(r+\gamma \max _{a^{\prime}} Q_{\omega^{-}}\left(s^{\prime}, a^{\prime}\right)\right) (r+γmaxaQω(s,a)) 项,其中 ω − \omega^{-} ω表示目标网络中的参数。如果两套网络的参数随时保持一 致,则仍为原先不够稳定的算法。为了让更新目标更稳定,目标网络并不会每一步都更新。具体而 言,目标网络使用训练网络的一套较旧的参数,训练网络 Q ω ( s , a ) Q_\omega(s, a) Qω(s,a) 在训练中的每一步都会更新,而目 标网络的参数每隔 C C C 步才会与训练网络同步一次,即 ω − ← ω \omega^{-} \leftarrow \omega ωω 。这样做使得目标网络相对于训练网络 更加稳定。

4. DQN改进

详情参见:

https://blog.csdn.net/weixin_42301220/article/details/123221485
DQN 改进算法

【算法】强化学习算法知识点面试准备_第25张图片

  • Double DQN:DQN由于总是选择当前值函数最大的动作值函数来更新当前的动作值函数,因此存在着过估计问题(估计的值函数大于真实的值函数)。Double DQN使用两个Q网络,解决Q值高估问题。在实现上,有两个 Q-network:目标的 Q-network 和更新的 Q-network。所以在 Double DQN 里面,拿会更新参数的Q-network 去选动作,然后拿目标网络(固定住不动的网络)去算值。

a = arg max ⁡ Q ( s t + 1 , ) y = r t + Q t a r g e t ( s t + 1 ∣ a ) a=\argmax Q(s_{t+1},)\\ y= r_t+Q_{target}(s_{t+1}|a) a=argmaxQ(st+1,)y=rt+Qtarget(st+1a)

  • Dueling DQN:改了网络的架构,不直接输出 Q 值的值,它分成两条路径去运算:

    • 第一条路径会输出一个 scalar,这个 scalar 叫做 V ( s ) V(s) V(s)。因为它跟输入 s 是有关系,所以叫做 V ( s ) V(s) V(s) V ( s ) V(s) V(s) 是一个 scalar。

    • 第二条路径会输出一个 vector,这个 vector 叫做 A ( s , a ) A(s,a) A(s,a)。每一个动作它都有一个值。

    • 再把这两部分加起来就可以得到Q 值。

  • Prioritized Experience Replay:原来在 sample 数据去训练 Q-network 的时候,我们是均匀地从 experience buffer 里面去 sample 数据。假设有一些数据,之前有 sample 过,发现这些数据的 TD error 特别大(TD error 就是网络的输出跟目标之间的差距),那这些数据代表在训练网络的时候, 训练是比较不好的。既然比较训练不好, 那就应该给它比较大的概率被 sample 到,即给它 priority,这样在训练的时候才会多考虑那些训练不好的训练数据。实际上在做 prioritized experience replay 的时候,你不仅会更改 sampling 的 过程,你还会更改更新参数的方法。所以 prioritized experience replay 不仅改变了 sample 数据的分布,还改变了训练过程

    • PER 的核心思想是通过 TD 误差 来考虑不同状态转移数据的重要性。 TD 误差 是一个令人惊喜的衡量标准。该方法之所以能有效,是由于某些经验数据相较于其他经验数据,可能包含更多值得学习的信息,所以给予这些包含更丰富信息量的经验更多的回放机会,有助于使得整个学习进度更为快速和高效。
    • 在经验回放中,正是因为随机采样而有助于消除样本之间的相关性的。然而在使用优先采样时,又放弃了纯随机采样。因此,减少高优先级状态转移数据的训练权重也有一定的道理。PER 使用了重要性采样( Importance-Sampling)权重来修正状态转移的偏差。
  • N步TD

    • 使用 n 步回报将使估计更加准确,也被证明可以通过适当调整 n 值来加快学习速度 。然而,在离线策略学习过程中,目标策略和行为策略在多个步骤中的行为选择可能并不匹配。
  • Noisy NetEpsilon Greedy 的探索是在动作的空间上面加噪声,但是有一个更好的方法叫做Noisy Net它是在参数的空间上面加噪声。Noisy Net 的意思是说,每一次在一个 episode 开始的时候,在跟环境互动的时候,在Q网络的每一个参数上面加上一个高斯噪声(Gaussian noise),那就把原来的 Q-function 变成 Q ~ \tilde{Q} Q~​ ,就得到一个新的网络叫做 Q ~ \tilde{Q} Q~​。

    • 在原来 sample 的方法,比如说 Epsilon Greedy 里面,就算是给同样的状态,你的 agent 采取的动作也不一定是一样的。但实际上在一个真实世界的策略,给同样的状态,他应该会有同样的回应。如果你是在 Q-function 上面去加噪声的话,那在整个互动的过程中,在同一个 episode 里面,它的网络的参数总是固定的,所以看到同样的状态,就会采取同样的动作( state-dependent exploration),也就是说你虽然会做探索这件事, 但是你的探索是跟状态有关系的,看到同样的状态, 你就会采取同样的探索的方式,即有系统地在尝试。而 Epsilon Greedy的动作只是随机乱试。
  • Distributional Q-function:对分布(distribution)建模,输出Q函数的分布。C51是一个典型的代表。

5. DDPG

深度确定性策略梯度(Deep Deterministic Policy Gradient,简称 DDPG)。

  • Deep 是因为用了神经网络;

  • Deterministic 表示 DDPG 输出的是一个确定性的动作,可以用于连续动作的一个环境;

  • Policy Gradient 代表的是它用到的是策略网络。REINFORCE 算法每隔一个 episode 就更新一次,但 DDPG 网络是每个 step 都会更新一次 policy 网络,也就是说它是一个单步更新的 policy 网络。

DDPG 直接在 DQN 基础上加了一个策略网络来直接输出动作值,所以 DDPG 需要一边学习 Q 网络,一边学习策略网络。用于连续性动作策略。

接下来就是类似 DQN。

  • DQN 的最佳策略是想要学出一个很好的 Q 网络,学好这个网络之后,我们希望选取的那个动作使 Q 值最大。

  • DDPG 的目的也是为了求解让 Q 值最大的那个 action。

    • Actor 只是为了迎合critic的评价而已,所以用来优化策略网络的梯度就是要最大化这个 Q 值,所以构造的 loss 函数就是让 Q 取一个负号。
    • 我们写代码的时候就是把这个 loss 函数扔到优化器里面,它就会自动最小化 loss,也就是最大化 Q。

这里要注意,除了策略网络要做优化,DDPG 还有一个 Q 网络也要优化。

  • 优化 Q 网络的方法其实跟 DQN 优化 Q 网络的方法一样,我们用真实的 reward r 和下一步的 Q 即 Q’ 来去拟合未来的收益 Q_target。然后让 Q 网络的输出去逼近这个 Q_target。
    • 所以构造的 loss function 就是直接求这两个值的均方差。
    • 构造好 loss 后,通过优化器,让它自动去最小化 loss。

伪代码:

【算法】强化学习算法知识点面试准备_第26张图片

6. TD3

虽然 DDPG 有时表现很好,但它在超参数和其他类型的调整方面经常很敏感。DDPG 常见的问题是已经学习好的 Q 函数开始显著地高估 Q 值,然后导致策略被破坏了,因为它利用了 Q 函数中的误差。

双延迟深度确定性策略梯度(Twin Delayed DDPG,简称 TD3)通过引入三个关键技巧来解决这个问题:

  • 截断的双 Q 学习(Clipped Dobule Q-learning) 。TD3 学习两个 Q-function(因此名字中有 “twin”)。TD3 通过最小化均方差来同时学习两个 Q-function: Q ϕ 1 Q_{\phi_1} Qϕ1​​ 和 Q ϕ 2 Q_{\phi_2} Qϕ2​​。两个 Q-function 都使用一个目标,两个 Q-function 中给出较小的值会被作为如下的 Q-target:

y ( r , s ′ , d ) = r + γ ( 1 − d ) min ⁡ i = 1 , 2 Q ϕ i , t a r g ( s ′ , a T D 3 ( s ′ ) ) y\left(r, s^{\prime}, d\right)=r+\gamma(1-d) \min _{i=1,2} Q_{\phi_{i, t a r g}}\left(s^{\prime}, a_{T D 3}\left(s^{\prime}\right)\right) y(r,s,d)=r+γ(1d)i=1,2minQϕi,targ(s,aTD3(s))

  • 延迟的策略更新(“Delayed” Policy Updates) 。相关实验结果表明,同步训练actor网络和critic网络,却不使用目标网络,会导致训练过程不稳定;当固定actor网络时,critic网络却能够收敛到正确的结果。因此 TD3 算法以较低的频率更新Actor网络,较高频率更新Critic网络,通常每更新两次Critic网络就更新一次策略。

  • 目标策略平滑(Target Policy smoothing) 。TD3 引入了 smoothing 的思想。在目标策略的输出动作中加入噪声,以此平滑 Q 值函数的估计,避免过拟合。

    目标策略平滑化的工作原理如下:
    a T D 3 ( s ′ ) = clip ⁡ ( μ θ , t a r g ( s ′ ) + clip ⁡ ( ϵ , − c , c ) , a low  , a high  ) a_{T D 3}\left(s^{\prime}\right)=\operatorname{clip}\left(\mu_{\theta, t a r g}\left(s^{\prime}\right)+\operatorname{clip}(\epsilon,-c, c), a_{\text {low }}, a_{\text {high }}\right) aTD3(s)=clip(μθ,targ(s)+clip(ϵ,c,c),alow ,ahigh )
    其中 ϵ \epsilon ϵ 本质上是一个噪声,是从正态分布中取样得到的,即 ϵ ∼ N ( 0 , σ ) \epsilon \sim N(0,\sigma) ϵN(0,σ)
    目标策略平滑化是一种正则化方法

7. SAC

  • Soft Actor-Critic (SAC)是面向最大熵开发的一种off policy算法,和DDPG相比,Soft Actor-Critic输出的是随机策略stochastic policy,相比确定性策略具有一定的优势。Soft Actor-Critic兼具稳定性高和样本利用率高的优点。

  • SAC的一个主要特征是entropy regularization( 熵正则化). policy被训练去最大程度上权衡期望回报和熵。熵是策略随机性的一个衡量。 增加熵也就说明策略的随机性增强,所以会增加更多的探索,从而可以加快后续的学习速度。可以防止policy过早的收敛到局部最优值。

  • SAC中Q函数的学习加入了熵的概念,在最大化回报的同时也要最大化熵

  • 与TD3不同,SAC计算目标所使用的下一个状态来自于当前策略而不是目标策略。

  • 与TD3不同,SAC中并没有明确的目标策略平滑处理,TD3训练得到的是确定性策略,因此需要通过对下一状态添加随机噪声来实现平滑。SAC训练得到的是一个随机策略,其随机性所造成的噪声已经足以产生类似的效果了。

  • 连续动作空间——再参数化技巧

    重参数化的做法是先从一个单位高斯分布采样,再把采样值乘以标准差后加上均值

    SAC 中使用的策略是一个 Tanh 归一化高斯分布,这与传统设置不同。 SAC 中的动作表示可以使用如下再参数化技巧:
    在这里插入图片描述
    由于 SAC 中策略的随机性,策略梯度可以在最大化期望价值函数时使用再参数化技巧得到

    【算法】强化学习算法知识点面试准备_第27张图片

    因而,梯度可以经过 Q 网络到策略网络,与 DPG 类似,即:

    【算法】强化学习算法知识点面试准备_第28张图片

  • 离散动作空间环境

    • 策略网络的输出修改为在离散动作空间上的 softmax 分布;所以在价值网络的学习过程中,不需要再对下一个动作进行采样,而是直接通过概率计算来得到下一个状态的价值。
    • 价值网络直接接收状态和离散动作空间的分布作为输入。

9. REINFORCE: Monte Carlo Policy Gradient

  • REINFORCE 用的是回合更新的方式,属于Monte Carlo更新方式。它在代码上的处理是先拿到每个步骤的奖励,然后计算每个步骤的未来总收益 G t G_t Gt是多少,然后拿每个 G t G_t Gt代入公式,去优化每一个动作的输出。所以编写代码时会有这样一个函数:输入每个步骤拿到的奖励,把这些奖励转成每一个步骤的未来总收益。因为未来总收益是这样计算的:
    G t = ∑ k = t + 1 T γ k − t − 1 r k = r t + 1 + γ G t + 1 \begin{aligned} G_{t} &=\sum_{k=t+1}^{T} \gamma^{k-t-1} r_{k} \\ &=r_{t+1}+\gamma G_{t+1} \end{aligned} Gt=k=t+1Tγkt1rk=rt+1+γGt+1

  • 上一个步骤和下一个步骤的未来总收益有这样一个关系,所以在代码的计算上,就是一步一步地从后往前推,先算 G t G_t Gt​,一直算到 G 1 G_1 G1

  • 算法伪代码
    在这里插入图片描述

  • REINFORCE 的伪代码主要看最后四行:先产生一个回合的数据,比如 ( s 1 , a 1 , G 1 ) , ( s 2 , a 2 , G 2 ) , ⋯   , ( s T , a T , G T ) (s_1,a_1,G_1),(s_2,a_2,G_2),\cdots,(s_T,a_T,G_T) (s1,a1,G1),(s2,a2,G2),,(sT,aT,GT)。然后针对每个动作来计算梯度。 在代码上计算时,我们要拿到神经网络的输出。神经网络会输出每个动作对应的概率值,然后我们还可以拿到实际的动作,把它转成 one-hot 向量乘一下,我们可以计算出 ln ⁡ π ( A t ∣ S t , θ ) \ln \pi(A_t|S_t,\theta) lnπ(AtSt,θ)

独热编码(one-hot Encoding)通常用于处理类别间不具有大小关系的特征。例如血型,一共有4个取值(A型、B型、AB型、O型),独热编码会把血型变成一个4维稀疏向量,A型血表示为(1,0,0,0),B型血表示为(0,1,0,0),AB型会表示为(0,0,1,0),O型血表示为(0,0,0,1)。

10. Dyna-Q

Dyna-Q 算法

Dyna-Q 算法是一个经典的基于模型的强化学习算法。如图所示,Dyna-Q 使用一种叫做 Q-planning 的方法来基于模型生成一些模拟数据,然后用模拟数据和真实数据一起改进策略。Qplanning 每次选取一个曾经访问过的状态 s s s ,采取一个曾经在该状态下执行过的动作 a a a ,通过模型得 到转移后的状态 s ′ s^{\prime} s 以及奖励 r r r ,并根据这个模拟数据 ( s , a , r , s ′ ) \left(s, a, r, s^{\prime}\right) (s,a,r,s) ,用 Q-learning 的更新方式来更新动 作价值函数。

【算法】强化学习算法知识点面试准备_第29张图片
【算法】强化学习算法知识点面试准备_第30张图片
  • 可以看到,在每次与环境进行交互执行一次 Q-learning 之后,Dyna-Q 会做n次 Q-planning。其中 Q-planning 的次数 N N N 是一个事先可以选择的超参数,当其为 0 时就是普通的 Q-learning。值得注意 的是,上述 Dyna-Q 算法是执行在一个离散并且确定的环境中,所以当看到一条经验数据 ( s , a , r , s ′ ) \left(s, a, r, s^{\prime}\right) (s,a,r,s) 时,可以直接对模型做出更新,即 M ( s , a ) ← r , s ′ M(s, a) \leftarrow r, s^{\prime} M(s,a)r,s
  • 相比Q learning最主要的修改是加入了环境模型model,我们可以用一个字典表示,每次在真实环境中收集到新的数据,就把它加入字典。根据字典的性质,若该数据本身存在于字典中,便不会再一次进行添加。在 Dyna-Q 的更新中,执行完 Q-learning 后,会立即执行 Q-planning。

11. A2C

同步优势 Actor-Critic( Synchronous Advantage Actor-Critic, A2C) 在 Actor-Critic 算法的基础上增加了并行计算的设计。

如图所示,全局Actor和全局Critic在 Master 节点维护。每个 Worker 节点的智能体通过协调器和全局Actor、全局Critic对话。在这个设计中,协调器负责收集各个 Worker节点上与环境交互的经验( Experience),然后根据收集到的轨迹执行一步更新。更新之后,全局Actor被同步到各个 Worker 上继续和环境交互。在 Master 节点上,全局Actor和全局Critic的学习方法和 Actor-Critic 算法中Actor和Critic的学习方法一致,都是使用 TD 平方误差作为Critic的损失函数,以及 TD 误差的策略梯度来更新Actor的。

【算法】强化学习算法知识点面试准备_第31张图片

在这种设计下, Worker 节点只负责和环境交互。所有的计算和更新都发生在 Master 节点。实际应用中,如果希望降低 Master 节点的计算负担,一些计算也可以转交给 Worker 节点(这经常取决于每个 Worker 节点的计算能力,比如是否有 GPU 计算能力),比如说,每个 Worker 节点保存了当前全局Critic。收集了一个轨迹之后, Worker 节点直接在本地计算给出全局Actor和全局Critic的梯度。这些梯度信息继而被传送回 Master 节点。最后,协调器负责收集和汇总从各个 Worker 节点收集到的梯度信息,并更新全局模型。同样地,更新后的全局Actor和全局Critic被同步到各个 Worker 节点。 A2C 算法的基本框架如下所示。

【算法】强化学习算法知识点面试准备_第32张图片

12. A3C

异步优势 Actor-Critic( Asynchronous Advantage Actor-Critic, A3C)是 A2C 的异步版本。在 A3C 的设计中,协调器被移除。每个 Worker 节点直接和全局Actor和全局Critic进行对话Master 节点则不再需要等待各个 Worker 节点提供的梯度信息,而是在每次有 Worker 节点结束梯度计算的时候直接更新全局 Actor-Critic。由于不再需要等待, A3C 有比A2C 更高的计算效率。但是同样也由于没有协调器协调各个 Worker 节点, Worker 节点提供梯度信息和全局 Actor-Critic 的一致性不再成立,即每次 Master 节点从 Worker 节点得到的梯度信息很可能不再是当前全局 Actor-Critic 的梯度信息。

虽然 A3C 为了计算效率而牺牲 Worker 节点和 Master 节点的一致性这一点看起来有些特殊,这种异步更新的方式在神经网络的更新中其实非常常见。近期的研究表明,异步更新不仅加速了学习,还自动为 SGD 产生了类似于动量( Momentum)的效果

【算法】强化学习算法知识点面试准备_第33张图片

A3C 实现中,有个全局的 AC 和许多 Worker。全局 AC 的功能是使用 Worker 节点采集的数据更新网络。每个 Worker 节点都有自己的 AC 网络,用来和环境交互。 Worker 节点并将采集的数据传给全局 AC,之后从全局 AC 获取最新的网络参数,再替换自己本地的参数并接着采集数据。

13. TRPO

这个算法的思想基于信赖域的想法,所以被称为信赖域策略优化算法。我们的目标是找到一个比原策略 π θ \pi_{\theta} πθ 更好的策略 π θ ′ \pi'_{\theta} πθ

根据策略梯度方法,参数更新方程式为:
θ = θ + α ∇ θ J \theta=\theta+\alpha\nabla_{\theta} J θ=θ+αθJ

策略梯度算法的硬伤就在更新步长 ,当步长不合适时,更新的参数所对应的策略是一个更不好的策略,当利用这个更不好的策略进行采样学习时,再次更新的参数会更差,因此很容易导致越学越差,最后崩溃。所以,合适的步长对于强化学习非常关键。

什么叫合适的步长

所谓合适的步长是指当策略更新后,回报函数的值不能更差。如何选择这个步长?或者说,如何找到新的策略使得新的回报函数的值单调增,或单调不减。这是TRPO要解决的问题。

TRPO是找到新的策略,使得回报函数单调不减,一个自然地想法是能不能将新的策略所对应的回报函数分解成旧的策略所对应的回报函数+其他项。只要新的策略所对应的其他项大于等于零,那么新的策略就能保证回报函数单调不减。

  • 技巧1

    这时,引入TRPO的第一个技巧对状态分布进行处理。我们忽略状态分布的变化,依然采用旧的策略所对应的状态分布。这个技巧是对原代价函数的第一次近似。其实,当新旧参数很接近时,我们将用旧的状态分布代替新的状态分布也是合理的。

  • 技巧2

    TRPO的第二个技巧是利用重要性采样对动作分布进行的处理。

  • 技巧3

    在约束条件中,利用平均KL散度代替最大KL散度(新旧策略分布之间的KL散度)。

接下来就是利用采样得到数据,然后求样本均值,解决优化问题即可。

【算法】强化学习算法知识点面试准备_第34张图片
【算法】强化学习算法知识点面试准备_第35张图片

14. PPO

  • TRPO 的实现较为复杂,而且计算自然梯度的计算复杂度也较高。即使是用共轭梯度法来近似 ,每一次更新参数也需要多步的共轭梯度算法。

  • Proximal Policy Optimization (PPO): 避免在使用important sampling时由于在 θ \theta θ 下的 p θ ( a t ∣ s t ) p_{\theta}\left(a_{t} | s_{t}\right) pθ(atst) 跟 在 θ ′ \theta ' θ 下的 p θ ′ ( a t ∣ s t ) p_{\theta'}\left(a_{t} | s_{t}\right) pθ(atst) 差太多,导致important sampling结果偏差较大而采取的算法。具体来说就是在training的过程中增加一个constrain,这个constrain对应着 θ \theta θ θ ′ \theta' θ output 的 action 的 KL divergence,来衡量 θ \theta θ θ ′ \theta' θ 的相似程度。

PPO-Penalty

与其优化一个带约束的优化问题, PPO 直接优化它的正则化版本,把约束项直接加入到优化项中。在 PPO 中,我们通过检验 KL 散度的值来决定 正则化系数 λ \lambda λ的值应该增大还是减小。

【算法】强化学习算法知识点面试准备_第36张图片

PPO-Clip

另一个方法是直接剪断用于策略梯度的目标函数,从而得到更保守的更新。通过取截断的目标函数和未截断的目标函数中较小的一方作为学习的最终目标函数。所以, PPO-Clip 可以理解为在最大化目标函数的同时将从 π θ \pi_{\theta} πθ π θ ′ \pi'_{\theta} πθ 的更新保持在可控范围内。

【算法】强化学习算法知识点面试准备_第37张图片

你可能感兴趣的:(强化学习,算法,机器学习,人工智能)