序列决策问题。或者说是对应的模型未知,需要通过学习逐渐逼近真实模型的问题并且当前的动作会影响环境的状态,即服从马尔可夫性的问题。同时应满足所有状态是可重复到达的(满足可学习型的)。
DL中的loss function目的是使预测值和真实值之间的差距最小,而RL中的loss function是使奖励和的期望最大。
参考: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类:
所谓的 model-based 就是在其上增加了 model learning->model->planning
的过程。通过 experience data 学习得到一个环境的模型。
显然,所有model-free都可以转变为model-based, model-based只是一个框架,任意的model-free算法都可以嵌套进去。
Markov Decision Process
)多了一个 决策,即系统的下一个状态只取决于它当前状态和和当前决策,而跟它当前状态之前的状态和决策无关。On-policy 指的是环境互动的策略和训练时更新的策略是同一个策略,相应地 off-policy 则是互动和更新时使用的是不同的策略。
On-policy 的思想比较直观,相当于一个智能体在环境中边试错边学习,但是其主要问题是样本利用率低,进而训练效率低。使用了一个策略与环境进行交互取得数据进而更新模型后,就产生了一个新的策略,那么旧策略交互得来的数据可能就不服从新策略的条件分布了,所以这些数据不能再使用会被丢弃。
Off-policy 则缓解了这个问题,主要通过将之前策略收集来的数据通过一个经验回放池 (experience replay buffer) 储存起来,然后从中采样数据进行训练。那么 off-policy 类方法为什么能使用旧策略产生的数据进行训练? 既然数据分布不同导致新旧数据不能放一起训练,那就调整数据分布使之接近就可以了,所以 Off-policy 类的算法普遍采用了重要性采样的思想对不同数据施加不同的权重。
其特点是一次性收集完一批数据后就只用这批数据进行训练,在正式部署之前不再与环境作任何交互。
误差梯度是神经网络训练过程中计算的方向和数量,用于以正确的方向和合适的量更新网络权重。 在深层网络或循环神经网络中,误差梯度可在更新中累积,变成非常大的梯度,然后导致网络权重的大幅更新,并因此使网络变得不稳定。在极端情况下,权重的值变得非常大,以至于溢出,导致 NaN 值。 网络层之间的梯度(值大于 1.0)重复相乘导致的指数级增长会产生梯度爆炸。 梯度爆炸引发的问题 在深度多层感知机网络中,梯度爆炸会引起网络不稳定,最好的结果是无法从训练数据中学习,而最坏的结果是出现无法再更新的 NaN 权重值。
某些情况下梯度趋近于0导致无法更新。
在某些情况下,梯度会变得非常小,有效地阻止了权重值的变化。在最坏的情况下,这可能会完全停止神经网络的进一步训练。例如,传统的激活函数(如双曲正切函数)具有范围(0,1)内的梯度,反向传播通过链式法则计算梯度。这样做的效果是,用这些小数字的n乘以n来计算n层网络中“前端”层的梯度,这意味着梯度(误差信号)随n呈指数递减,而前端层的训练非常缓慢。
在强化学习里面,探索 和利用 是两个很核心的问题。
bootstrapping 的意思就是我们基于之前估计的量来估计当前的量。
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 。
为了评估 v ( s ) v(s) v(s),需要进行如下步骤:
根据大数定律,只要我们得到足够多的轨迹,就可以趋近这个策略对应的价值函数。
时序差分是一种用来估计一个策略的价值函数的方法,它结合了蒙特卡洛和动态规划算法的思想。时序差分方法和蒙特卡洛的相似之处在于可以从样本数据中学习,不需要事先知道环境;和动态规划的相似之处在于根据贝尔曼方程的思想,利用后续状态的价值估计来更新当前状态的价值估计。
它使用自举法的原因是它需要从观察到的回报和对下个状态的估值中来构造它的目标。
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 由两部分组成:
之所以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))
TD 只执行了一步,状态的值就更新。
MC 全部走完了之后,到了终止状态之后,再更新它的值。
TD 可以在线学习(online learning),每走一步就可以更新,效率高。
MC 必须等一个回合结束才可以学习。
TD 可以从不完整序列上进行学习。
MC 只能从完整的序列上进行学习。
TD 可以在连续的环境下(没有终止)进行学习。
MC 只能在有终止的情况下学习。
TD 利用了马尔可夫性质,在马尔可夫环境下有更高的学习效率。
MC 没有假设环境具有马尔可夫性质,利用采样的价值来估计某一个状态的价值,在不是马尔可夫的环境下更加有效。
举个例子来解释 TD 和 MC 的区别,
TD 是指在不清楚马尔可夫状态转移概率的情况下,以采样的方式得到不完整的状态序列,估计某状态在该状态序列完整后可能得到的收益,并通过不断地采样持续更新价值。
MC 则需要经历完整的状态序列后,再来更新状态的真实价值。
例如,你想获得开车去公司的时间,每天上班开车的经历就是一次采样。假设今天在路口 A 遇到了堵车,
TD 能够在知道结果之前就开始学习,相比 MC,其更快速、灵活。
动态规划(Dynamic Programming,DP)适合解决满足如下两个性质的问题:
optimal substructure
)。最优子结构意味着,我们的问题可以拆分成一个个的小问题,通过解决这个小问题,最后,我们能够通过组合小问题的答案,得到大问题的答案,即最优的解。Overlapping subproblems
)。重叠子问题意味着,子问题出现多次,并且子问题的解决方案能够被重复使用。MDP 是满足动态规划的要求的:
Bellman equation
里面,我们可以把它分解成一个递归的结构。当我们把它分解成一个递归的结构的时候,如果我们的子问题子状态能得到一个值,那么它的未来状态因为跟子状态是直接相连的,那我们也可以继续推算出来。动态规划应用于 MDP 的规划问题(planning)而不是学习问题(learning),我们必须对环境是完全已知的(Model-Based),才能做动态规划,直观的说,就是要知道状态转移概率和对应的奖励才行.
动态规划能够完成预测问题和控制问题的求解,是解 MDP prediction 和 control 一个非常有效的方式。
Policy Iteration
分两步,首先进行 policy evaluation
,即对当前已经搜索到的策略函数进行一个估值。得到估值过后,进行 policy improvement
,即把 Q 函数算出来,我们进一步进行改进。不断重复这两步,直到策略收敛。Value iteration
直接把 Bellman Optimality Equation
拿进来,然后去寻找最佳的 value function
,在这里没有 policy function
。当算出 optimal value function
过后,我们再来提取最佳策略。一般策略迭代比值迭代快得多。策略迭代每次是在上一次迭代后的策略基础上进行优化的,而值迭代是一次性地从一开始一直迭代到最优策略,比如在一个大地图上找东西,策略迭代每次学到一点就会运用之前学到的东西也就是以非线性的方式扩大视野再进一步找,而值迭代则是不断的找最优点(即每次找max的点),每次都是固定的视野范围,需要的迭代次数也更多
最佳价值函数的定义为: 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 可以取得相同的最佳价值。
答:我们求解马尔可夫决策过程可以直接求解贝尔曼等式(动态规划方程),即 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)+γ∑s′∈SP(s′∣s)V(s′),用矩阵形式表示: V = R + γ P V V=R+\gamma PV V=R+γPV。但是贝尔曼等式很难求解且计算复杂度较高,所以可以使用动态规划、蒙特卡洛、时间差分等方法求解.
答: 如果不满足马尔科夫性,即下一个状态与之前的状态也有关,若还仅仅用当前的状态来进行求解决策过程,势必导致决策的泛化能力变差。 为了解决这个问题,可以利用RNN对历史信息建模,获得包含历史信息的状态表征。表征过程可以使用注意力机制等手段。最后在表征状态空间求解马尔可夫决策过程问题。
策略梯度( PolicyGradient)算法不对值函数进行估计,而是将策略参数化,直接在策略空间中搜索最优策略,最大化累积奖励。
随机策略表示为某个状态下动作取值的分布,确定性策略在每个状态只有一个确定的动作可以选。 从熵的角度来说,确定性策略的熵为0,没有任何随机性。随机策略有利于我们进行适度的探索,确定 性策略的探索问题更为严峻。
在神经网络中通常使用随机梯度下降法。随机的意思是我们随机选择一些样本来增量式的估计梯度,比如常用的 采用batch训练。如果样本是相关的,那就意味着前后两个batch的数据很可能也是相关的,那么估计的梯度也会呈现出某种相关性。不幸的情况下,后面的梯度估计可能会抵消掉前面的梯度量。从而使得训练难以收敛。
参考: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=Ex∼q[f(x)q(x)p(x)]=Ex∼p[f(x)]我们在已知 q q q 的分布后,可以使用上述公式计算出从 p p p 这个distribution sample x 代入 f f f 以后所算出来的期望值。
Importance sampling在RL中最直接的作用是化on policy为局部off policy,提升sample efficiency。
参考:https://zhuanlan.zhihu.com/p/542478018
比如,在 SAC 中,随机性策略被一个均值和一个方差,以及一个从正态分布( Normal Distribution)中采样的噪声项再参数化。
SAC 中使用的策略是一个 Tanh 归一化高斯分布,这与传统设置不同。 SAC 中的动作表示可以使用如下再参数化技巧:
由于 SAC 中策略的随机性,策略梯度可以在最大化期望价值函数时使用再参数化技巧得到
因而,梯度可以经过 Q 网络到策略网络,与 DPG 类似,即:
其使用一个采样batch 来更新策略,而 a(St, ϵ) 通过再参数化技巧来从随机性策略中采样。在这种情况下,再参数化技巧使得随机性策略能够以一种类似于 DPG 的方式来更新,而所得到的 SVG是介于 DPG 和 SPG 之间的方法。 DPG 也可以被看作 SVG(0) 的一种确定性极限( Deterministic Limit)
除了基于梯度( Gradient-Based)的优化方法来实现基于策略( Policy-Based)的学习,也有非基于梯度( Non-Gradient-Based)方法,也称无梯度( Gradient-Gree)优化方法,包括交叉熵( Cross-Entropy, CE)方法、协方差矩阵自适应( Covariance Matrix Adaptation, CMA)、爬山法( Hill Climbing), Simplex / Amoeba / Nelder-Mead 算法等。
答: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 覆盖过去。
答:A3C中,评论家学习值函数,同时有多个actor并行训练并且不时与全局参数同步。A3C旨在用于并行训练,是 on-policy 的方法。
答:
相比以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 存在探索不足的问题等。
答:critic表示了对于当前决策好坏的衡量。结合策略模块,当critic判别某个动作的选择时有益的,策略就更新参数以增大该动作出现的概率,反之降低动作出现的概率。
答: 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)。
首先需要说明的是,对于连续的动作控制空间,Q-learning、DQN等算法是没有办法处理的,所以我们需要使用神经网络进行处理,因为其可以既输出概率值 π θ ( a t ∣ s t ) \pi_\theta(a_t|s_t) πθ(at∣st) ,也可以输出确定的策略 μ θ ( s t ) \mu_{\theta}(s_t) μθ(st) 。
要输出离散动作的话,最后的output的激活函数使用 softmax 就可以实现。其可以保证输出是的动作概率,而且所有的动作概率加和为 1。
要输出连续动作的话,可以在输出层这里加一层 tanh激活函数。其作用可以把输出限制到 [-1,1] 之间。我们拿到这个输出后,就可以根据实际动作的一个范围再做一下缩放,然后再输出给环境。
分布的分布式DDPG(Distributed Distributional DDPG ,简称 D4PG),相对于DDPG其优化部分为:
定义: 令 ( 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} x∈X 时, 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} x−i 为除智能体 i i i 外其他所有智能体的策略集 合。当 ∀ i , x i ∈ X i \forall i, x_{i} \in \mathcal{X}_{i} ∀i,xi∈Xi 时,
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∗,x−i∗)⩾ui(xi,x−i∗).
策略 x ∗ ∈ X x^{*} \in \mathcal{X} x∗∈X 使当前场景达到纳什均衡。
假设存在一个专家智能体,其策略可以看成最优策略,我们就可以直接模仿这个专家在环境中交互的状态动作数据来训练一个策略,并且不需要用到环境提供的奖励信号。模仿学习(imitation learning)研究的便是这一类问题,在模仿学习的框架下,专家能够提供一系列状态动作 { ( s t , a t ) } \{(s_t,a_t)\} {(st,at)},表示专家在 s t s_t st环境下做出了 a t a_t at的动作,而模仿者的任务则是利用这些专家数据进行训练,无须奖励信号就可以达到一个接近专家的策略。目前学术界模仿学习的方法基本上可以分为 3 类:
下面分别简单的介绍:
行为克隆 ( 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)∼D∑∥ai−πθ(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)∼D∑∥ai−a~i∥22
这个使用监督学习直接模仿专家示范的方法称为行为克隆 (Behavioral Cloning, BC)。
局限性
BC 也存在很大的局限性,该局限在数据量比较小的时候犹为明显。具体来说,由于通过 BC 学习得到的策略只是拿小部分专家数据进行训练,因此 BC 只能在专家数据的状态分布下预测得比较准。然而,强化学习面对的是一个序贯决策问题,通过 BC 学习得到的策略在和环境交互过程中不可能完全学成最优,只要存在一点偏差,就有可能导致下一个遇到的状态是在专家数据中没有见过的。此时,由于没有在此状态(或者比较相近的状态)下训练过,策略可能就会随机选择一个动作,这会导致下一个状态进一步偏离专家策略遇到的的数据分布。最终,该策略在真实环境下不能得到比较好的效果,这被称为行为克隆的复合误差(compounding error)问题.
数据集聚合( 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(1−Dϕ(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 的优 化目标如图所示。
BC vs GAIL
在数据样本有限的情况下,BC 不能学习到最优策略,但是 GAIL 在相同的专家数据下可以取得非常好的结果。这一方面归因于 GAIL 的训练目标(拉近策略和专家的占用度量)十分贴合模仿学习任务的目标,避免了 BC 中的复合误差问题;另一方面得益于 GAIL 训练中,策略可以和环境交互出更多的数据,以此训练判别器,进而生成对基于策略“量身定做”的指导奖励信号。
另一种主要的模仿学习方法基于逆向强化学习(Inverse Reinforcement Learning, IRL) )。IRL 可以归结为解决从观察到的最优行为中提取奖励函数(Reward Function)的问题, 这些最优行为也可以表示为专家策略 π E \pi_{\mathrm{E}} πE 。
基于 IRL 的方法反复地在两个过程中交替: 一个是使用示范来推断一个隐藏的奖励或代价(Cost)函数, 另一个是使用强化学习基 于推断的奖励函数来学习一个模仿策略。
Third Person Imitation Learning
: 一种把第三人称视角所观察到的经验 generalize 到第一人称视角的经验的技术。参考博客:
Gumbel-Softmax就是在采用argmax的同时,让我们得到的结果可以保证是对原分布的逼近,也就是通过重参数化技巧来解决argmax不可导的问题,其实本质上还是重参数化的作用,而Gumbel-sofmax+argmax
得到的效果和softmax+random.choice
是相同的!
参考博客:https://zhuanlan.zhihu.com/p/45107835
全称是generalized advantage estimator,几乎所有最先进的policy gradient算法实现里面都使用了该技术。
不同地方有不同的含义。
含义1
含义2
https://zhuanlan.zhihu.com/p/345353294
如果输入的state是图片,那么可以进行resize和变成灰度图。进行resize的时候,尽可能保持原来的尺寸,这样进行输出action的时候能够保持尺度一致性。至于要不要变成灰度图,需要看看输入的state是否有较好的边缘,颜色是否携带较多信息等等。
采用随机或者normal distribution,均值为0,方差为1,可以设得小一些。太大的话,收敛会比较慢。当然,最好的初始化是用已经训练好的模型进行初始化,这个也叫做迁移学习。
一般使用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的动量项超参数。
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)+γa′maxQ(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 收敛性证明
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。
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+γa′∈AmaxQ(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+γmaxa′∈AQ(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+γmaxa′∈AQ(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=1∑N[Qω(si,ai)−(ri+γa′maxQω(si′,a′))]2
采用的关键技术
使用经验池
目标网络
详情参见:
https://blog.csdn.net/weixin_42301220/article/details/123221485
DQN 改进算法
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+1∣a)
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 数据的分布,还改变了训练过程。
N步TD
Noisy Net:Epsilon Greedy
的探索是在动作的空间上面加噪声,但是有一个更好的方法叫做Noisy Net
,它是在参数的空间上面加噪声。Noisy Net 的意思是说,每一次在一个 episode 开始的时候,在跟环境互动的时候,在Q网络的每一个参数上面加上一个高斯噪声(Gaussian noise),那就把原来的 Q-function 变成 Q ~ \tilde{Q} Q~ ,就得到一个新的网络叫做 Q ~ \tilde{Q} Q~。
state-dependent exploration
),也就是说你虽然会做探索这件事, 但是你的探索是跟状态有关系的,看到同样的状态, 你就会采取同样的探索的方式,即有系统地在尝试。而 Epsilon Greedy的动作只是随机乱试。Distributional Q-function:对分布(distribution)建模,输出Q函数的分布。C51是一个典型的代表。
深度确定性策略梯度(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。
这里要注意,除了策略网络要做优化,DDPG 还有一个 Q 网络也要优化。
伪代码:
虽然 DDPG 有时表现很好,但它在超参数和其他类型的调整方面经常很敏感。DDPG 常见的问题是已经学习好的 Q 函数开始显著地高估 Q 值,然后导致策略被破坏了,因为它利用了 Q 函数中的误差。
双延迟深度确定性策略梯度(Twin Delayed DDPG,简称 TD3)通过引入三个关键技巧来解决这个问题:
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+γ(1−d)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,σ)。
目标策略平滑化是一种正则化方法。
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 中策略的随机性,策略梯度可以在最大化期望价值函数时使用再参数化技巧得到
因而,梯度可以经过 Q 网络到策略网络,与 DPG 类似,即:
离散动作空间环境
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+1∑Tγk−t−1rk=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π(At∣St,θ)。
独热编码(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)。
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 的更新方式来更新动 作价值函数。
同步优势 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的。
在这种设计下, Worker 节点只负责和环境交互。所有的计算和更新都发生在 Master 节点。实际应用中,如果希望降低 Master 节点的计算负担,一些计算也可以转交给 Worker 节点(这经常取决于每个 Worker 节点的计算能力,比如是否有 GPU 计算能力),比如说,每个 Worker 节点保存了当前全局Critic。收集了一个轨迹之后, Worker 节点直接在本地计算给出全局Actor和全局Critic的梯度。这些梯度信息继而被传送回 Master 节点。最后,协调器负责收集和汇总从各个 Worker 节点收集到的梯度信息,并更新全局模型。同样地,更新后的全局Actor和全局Critic被同步到各个 Worker 节点。 A2C 算法的基本框架如下所示。
异步优势 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)的效果。
A3C 实现中,有个全局的 AC 和许多 Worker。全局 AC 的功能是使用 Worker 节点采集的数据更新网络。每个 Worker 节点都有自己的 AC 网络,用来和环境交互。 Worker 节点并将采集的数据传给全局 AC,之后从全局 AC 获取最新的网络参数,再替换自己本地的参数并接着采集数据。
这个算法的思想基于信赖域的想法,所以被称为信赖域策略优化算法。我们的目标是找到一个比原策略 π θ \pi_{\theta} πθ 更好的策略 π θ ′ \pi'_{\theta} πθ′ 。
根据策略梯度方法,参数更新方程式为:
θ = θ + α ∇ θ J \theta=\theta+\alpha\nabla_{\theta} J θ=θ+α∇θJ
策略梯度算法的硬伤就在更新步长 ,当步长不合适时,更新的参数所对应的策略是一个更不好的策略,当利用这个更不好的策略进行采样学习时,再次更新的参数会更差,因此很容易导致越学越差,最后崩溃。所以,合适的步长对于强化学习非常关键。
什么叫合适的步长?
所谓合适的步长是指当策略更新后,回报函数的值不能更差。如何选择这个步长?或者说,如何找到新的策略使得新的回报函数的值单调增,或单调不减。这是TRPO要解决的问题。
TRPO是找到新的策略,使得回报函数单调不减,一个自然地想法是能不能将新的策略所对应的回报函数分解成旧的策略所对应的回报函数+其他项。只要新的策略所对应的其他项大于等于零,那么新的策略就能保证回报函数单调不减。
技巧1
这时,引入TRPO的第一个技巧对状态分布进行处理。我们忽略状态分布的变化,依然采用旧的策略所对应的状态分布。这个技巧是对原代价函数的第一次近似。其实,当新旧参数很接近时,我们将用旧的状态分布代替新的状态分布也是合理的。
技巧2
TRPO的第二个技巧是利用重要性采样对动作分布进行的处理。
技巧3
在约束条件中,利用平均KL散度代替最大KL散度(新旧策略分布之间的KL散度)。
接下来就是利用采样得到数据,然后求样本均值,解决优化问题即可。
TRPO 的实现较为复杂,而且计算自然梯度的计算复杂度也较高。即使是用共轭梯度法来近似 ,每一次更新参数也需要多步的共轭梯度算法。
Proximal Policy Optimization (PPO): 避免在使用important sampling时由于在 θ \theta θ 下的 p θ ( a t ∣ s t ) p_{\theta}\left(a_{t} | s_{t}\right) pθ(at∣st) 跟 在 θ ′ \theta ' θ′ 下的 p θ ′ ( a t ∣ s t ) p_{\theta'}\left(a_{t} | s_{t}\right) pθ′(at∣st) 差太多,导致important sampling结果偏差较大而采取的算法。具体来说就是在training的过程中增加一个constrain,这个constrain对应着 θ \theta θ 跟 θ ′ \theta' θ′ output 的 action 的 KL divergence,来衡量 θ \theta θ 与 θ ′ \theta' θ′ 的相似程度。
与其优化一个带约束的优化问题, PPO 直接优化它的正则化版本,把约束项直接加入到优化项中。在 PPO 中,我们通过检验 KL 散度的值来决定 正则化系数 λ \lambda λ的值应该增大还是减小。
另一个方法是直接剪断用于策略梯度的目标函数,从而得到更保守的更新。通过取截断的目标函数和未截断的目标函数中较小的一方作为学习的最终目标函数。所以, PPO-Clip 可以理解为在最大化目标函数的同时将从 π θ \pi_{\theta} πθ 到 π θ ′ \pi'_{\theta} πθ′ 的更新保持在可控范围内。