深度强化学习(3)Prioritized Replay DQN

Prioritized Replay DQN

在深度强化学习(2)Double DQN 中,我们讲到了DDQN使用两个Q网络,用当前Q网络计算最大Q值对应的动作,用目标Q网络计算这个最大动作对应的目标Q值,进而消除贪婪法带来的偏差。今天我们在DDQN的基础上,对经验回放部分的逻辑做优化。对应的算法是Prioritized Replay DQN。

DQN 的成功归因于经验回放和独立的目标网络。Double DQN 改进了Qlearning中的max操作,经验回放仍然采用均匀分布。经验回放时利用均匀分布采样并不是高效利用数据的方法。因为,智能体的经验即经历过的数据,对于智能体的学习并非具有同等重要的意义。智能体在某些状态的学习效率比其他状态的学习效率高。优先回放的基本思想就是打破均匀采样,赋予学习效率高的状态以更大的采样权重。

如何选择权重?⼀个理想的标准是智能体学习的效率越高,权重越大。符合该标准的⼀个选择是TD偏差 δ \delta δ。TD偏差越大,智能体的更新量越大,对我们反向传播的作用越大,因此该处的学习效率越高。而TD偏差小的样本,由于TD偏差小,对反向梯度的计算影响不大。

Prioritized Replay DQN根据每个样本的TD偏差绝对值 ∣ δ ( t ) ∣ |\delta(t)| δ(t),给定该样本的优先级正比于 ∣ δ ( t ) ∣ |\delta(t)| δ(t),将这个优先级的值存入经验回放池。之前的DQN算法,我们仅仅只保存和环境交互得到的样本状态,动作,奖励等数据,没有优先级这个说法。

由于引入了经验回放的优先级,那么Prioritized Replay DQN的经验回放池和之前的其他DQN算法的经验回放池就不一样了。因为这个优先级大小会影响它被采样的概率。在实际使用中,我们通常使用SumTree这样的二叉树结构来做我们的带优先级的经验回放池样本的存储。

具体的SumTree树结构如下图:
深度强化学习(3)Prioritized Replay DQN_第1张图片
所有的经验回放样本只保存在最下面的叶子节点中,一个节点一个样本。内部节点不保存样本数据。而叶子节点除了保存数据以外,还要保存该样本的优先级,就是图中的显示的数字。对于内部节点每个节点只保存自己的儿子节点的优先级值之和,如图中内部节点上显示的数字。

这样保存有什么好处呢?主要是方便采样。以上面的树结构为例,根节点是42,如果要采样一个样本,那么我们可以在[0,42]之间做均匀采样,采样到哪个区间,就是哪个样本。比如我们采样到了26, 在(25-29)这个区间,那么就是第四个叶子节点被采样到。
注意到第三个叶子节点优先级最高,是12,它的区间13-25也是最长的,会比其他节点更容易被采样到。
如果要采样两个样本,我们可以在[0,21],[21,42]两个区间做均匀采样,方法和上面采样一个样本类似。

除了经验回放池,现在我们的Q网络的算法损失函数也有优化,之前我们的损失函数是:

1 m ∑ j = 1 m ( y j − Q ( ϕ ( S j ) , A j , w ) ) 2 \frac{1}{m} \sum_{j=1}^{m}\left(y_{j}-Q\left(\phi\left(S_{j}\right), A_{j}, w\right)\right)^{2} m1j=1m(yjQ(ϕ(Sj),Aj,w))2

现在我们新的考虑了样本优先级的损失函数是:

1 m ∑ j = 1 m w j ( y j − Q ( ϕ ( S j ) , A j , w ) ) 2 \frac{1}{m} \sum_{j=1}^{m} w_{j}\left(y_{j}-Q\left(\phi\left(S_{j}\right), A_{j}, w\right)\right)^{2} m1j=1mwj(yjQ(ϕ(Sj),Aj,w))2

其中 w j w_{j} wj是第 j j j个样本的优先级权重。

w j = ( N ∗ P ( j ) ) − β max ⁡ i ( w i ) = ( N ∗ P ( j ) ) − β max ⁡ i ( ( N ∗ P ( i ) ) − β ) = ( P ( j ) ) − β max ⁡ i ( ( P ( i ) ) − β ) = ( p ( j ) min ⁡ i P ( i ) ) − β w_{j}=\frac{(N * P(j))^{-\beta}}{\max _{i}\left(w_{i}\right)}=\frac{(N * P(j))^{-\beta}}{\max _{i}\left((N * P(i))^{-\beta}\right)}=\frac{(P(j))^{-\beta}}{\max _{i}\left((P(i))^{-\beta}\right)}=\left(\frac{p(j)}{\min _{i} P(i)}\right)^{-\beta} wj=maxi(wi)(NP(j))β=maxi((NP(i))β)(NP(j))β=maxi((P(i))β)(P(j))β=(miniP(i)p(j))β

我们在样本 i i i处的采样概率为:

P ( i ) = p i α Σ k p k α P(i)=\frac{p_{i}^{\alpha}}{\Sigma_{k} p_{k}^{\alpha}} P(i)=Σkpkαpiα

我们把TD偏差的绝对值 ∣ δ ( t ) ∣ |\delta(t)| δ(t) 作 为 p i 作为p_{i} pi的值。在实际计算中,我们会取 p i α p_{i}^{\alpha} piα

