各种DQN

来源:互联网 发布:淘宝客贷入口 编辑:程序博客网 时间:2024/05/16 07:19

Q-learning

   

DQN

论文: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).通过最小化

(rj+γmaxaQ̂ (ϕj+1,a;θ)Q(ϕj,aj;θ))2
更新θ,重复这个过程直到episode结束,在循环的过程中,每隔C步就将Q网络的参数复制到Q̂ 网络。
  论文中说将Q估计跟Q target分开是因为更stable,但是具体证明并没有给。

Double DQN

论文:Deep Reinforcement Learning with Double Q-learning
Double Q-learning的想法就是将选择和评估action的网络分开,这样可以减轻overestimate.Double DQN将Double Q-learning和DQN结合起来。

Double Q-learning

在double Q-learning中有两个value function,参数分别为θθ,每一次更新时,其中一组参数用于决定policy,另外一组参数用于计算value.

YDoubleQt=Rt+1+γQ(St+1,argmaxaQ(St+1,a;θt);θt)

在选择policy时,利用的是最近更新的θt,计算value时则用θt.

Double DQN

  将Double Q-learning和DQN结合起来

YDoubleDQNt=Rt+1+γQ(St+1,argmaxaQ(St+1,a;θt);θt)
其中,θt是实时更新的,θt每隔C step就copy θt.

Prioritized Experience Replay

论文:Prioritized Experience Replay
  上面的方法都用到了replay memory来保存之前的experience,一是为了将之前有用的经历保存下来,二是连续的动作的动作不符合独立同分布,而梯度下降是要求数据独立同分布的,从memory中随机采样可以破坏数据之间的联系。但是之前的做法都是从memory中随机抽样,这样导致一些有用的样本被抽到的次数可能很少,而且存储数据的空间有限,当空间存满之后,每一次放入一个experience就要丢弃先前的一个experience.要解决这些问题有两条路,一是选择哪些experience被保存,二是选择哪些reperience被replay.这篇论文主要解决的是后者。

Prioritizing with TD-error

  第一种方法是将每一步的TD-error保存下来,每次更新时,从memory中选择有较大TD-error的sample.这种方法有一些限制,首先,为了避免消耗太多资源遍历整个memory,我们只为那些被replay的experience更新TD-error;其次,如果一开始就被赋予一个很低的TD-error,在很长一段时间内可能都不会被replay;

Stochastic Prioritization

  定义抽取i样本的概率为

P(i)=pαiΣkpαk
其中,pi>0决定i的优先程度,α决定了优先次序被利用的程度。

First Variant – Proportional Variant

pi=|δi|+ϵ
ϵ是一个很小的数,用来保证所有样本的priority都不为0.

Second Variant – Rank-based Variant

pi=1rank(i)
rank(i)是指根据|δi|排序后,i的排名。

Implementation

  对于Proportional Variant,可以建立一个二叉堆来减少时间复杂度,传统的二叉堆,越往上,节点的优先级越高,而在这里,叶子节点存储transiton priority,父节点存储所有孩子节点的priorities的和。(然后怎么抽样的看不太懂,看懂之后再来修改。。)
  对于Rank-based Variant,根据rank的排列计算累计密度,如果batch_size取k,则将累计密度等分为k份,从每一份中抽取一个样本。

Annealing the Bias

  为了矫正偏差,加入一个权重ωi=(1N.1P(i))β,用ωiδi代替δi
Double DQN with proportional prioritization

Dueling DQN

论文:Dueling Network Architectures for Deep Reinforcement Learning
  对比前面的方法,Dueling DQN的创新之处在于将网络结构改成two stream.一条计算state value functionV(s;θ;β),一条用于计算advantage function A(s,a;θ,α).

Q(s,a;θ,α,β)=V(s;θ,β)+A(s,a;θ,α)
通过这个公式可以得到Q值,但是反过来没法得到A和V,所以考虑为V加上一个常数,为A减去同样的常数,最终结果相同。于是可以考虑减去的常数使得advantage等于0
Q(s,a;θ,α,β)=V(s;θ,β)+(A(s,a;θ,α)maxa|A|A(s,a;θ,α))
a=argmaxa|A|Q(s,a;θ,α,β)=argmaxa|A|A(s,a;θ,α)
于是Q(s,a;θ,α,β)=V(s;θ,β) ,同样也可以用下面的公式
Q(s,a;θ,α,β)=V(s;θ,β)+(A(s,a;θ,α)1|A|ΣaA(s,a;θ,α))

  

Advantage

  • Q和V的计算同步更新,state-value function的学习更有效率
  • 对于同一个状态的不同动作计算Advantage function,state-value stream都要计算一次,意味着value stream的更新频率更高了
  • 可以有效减少Q值与V值之间尺度差异所产生的噪声(表述有待商榷)