各种DQN

Q-learning

   各种DQN_第1张图片

DQN

论文:Human-level control through deep reinforcement learning
DQN其实就是将深度学习与Q-learning结合起来了,建立了卷积神经网络来估计Q值。
    各种DQN_第2张图片
  建立了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
各种DQN_第3张图片

Dueling DQN

论文:Dueling Network Architectures for Deep Reinforcement Learning
  对比前面的方法,Dueling DQN的创新之处在于将网络结构改成two stream.一条计算state value function V(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;θ,α))

   各种DQN_第4张图片

Advantage

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

你可能感兴趣的:(强化学习)