深度强化学习cs294 Lecture8: Deep RL with Q-Function

上节课讲到value-based 的函数,其中Q-learning是比较常用的一个算法。可以有两种形式,一种是非在线形式,另一个是在线形式。
在这里插入图片描述

1. How we can make Q-learning work with deep networks

但是使用上述Q-learning算法的过程中有些问题,特别是在线形式的。第一个就是在线形式的算法里经过的状态是有很强的关联的,因为是同一个轨迹中得到的。第二点就是在对拟合函数的系数进行更新的时候其实并不是真正的进行了梯度下降:
在这里插入图片描述
首先解决第一个问题。解决这个问题的思路可以借鉴actor-critic中采样的方法。使用并行的采样,同时回传样本,这样能够一定程度上减少样本间的相关性。也可以使用异步的方式,效果会更好一点。
在这里插入图片描述
还有一种解决样本相关性的方式是,将采集样本的过程独立出来,而且存为一个缓存,之后随机地从缓存中抽取样本点用来更新。因为q-learning算法是支持off-policy的,因此这样做没有问题。
在这里插入图片描述
使用了样本缓存之后的算法就不再是online的形式了。不过因为策略在更新,因此缓存中的样本实际上也应该有着周期性的更新。一直不变的样本无法学到更好的策略。
在这里插入图片描述
这样做不仅解决了样本相关性的问题,而且更新的时候可以利用mini-batch的方式,减小更新的方差。

把采样结果的更新也加入其中,整个算法流程如下:
在这里插入图片描述
采样更新的时候采用的策略可以是在最新的策略基础上进行调整的策略比如 ϵ \epsilon -greedy方法。

但是解决了样本相关性的问题,还有一个问题需要解决。但是这个问题无法完全解决,只能稍微改善。
在这里插入图片描述
这个问题就是,在进行参数更新的时候实际上进行的并不是梯度下降,因此最终可能无法得到收敛的结果。想要改善这个问题首先要看一下参数更新的目的。实际上更新参数是为了得到一个对于Q函数的回归结果:
在这里插入图片描述
之前使用的算法里,回归的目标是一个用 Q Q 表示的值,因此这个值是一直变化的,也就是回归的目标函数是个变化的函数。想要改善这个问题,那就需要减少这个目标函数的变化。也就是让目标是 y i y_{i} 变成一个相对固定的值。有一个方法可以一定程度完成这个目标,那就是在计算 y i y_{i} 的过程中保持后面的 Q θ Q_{\theta '} 不变,也就是参数 θ \theta 的更新不立即应用到值函数中:
在这里插入图片描述
使用了这个技巧之后,在每一次更新参数的内部循环中,参数回归的目标函数就相对是一个固定的函数,也就可以提高拟合的效果。

2. A generalized view of Q-learning algorithms

同时应用这两种技巧,样本缓存(replay buffer)和固定目标(target network),可以得到如下算法:
在这里插入图片描述
下方是一个经典的深度Q-learning算法,也叫作DQN。相当于上方算法中的K取1时候的效果。

但是实际上这样的参数更新方式有一些奇怪,那就是每一步的样本距离当前固定的目标函数的“距离”是在逐渐增加的,让人感觉有些奇怪。想要改变这一点,可以选择将 Φ \Phi 缓慢的均匀增加:
在这里插入图片描述
我们可以对比一下经过改进后的算法与不同的Q-learning之间的区别:
在这里插入图片描述
可以把Q-learning算法用更泛化的角度来看,分为3个部分,分别是1.数据收集,2. 参数更新, 3. 函数拟合。
在这里插入图片描述
其中还有抛弃旧数据的问题。这个部分可以使用LRU之类的优先级算法。
在这里插入图片描述
把Q-learning相关的算法都看成是这三个部分组成,三个部分不同的更新速率就会带来不同的算法。

3. Tricks for improving Q-learning in practice

在实际的应用中,实现了Q-learning算法之后需要及时地画出对应的reward曲线或是平均reward曲线。一般来说平均reward曲线会随时间增加,这样能够说明算法实现得比较合理。还可以选取一些代表性的实际场景(breakout)与V值函数进行对比,观察其表示的值与实际情况是否匹配等等。对于某些离散动作的情况,还可以观察其动作的概率分布是否合理:
在这里插入图片描述
实际上我们发现,使用Q-learning之后得到的结果与真实值之间有很大的差距,一般而言会高出很多:
在这里插入图片描述
造成这个现象的原因是计算目标值的时候用的Q函数与选取最优动作时候的Q函数是同一个。因为其中max的存在,会导致只会选到越来越高的结果,与真实结果有一定的偏离,可以用两个随机变量的最大值期望与期望的最大值来理解:
在这里插入图片描述
这样得到的结果一定会高于真实值。解决这个问题的方法是,将选取动作时候的Q函数与计算结果的Q函数使用两个不同的参数,就能够消除这种误差累积:
在这里插入图片描述
也就是说,我们需要有两组Q的参数,一组用来计算,一组用来选择动作。在实际的应用中,我们只需要使用更新之前的系数计算最优动作即可,不用再刻意保留另外的参数。也就是神经网络拟合的目标函数 Q Φ Q_{\Phi}
在这里插入图片描述
实际应用中我们可能经常会遇到Q函数拟合不好的情况,那么在计算过程中每一步的奖励是唯一有用的信息。这个信息有时候显得不够用,因此可以利用多步反馈来增强这一部分的信息,就像是actor-critic算法中使用的一样:
在这里插入图片描述
使用了多步反馈的结果之后能够带来更小的偏差,一般也会学习得更快。但是会遇到off-policy情况下不太适用的问题。因为多步反馈需要的是在同一个策略下的多步转移,假如完全利用off-policy的数据,得到的多步反馈可能是在不同策略下的结果,这样可能没有意义。不过我们也有三种解决的方式:
在这里插入图片描述

4. Continuous Q-learning methods

在Q-learning应用到连续动作空间时也有一个很大的问题,那就是max的操作对于连续动作无法执行。想要进行这个max操作,可以有几种选择:
在这里插入图片描述
第一种做法是再进行一次最优化求解。但是如果每次max都要求解一次,那么算法会变得非常的慢。
在这里插入图片描述
不过可以从动作空间中采样,然后选出样本中最优的结果作为最优动作。这样做很方便简单,也适合并行计算。但是不是非常准确。也可以使用更精确的方式比如交叉熵方法等等。
在这里插入图片描述
第二种做法是直接把Q函数实现为一个容易求导的结果,能够直接得到最优动作。但是这样会失去神经网络拟合函数的表示能力。
在这里插入图片描述
最后一种做法是再用一个神经网络,作为当前状态最优动作的拟合函数。这样也能够得到最终的结果。
在这里插入图片描述
总结下来实际应用中Q-learning有几个注意的要点:
在这里插入图片描述
还有一些训练强化学习算法的高阶技巧:
在这里插入图片描述
总结一下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_25037903/article/details/84852528
今日推荐