Experience Replay 经验回放。价值学习高级技巧第一篇。之前讲解的 价值学习的方法 都很简单,所以实现效果并不优秀。接下来会介绍一些高级的技巧,可以大幅度提高 DQN 的表现。Experience Replay 是最重要的技巧。 Experience Replay 经验回放。价值学习高级技巧第一篇。
之前讲解的 价值学习的方法 都很简单,所以实现效果并不优秀。接下来会介绍一些高级的技巧,可以大幅度提高 DQN 的表现。Experience Replay 是最重要的技巧。
DQN 是用神经网络 \(Q(s,a;w)\) 来近似 Q-star 函数。通常用 TD 算法训练 DQN。TD算法思路如下:
agent 观察当前状态 \(s_t\) 并执行动作 \(a_t\);
环境给出新的状态 \(s_{t+1}\) ,返回奖励 \(r_t\);
TD target: \(y_t = r_t + \gamma \cdot {\mathop{max}\limits_{a}Q^*(s_{t+1},a;w)}\);
TD error:\(\delta_t = q_t - y_t; \ \ 其中q_t=Q(s_t,a_t;w)\)
\(q_t\) 完全是猜测的,\(y_t\) 有一部分真实值。
我们的目标是让 \(q_t\) 接近 \(y_t\),所以最小化 \(\delta^2\),即:
\(\delta_t\)的均值记为:\(L(w)=\frac{1}{T}\sum_{t=1}^{T}\frac{\delta^2_t}{2}\),通过调整 w ,使得 L(w) 尽量小。
之前是使用在线梯度下降来更新 w:
这里的经验(包括经验回放)是指 从开始到结束所有的 transitions,刚才回顾的TD算法在使用了一次 transition 后就将它丢弃,这就造成了经验的浪费。
另外一个不足的原因是,前后两个 transition 之间存在很强的关联。实践证明这种相关性是 有害的。如果能够把 这些 transition 打散,更有利于训练 DQN。
经验回放就可以很好克服以上两个缺点。
一个 transition 相当于一条训练数据,为了重复使用之前的 transition,可以把 最近的 transition 存入一个队列(Replay Buffer),容量为 n,n 是一个超参数。
经验回放 的使用方法:
我们的目标是 将\(L(w)=\frac{1}{T}\sum_{t=1}^{T}\frac{\delta^2_t}{2}\)最小化
使用随机梯度下降改进 L(w);
每次从 Replay Buffer中随机均匀抽样一个 transition \((s_i,a_i,r_i,s_{i+1})\)
注意这里可以随机抽取多个 transition
计算 TD error \(\delta_i\)。
计算随机梯度:\(g_i = \frac{\partial \ \delta^2_i/2}{\partial w}=\delta_i \cdot \frac{\partial \ Q(s_i,a_i;w)}{\partial \ w}\)
随机梯度下降:\(w \leftarrow w-\alpha\cdot g_i\)
经验回放的好处就是;
经验回放以改进效果明显而被广泛使用,也有了很多对经验回放的改进。下面介绍一种:优先经验回放 / Prioritized Experience Reply。
改进之处在于使用非均匀抽样来选择 transitions。
优先经验回放的想法如下:
队列里存了很多 transitions,但是它们的重要性并不一样;
我们可以通过 TD error 来判断 transitions 的重要性,绝对值越大,就说明越重要。
原因是,这里的优先级是指,我们要优先训练 难以训练的、训练样本少的、训练效果不好的这些场景,给与这些 transition 更大的重视(权重)
(就好像要多看看自己的错题,而不是自己很容易做对的题)
而 TD error 大的 transition,实际意义是与实际值偏离大,说明对于场景不熟悉。
抽样方法介绍两种:
使抽样概率与 TD-error 线性相关:\(p_t\propto|\gamma_t|+\epsilon\)
\(\epsilon\) 是一个很小的数,避免 \(p_t\) 为 0 ;
对\(|\delta_t|\) 作排序,rank(t)是其序号,大的靠前,小的靠后:\(p_t\propto \frac{1}{rank(t)}\),这样就让排在前面的更容易被抽到。
调整学习率矫正偏差:
因为不同的 transition 被人为附上了不同的概率,成为了非均匀抽样,这样会造成 DQN预测有偏差,通过调整学习率来矫正:
当所有 transition 的概率都一样,那么所有的 transition 的学习率一样。如果非均匀抽样,需要根据不同的 transition 概率来调整学习率。
下面再考虑一个事情:
即,在优先经验回放中,我们需要把 TD-error 跟 transtions 放在一起,而刚放入队列的 transition 还没有进行训练 DQN,不知道 TD-error,这时直接把它的 \(\delta\) 设为最大值,给他最高的权重;
每次我们使用了 transition 之后,重新计算 它的 \(\delta_t\),更新 transition 的权重。
