强化学习的学习之路(二十八)_2021-01-28:Rainbow

作为一个新手,写这个强化学习-基础知识专栏是想和大家分享一下自己学习强化学习的学习历程,希望对大家能有所帮助。这个系列后面会不断更新,希望自己在2021年能保证平均每日一更的更新速度,主要是介绍强化学习的基础知识,后面也会更新强化学习的论文阅读专栏。本来是想每一篇多更新一点内容的,后面发现大家上CSDN主要是来提问的,就把很多拆分开来了(而且这样每天任务量也小一点哈哈哈哈偷懒大法)。但是我还是希望知识点能成系统,所以我在目录里面都好按章节系统地写的,而且在github上写成了书籍的形式,如果大家觉得有帮助,希望从头看的话欢迎关注我的github啊,谢谢大家!另外我还会分享深度学习-基础知识专栏以及深度学习-论文阅读专栏,很早以前就和小伙伴们花了很多精力写的,如果有对深度学习感兴趣的小伙伴也欢迎大家关注啊。大家一起互相学习啊!可能会有很多错漏,希望大家批评指正!不要高估一年的努力,也不要低估十年的积累,与君共勉!

接下来的几个博客将会分享以下有关DQN算法及其改进,包括DQN(Nature)、Double DQN、 Multi-step DQN、Pirority Replay Buffer、 Dueling DQN、DQN from Demonstrations、Distributional DQN、Noisy DQN、Q-learning with continuous actions、Rainbow、Practical tips for DQN等。

Rainbow

Rainbow一个集多长所长的模型,来自论文 Rainbow: Combining Improvements in Deep Reinforcement Learning,他主要包括我们前面提到的一下几个改进,我们这里稍微再回顾一下:

Double Q-Learning

Double Q-Learning 构建了两个结构相同但是参数数值不同的模型:Behavior Net-work 和 Target Network。在模型更新时,首先由 Behavior Network 选出 t + 1 t+1 t+1 时刻的最优行动,然后由 Target Network 得到估计 t + 1 t+1 t+1 时刻最优行动的目标价值估计。通过将这两个步骤解耦,我们可以减少 Q-Learning 方法对价值过高估计带来的影响,其中的核心公式为
L ( θ ) = ( r t + 1 + γ q θ − ( s t + 1 , argmax ⁡ a ′ q θ ( s t + 1 , a ′ ) ) − q θ ( s t , a t ) ) 2 L(\theta)=\left(r_{t+1}+\gamma q_{\theta^{-}}\left(s_{t+1}, \operatorname{argmax}_{a^{\prime}} q_{\theta}\left(s_{t+1}, a^{\prime}\right)\right)-q_{\theta}\left(s_{t}, a_{t}\right)\right)^{2} L(θ)=(rt+1+γqθ(st+1,argmaxaqθ(st+1,a))qθ(st,at))2

Prioritized Replay Buffer

Prioritized Replay Buffer 通过对 Replay Buffer 中不同的样本赋子不同的权重,使得 模型有更高的概率训练对自己有更多提升的样本上, 同时以较低的概率训练对自己提升有限的样本。样本出现的权重和样本采样时的 TD-Error有关,样本的学习率和更新权重还可以根据参数进行调整。

Dueling Networks

Dueling Networks 将状态行动价值模型 q ( s , a ) q(s, a) q(s,a) 分解成状态价值 v ( s ) v(s) v(s) 和价值优势 A ( s , a ) A(s, a) A(s,a) 两个部分,分解后的两部分具有明确的含义,而这样的分解也同时降低了训练的难度,其中的核心公式为

q ( s t , a t ) = v ( s t ) + ( A ( s t , a t ) − 1 ∣ A ∣ ∑ a ′ A ( s t , a t ′ ) ) q\left(s_{t}, a_{t}\right)=v\left(s_{t}\right)+\left(A\left(s_{t}, a_{t}\right)-\frac{1}{|A|} \sum_{a^{\prime}} A\left(s_{t}, a_{t}^{\prime}\right)\right) q(st,at)=v(st)+(A(st,at)A1aA(st,at))

Multi-step Learning

前面介绍的 Q-Learning 大多通过下一时刻的回报和价值估计得到目标价值,这种方法在前期具有学习速度较慢的弱点,为了克服这个弱点,Multi-step Learning 使用了更多步的回报,这样在训练前期目标价值可以估计得更准确,从而加快训练速度,其中的核心公式为
q ′ ( s t , a t ) = r t + 1 + γ r t + 2 + ⋯ + γ n − 1 r t + n + max ⁡ a γ n q ( s t + n + 1 , a ) q^{\prime}\left(s_{t}, \boldsymbol{a}_{t}\right)=r_{t+1}+\gamma \boldsymbol{r}_{t+2}+\cdots+\gamma^{n-1} r_{t+n}+\max _{a} \gamma^{n} q\left(s_{t+n+1}, \boldsymbol{a}\right) q(st,at)=rt+1+γrt+2++γn1rt+n+amaxγnq(st+n+1,a)

Distributional Network

