经验回放

概念

传统DQN的缺陷:

  1. 用于训练的 $(s_t,a_t,r_t,s_{t+1})$ 具有较强的相关性($s_t$训练完,就使用 $s_{t+1}$),这种相关性是有害的

经验回放(experience replay):

  1. 将每一次 $(s_t,a_t,r_t,s_{t+1})$ 都放入一个「回放缓冲区replay buffer」中。缓冲区大小一定,存满后,就进行入队和出队
  2. 利用「随机梯度SGD」进行模型的更新: 从回放缓冲区中,随机抽取一项进行模型更新计算

优先经验回放

原因: 角色对于常规的游戏环境会在「回放缓冲区」中存放大量的经验,而对于BOSS关卡的经验却很少。对于经验回放,若采用均匀抽样,就会导致对BOSS关卡的学习机会变少。

优先经验回放: 对于特殊状态(例如BOSS关卡),增加其被抽中学习的概率。 4. 实现方法: $|\delta_t|$ 越大,被抽中的概率越大

  • 方法一: $p_t \propto |\delta_t| + \epsilon$,即被抽样的概率 $p_t$ 正比于TD error绝对值 $|\delta_t|$
  • 方法二: $p_t \propto \frac{1}{i}$,其中 i 是状态根据 $|\delta_t|$ 降序排列的索引。
  1. 更新 $|\delta_t|$:
    • 初始值设置为最大值。因为状态只有进行一次学习计算后才能知道结果
    • 每一次学习后,更新对于状态的 $|\delta_t|$

高估问题

高估的原因

1. 最大化

定理: $x_1,x_2,\dotsm,x_n$是真实序列;$Q_1,Q_2,\dotsm,Q_n$是真实值带有均值为 $0$ 噪声的观测值。就存在

$$\begin{aligned} E [mean(Q_i)] &= mean(x_i) \\ E [max(Q_i)] &\ge max(x_i) \\ E [min(Q_i)] &\le min(x_i) \\ \end{aligned}$$

预测值高估: TD目标为 $y_t = r_t + \gamma \max\limits_a Q(s_{t+1},a;w)$ ,根据上述定理可知,$\max\limits_a Q(s_{t+1},a;w)$ 的值相对于真实值,其实被放大了,进一步导致 $y_t$ 的值被高估。由于 $y_t$ 是目标,这就使得DQN模型的预测值被高估。

2. 自举

在TD目标中 $y_t = r_t + \gamma \max\limits_a Q(s_{t+1},a;w)$,$Q(s_{t+1},a;w)$ 其实已经被模型高估计算了,这个高估的值又被回代用来更新 $Q(s_t,a;w)$ 的值,这就使得高估值被迭代放大。

高估的危害

由于DQN对于 $Q(s,a;w)$ 的高估并非均匀的,这就导致最后的预测结果大小关系的改变。这就导致「动作」的选择,可能是错误的。

目标网络

算法:

  1. TD目标:$y_t = r_t + \gamma \max\limits_a Q (s_{t+1},a;w^-)$
  2. TD误差:$\delta_t = Q(s_t,a_t;w) - y_t$
  3. 损失函数:$L=\frac{1}{2} \delta_t^2$
  4. 更新 $Q(s_t,a_t;w)$ 系数:$w = w - \alpha \delta_t \frac{\partial Q(s,a;w)}{\partial w}$
  5. 更新 $Q(s,a;w^-)$ 系数: 要一段时间才更新一次
    • 方法一: $w^- = w$
    • 方法二: $w^- = \tau w + (1 - \tau) w^-$

double DQN

算法:

  1. 选择下一动作:$a^* = \max\limits_a Q (s_{t+1},a;w)$
  2. TD目标:$y_t = r_t + \gamma Q (s_{t+1},a^*;w^-)$
  3. TD误差:$\delta_t = Q(s_t,a_t;w) - y_t$
  4. 损失函数:$L=\frac{1}{2} \delta_t^2$
  5. 更新 $Q(s_t,a_t;w)$ 系数:$w = w - \alpha \delta_t \frac{\partial Q(s,a;w)}{\partial w}$
  6. 更新 $Q(s,a;w^-)$ 系数: 要一段时间才更新一次
    • 方法一: $w^- = w$
    • 方法二: $w^- = \tau w + (1 - \tau) w^-$

[note] double DQN 算法中,对于计算TD目标,利用 $Q (s_{t+1},a;w)$提供预测动作 $a^$,然后利用「目标网络」 $Q (s_{t+1},a^;w^-)$ 进行计算。

Dueling Network

概念

最优动作价值: $Q^*(s,a) =\max\limits_\pi Q_\pi(s,a)$

最优状态价值: $V^*(s) =\max\limits_\pi V_\pi(s)$

优势函数(optimal advantage function): 描述的是最优动作 $a$ 的优势。

$$A^*(s,a) = Q^*(s,a) - V^*(s)$$

定理:

$$V^* (s) = \max\limits_a Q^*(s,a)$$

目标

将优势函数两边最大化:

$$\begin{aligned} \max\limits_a A^*(s,a) &= \max\limits_a Q^*(s,a) - V^*(s) \\ &= V^*(s) - V^*(s) \\ &= 0 \end{aligned}$$

故优势函数可以变形为:

$$Q^*(s,a)= A^*(s,a) + V^*(s) - \max\limits_a A^*(s,a)$$

网络结构

- `Dense1`:近似 $A^*(s,a)$,即 $A(s,a;w^A)$
- `Dense2`:近似 $V^*(s)$,即 $V(s;w^V)$
  1. 将系数合并:$w = [w^A,w^V]$
  2. 目标就为: $$ Q(s,a;w)= A(s,a;w^A) + V(s;w^V) - \max\limits_a A(s,a;w^A) $$
  3. 系数更新方法与 DQN 一样

License

Author: 海拉鲁的三角

Link: http://localhost:1313/artificial_intelligence/posts/reinforcementlearning/import_dqn/

License: MIT

只要学不死,就往死里学