强化学习之深度Q函数
背景:强化学习玩游戏
模拟器(model 或 emulator)以动作(action)为输入,输出一张图像和奖励。
单张图像无法完全理解agent的当前状态,所以得结合动作与状态序列的信息。
agent的目标是,以一定的方式选择动作,与模拟器进行相交,来最大化将来的奖励。
Bellman equation:
强化学习的一般方法是利用Bellman equation作为迭代更新:
DQN
将深度学习应用到强化有几个挑战。
- 大多深度学习的应用都需要大量的标注数据,而强化学习需要从reward信号学习,且reward信号经常比较稀疏(sparse)、有噪声(noisy)、有延迟(delayed)。从执行动作(action)到产生reward的延迟,可能有上千步长。
- 数据样本的独立性。深度学习假设数据样本是独立的,而在强化学习中状态(state)之间是高度相关的。
- 数据分布的不变性。深度学习假设数据分布是不变的,而强化学习可以学习新的行为(policy),进而改变数据的分布。
针对第二和第三点的应对策略:
经验回放机制(experience replay mechanism):通过多次随机取样之前的状态转移,来平滑训练分布的变化。
Q函数用网络表示时的损失函数
其中目标值
值得注意的是,在深度学习中目标值在训练开始时是固定不变的,而有强化学习中却与网络的参数有关。
损失函数的导数为:
该算法有两点值得注意:
- model-free。只用到模拟器产生的样本,并不需要去估计模拟器。
- off-policy。要学习的是greedy strategy,follow的是
ϵ -greedy strategy。
该算法比standard online Q-learning 的优势在以下几个方面。
- 每一次经验都可能被多次用到,来更新权重,数据利用效率更高。
- 由于连续样本之间的高度相关性,直接从连续的样本学习是不足的。随机抽取这些样本打破了这种相关性,因此能减小更新权重的方差。
- 学习on-policy的时候,当前的参数会决定下一个数据样本,且是在这个数据样本上训练的。
关于网络的结构:
- 输入为历史经验和动作,输出为该动作的value值。缺点是每计算一个动作的value都得运行一次网络。
- 输入为历史经验,输出为每个动作对应的value值。优点是只要运行一次网络,就知道所有动作的value值。
Double DQN
DQN 存在高估Q(s,a)的问题,因为它有max操作,倾向于高估的值。高估问题一直被认为是由不够强大的函数近似、噪声造成的。文中还发现不准确的Q(s,a)也会造成高估问题,而Q(s,a)不准确是很常见的,所以高估问题应该比之前认为的更常见。
DQN有强大的函数近似、确定的环境也降低了噪声的影响,但有时还是存在高估的问题。
背景
DQN里的最大化操作用同样的网络参数
Q-learning的target为:
将它改写为:
而Double-DQN的target就是:
其中,
注意到argmax里的动作选择使用的是
作者说:“evaluate the greedy policy according to the online network, but using the target network to estimate its value ” 我有点糊涂,evaluate 和estimate its value不是同样的意思 吗?
Prioritized Experience Replay(PER)
背景:Experience replay只是简单地平均采样,没有考虑到不同样本的重要性。idea是从某些样本(比其它样本)可以更加高效地学习。换句话说,更频繁地replay那些能带来高期望学习进步的样本,文中以temporal-difference(TD)误差来度量。不过这种优先级方法会导致样本多样性的降低(文中以加入随机性来解决),还会引入偏差(bias,文中用重要性采样importance sampling解决)。
greedy TD-error prioritization有一些问题。第一,为了避免扫描整个replay memory,只有那些replay了的经验的TD-error被更新了。结果是一开始TD-error小的经验,很久都得不到replay。第二,对噪声尖峰敏感(比如当reward是随机的时候),且会随着bootstrapping恶化(估计误差也视为一种噪声)。第三,聚焦一小部分经验。误差衰减慢(尤其是使用函数近似的时候),这意味着初始那些高TD误差的经验经常replay。这种多样性的缺少使系统容易过拟合。
为解决这些问题,作者引入了随机采样方法,平衡了纯greedy prioritization和均匀采样。确保了被采样的概率随着优先级是单调的,以及优先级最低的样本也有可能被采样到。
具体来说,采样经验
其中
第一种
第二种,
偏差退火
随机更新期望估计依赖于那些更新要对应于同样的分布作为期望。PER引入偏差的原因是它以一种不可控的方式改变了这个分布,因此改变了估计会收敛到的结果(即使Policy和状态分布保持不变)。作者利用重要性采样(IS)权重来纠正这一偏差:
如果
在一般强化学习情景中,更新的非偏性对在训练末期的收敛是最重要的,且这个过程是高度非静态的,由于不断变化的policy、状态分布、bootstrap target; 我们推断一个小的偏差在这种情况下是可以忽略的。作者通过设置
Dueling DQN
Dueling网络由两个流组成,一个是状态value估计,一个是状态独立的动作优势函数,同时共享底层的卷积特征学习模块。这样分解的一个主要好处在于可以泛化动作之间的学习,而不会改变强化学习算法。
Dueling网络也应该理解为单个Q网络,只是用两个流实现的,而不是一个流。
直观上来说,Dueling网络可以学到哪些状态有(或没有)价值,而不必学习每个状态下的每个动作的影响。这尤其有用,尤其对一些状态,它的动作不会影响到环境。
实验表明:随着多余或者相似的动作加进到学习问题,Dueling网络能够在评价policy时,快速明确正确的动作。
优势函数(advantage function):
注意
如Figure 1所示,有一个全连接层流输出标量
根据优势函数的定义,我们可能倾向于构建融合模块为:
注意到这个表达式应用于所有
然而
而且上式是无法识别,因为给定Q,我们不能恢复
为了解决可识别性问题,作者强迫优势函数估计在选择的动作下有零优势(没有优势)。也就是说,在最后一个模块(绿线):
这样,对
一个替代的模块是将取最大换成取平均:
一方面,这失去了原始
trick:
- 梯度尺度缩放。进入最后一个模块前(绿线),调节联合梯度为原来的
1/2√ 。 - 梯度剪切。将所有梯度剪切到不超过10.
-
α=0.7 ,β 从0.5变到1.