论文:Human-level control through deep reinforcement learning
DQN其实就是将深度学习与Q-learning结合起来了,建立了卷积神经网络来估计Q值。
建立了Q network,Q target network( Q̂ )两个网络,对每一个episode,t时刻时,对于状态 st ,利用 ϵ -greedy选择一个action at=argmaxaQ(ϕ(st),a;θ) ,执行 at 之后获得reward和下一状态 ϕt+1 ,将当前状态 ϕt 、动作 at 、奖励 rt 、下一状态 ϕt+1 储存在D中。然后从D中随机选择一个batch的sample (ϕj,aj,rj,ϕj+1) .通过最小化
论文:Deep Reinforcement Learning with Double Q-learning
Double Q-learning的想法就是将选择和评估action的网络分开,这样可以减轻overestimate.Double DQN将Double Q-learning和DQN结合起来。
在double Q-learning中有两个value function,参数分别为 θ 、 θ′ ,每一次更新时,其中一组参数用于决定policy,另外一组参数用于计算value.
将Double Q-learning和DQN结合起来
论文:Prioritized Experience Replay
上面的方法都用到了replay memory来保存之前的experience,一是为了将之前有用的经历保存下来,二是连续的动作的动作不符合独立同分布,而梯度下降是要求数据独立同分布的,从memory中随机采样可以破坏数据之间的联系。但是之前的做法都是从memory中随机抽样,这样导致一些有用的样本被抽到的次数可能很少,而且存储数据的空间有限,当空间存满之后,每一次放入一个experience就要丢弃先前的一个experience.要解决这些问题有两条路,一是选择哪些experience被保存,二是选择哪些reperience被replay.这篇论文主要解决的是后者。
第一种方法是将每一步的TD-error保存下来,每次更新时,从memory中选择有较大TD-error的sample.这种方法有一些限制,首先,为了避免消耗太多资源遍历整个memory,我们只为那些被replay的experience更新TD-error;其次,如果一开始就被赋予一个很低的TD-error,在很长一段时间内可能都不会被replay;
定义抽取i样本的概率为
对于Proportional Variant,可以建立一个二叉堆来减少时间复杂度,传统的二叉堆,越往上,节点的优先级越高,而在这里,叶子节点存储transiton priority,父节点存储所有孩子节点的priorities的和。(然后怎么抽样的看不太懂,看懂之后再来修改。。)
对于Rank-based Variant,根据rank的排列计算累计密度,如果batch_size取k,则将累计密度等分为k份,从每一份中抽取一个样本。
为了矫正偏差,加入一个权重 ωi=(1N.1P(i))β ,用 ωiδi 代替 δi
论文:Dueling Network Architectures for Deep Reinforcement Learning
对比前面的方法,Dueling DQN的创新之处在于将网络结构改成two stream.一条计算state value function V(s;θ;β) ,一条用于计算advantage function A(s,a;θ,α) .
可以有效减少Q值与V值之间尺度差异所产生的噪声(表述有待商榷)