DQN 网络只输出了期望形式的价值,而对价值缺少更细致的刻画。Distributional Network 的模型结构可以输出价值的分布形式。我们可以设定价值模型可能的输出范围 [ V M I N , V M A X ] , \left[V_{\mathrm{MIN}}, V_{\mathrm{MAX}}\right], [VMIN,VMAX], 并在范围内以直方图的形式表示价值对应的出现概率,这使模型的表现能力有了很大的提升,分布形式模型的表示形式如下所示:
{ z i = V M I N + i Δ z : 0 ⩽ i < N } p i ( x , a ) = e θ i ( x , a ) ∑ j e θ j ( x , a ) \begin{array}{l} \left\{z_{i}=V_{\mathrm{MIN}}+i \Delta z: 0 \leqslant i<N\right\} \\ p_{i}(x, a)=\frac{\mathrm{e}^{\theta_{i}(\boldsymbol{x}, a)}}{\sum_{j} \mathrm{e}^{\theta_{j}(\boldsymbol{x}, \boldsymbol{a})}} \end{array} {zi=VMIN+iΔz:0i<N}pi(x,a)=jeθj(x,a)eθi(x,a)

Noisy Network

模型的探索能力一直是一个需要提高的方面。为了更优雅、灵活地提高模型的探索能力, Noisy Network 为模型参数加入了一定的噪声,通过噪声的随机性改变参数的 数值,进而改变模型输出的数值,对应的更新公式为
L ( θ ) = E ϵ − , ϵ [ E ( s t , a t , r t , s t + 1 ) ∼ D [ r t + γ max ⁡ a ∗ ∈ A Q ( s t + 1 , a ∗ , ϵ − ; θ − , σ − ) − Q ( s t , a t , ϵ ; θ , σ ) ] 2 ] \begin{aligned} L(\theta)=& E_{\epsilon^{-}, \epsilon}\left[E_{\left(s_{t}, a_{t}, r_{t}, s_{t+1}\right) \sim D}\left[r_{t}+\gamma \max _{a * \in A} Q\left(s_{t+1}, a^{*}, \epsilon^{-} ; \theta^{-}, \sigma^{-}\right)\right.\right.\\ &\left.\left.-Q\left(s_{t}, a_{t}, \epsilon ; \theta, \sigma\right)\right]^{2}\right] \end{aligned} L(θ)=Eϵ,ϵ[E(st,at,rt,st+1)D[rt+γaAmaxQ(st+1,a,ϵ;θ,σ)Q(st,at,ϵ;θ,σ)]2]

如何结合:

首先我们把TD的一步自举换成n步自举, 目的分布变成了
d t ( n ) = ( R t ( n ) + γ t ( n ) z , p θ ˉ ( S t + n , a t + n ∗ ) ) d_{t}^{(n)}=\left(R_{t}^{(n)}+\gamma_{t}^{(n)} z, \quad \boldsymbol{p}_{\bar{\theta}}\left(S_{t+n}, a_{t+n}^{*}\right)\right) dt(n)=(Rt(n)+γt(n)z,pθˉ(St+n,at+n))
于是损失函数变成了
D K L ( Φ z d t ( n ) ∥ d t ) D_{\mathrm{KL}}\left(\Phi_{z} d_{t}^{(n)} \| d_{t}\right) DKL(Φzdt(n)dt)
注意Rainbow是2017年提出的, 那时候人们还在用C51呢, 所以用KL散度衡量两个分布之间的差异不足为奇。
接下来, Prioritized experience replay排序的顺序也需要调整, 因为之前我们是依据TD-error排 序的, 现在因为不再使用Q值函数了, TD-error应该进化为KL散度了, 于是
p t ∝ ( D K L ( Φ z d t ( n ) ∥ d t ) ) ω p_{t} \propto\left(D_{\mathrm{KL}}\left(\Phi_{z} d_{t}^{(n)} \| d_{t}\right)\right)^{\omega} pt(DKL(Φzdt(n)dt))ω
最后是把Dueling DQN的结构和Distributional DQN的结构结合起来, 因为它们都是对网络结构进行了调整。
我们从Dueling DQN的结构出发, 原先是输出一个状态值函数 V ( s ) V(s) V(s) 和一組动作的优势函数 A ( s , a ) , A(s, a), A(s,a), 现在我们需要输出分布了。
别忘了C51用的是固定的atoms位置, 可变的atoms概率表示分布。atoms的个数为 N N N
那么value stream v η v_{\eta} vη 的输出应该是一个 N N N 维的向量, 而advantage stream a ψ a_{\psi} aψ 的输出应该 是一个 N × ∣ A ∣ N \times|\mathcal{A}| N×A 的矩阵, 最后每个atoms对应的概率可以表示头
p θ i ( s , a ) = exp ⁡ ( v η i ( ϕ ) + a ψ i ( ϕ , a ) − a ˉ ψ i ( s ) ) ∑ j exp ⁡ ( v η j ( ϕ ) + a ψ j ( ϕ , a ) − a ˉ ψ j ( s ) ) p_{\theta}^{i}(s, a)=\frac{\exp \left(v_{\eta}^{i}(\phi)+a_{\psi}^{i}(\phi, a)-\bar{a}_{\psi}^{i}(s)\right)}{\sum_{j} \exp \left(v_{\eta}^{j}(\phi)+a_{\psi}^{j}(\phi, a)-\bar{a}_{\psi}^{j}(s)\right)} pθi(s,a)=jexp(vηj(ϕ)+aψj(ϕ,a)aˉψj(s))exp(vηi(ϕ)+aψi(ϕ,a)aˉψi(s))

最后,作者还比较了如果从Rainbow中去掉某个因素,模型的性能: 可以看出Prioritized replay和multi-step learning是最关键的两项技术,特别是multi-step learning。

在这里插入图片描述
上一篇:强化学习的学习之路(二十七)_2021-01-27:Q-learning with continuous actions
上一篇:强化学习的学习之路(二十九)_2021-01-29:Practical tips for DQN

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页