算法流程
输入:迭代轮数 T T T,状态特征维度 n n n, 动作集 A A A, 步长 α α α,采样权重系数 β β β,衰减因子 γ γ γ, 探索率 ϵ ϵ ϵ, 当前Q网络 Q Q Q,目标Q网络 Q ′ Q^{\prime} Q, 批量梯度下降的样本数 m m m,目标Q网络参数更新频率 C C C, SumTree的叶子节点数 N N N
输出: Q Q Q网络参数。

  1. 随机初始化所有的状态和动作对应的价值 Q Q Q. 随机初始化当前 Q Q Q网络的所有参数 w w w,初始化目标Q网络 Q ′ Q^{\prime} Q的参数 w ′ w^{\prime} w= w w w。初始化经验回放SumTree的默认数据结构,所有SumTree的 N N N个叶子节点的优先级 p j p_{j} pj为0。
  2. for i from 1 to T T T,进行迭代。
     a) 初始化 S S S为当前状态序列的第一个状态, 拿到其特征向量 ϕ ( S ) ϕ(S) ϕ(S)
     
     b) 在 Q Q Q网络中使用 ϕ ( S ) ϕ(S) ϕ(S)作为输入,得到 Q Q Q网络的所有动作对应的 Q Q Q值输出。用 ϵ − ϵ− ϵ贪婪法在当前 Q Q Q值输出中选择对应的动作 A A A
     
     c) 在状态 S S S执行当前动作 A A A,得到新状态 S ′ S^{\prime} S对应的特征向量 ϕ ( S ′ ) \phi\left(S^{\prime}\right) ϕ(S)和奖励 R R R,是否终止状态is_end
     
     d) 将 { ϕ ( S ) , A , R , ϕ ( S ′ ) , i s − e n d } \left\{\phi(S), A, R, \phi\left(S^{\prime}\right), i s_{-} e n d\right\} {ϕ(S),A,R,ϕ(S),isend}这个五元组存入SumTree
     
     e) S S S= S ′ S^{\prime} S
     
     f) 从SumTree中采样mm个样本 { ϕ ( S j ) , A j , R j , ϕ ( S j ′ ) , i s − e n d j } , j = 1 , 2. , , , m \left\{\phi\left(S_{j}\right), A_{j}, R_{j}, \phi\left(S_{j}^{\prime}\right), i s_{-} e n d_{j}\right\}, j=1,2 .,,, m {ϕ(Sj),Aj,Rj,ϕ(Sj),isendj},j=1,2.,,,m,每个样本被采样的概率基于 P ( i ) = p i α Σ k p k α P(i)=\frac{p_{i}^{\alpha}}{\Sigma_{k} p_{k}^{\alpha}} P(i)=Σkpkαpiα,损失函数权重 w j = ( N ∗ P ( j ) ) − β / max ⁡ i ( w i ) w_{j}=(N * P(j))^{-\beta} / \max _{i}\left(w_{i}\right) wj=(NP(j))β/maxi(wi),计算当前目标Q值 y j y_{j} yj
     
    y j = { R j is end  j  is true  R j + γ Q ′ ( ϕ ( S j ′ ) , arg ⁡ max ⁡ a ′ Q ( ϕ ( S j ′ ) , a , w ) , w ′ ) i s − e n d j  is false  y_{j}=\left\{\begin{array}{ll}{R_{j}} & {\text {is end }_{j} \text { is true }} \\ {R_{j}+\gamma Q^{\prime}\left(\phi\left(S_{j}^{\prime}\right), \arg \max _{a^{\prime}} Q\left(\phi\left(S_{j}^{\prime}\right), a, w\right), w^{\prime}\right)} & {i s_{-} e n d_{j} \text { is false }}\end{array}\right. yj={RjRj+γQ(ϕ(Sj),argmaxaQ(ϕ(Sj),a,w),w)is end j is true isendj is false 
     
     g) 使用均方差损失函数 1 m ∑ j = 1 m w j ( y j − Q ( ϕ ( S j ) , A j , w ) ) 2 \frac{1}{m} \sum_{j=1}^{m} w_{j}\left(y_{j}-Q\left(\phi\left(S_{j}\right), A_{j}, w\right)\right)^{2} m1j=1mwj(yjQ(ϕ(Sj),Aj,w))2,通过神经网络的梯度反向传播来更新 Q Q Q网络的所有参数 w w w
     
     h) 重新计算所有样本的TD误差 δ j = y j − Q ( ϕ ( S j ) , A j , w ) \delta_{j}=y_{j}-Q\left(\phi\left(S_{j}\right), A_{j}, w\right) δj=yjQ(ϕ(Sj),Aj,w),更新SumTree中所有节点的优先级 p j = ∣ δ j ∣ p_{j}=\left|\delta_{j}\right| pj=δj
     
     i) 如果 T T T% C C C=1,则更新目标Q网络参数 w ′ w^{\prime} w= w w w
     
     j) 如果 S ′ S^{\prime} S是终止状态,当前轮迭代完毕,否则转到步骤 b)

注意,上述第二步的f步和g步的 Q Q Q值计算也都需要通过 Q Q Q网络计算得到。另外,实际应用中,为了算法较好的收敛,探索率 ϵ ϵ ϵ需要随着迭代的进行而变小。

参考文献
[1]https://www.cnblogs.com/pinard/p/9797695.html

你可能感兴趣的:(深度强化学习)