价值学习

还是得把学的东西记下来,呃不然过段时间就忘了

价值学习

DQN

  • 动作价值函数Qπ是按照策略π下,环境s做出a动作后的收益期望。
  • 最优动作函数Q⋆是所有策略中取最优的收益期望。这个东西显然可以给动作打分
  • 折扣回报率γ是为了让策略更早获得更大的回报设置的参数,每次都让回报乘一个γ的t次方

如何学习这个Q⋆呢,我们使用一个深度网络来模拟,记作Q(s,a;w),w就是神经网络中的参数,我们随机初始化w,然后学习w,最后让Q(s,a;w)尽量接近真正的Q⋆(s,a)即可。

DQN输出的是离散的价值空间,也就是每个a上边的Q值。

我们可以使用TD算法来学习w,我们先计算当前情况Q(s,a;w)预测的价值,随后执行动作a,环境到达s1,获得回报r1,这时我们比较Q(s,a;w)和r1+γ*Q(s1,a1;w)即可,a1为s1状态下让预测值最大的行动。

这样就有了Loss,我们可以梯度下降更新w了。即

wwαδQw ← w − α · δ · ∇Q

Loss函数一般是1/2δ21/2δ^2

这玩意是off-policy的,可以乱搞策略,但是一般的是 ϵ-greedy,(1-ϵ)概率用让Q(s,a;w)最大的a,ϵ概率随机挑一个a跑。而且可以应用经验回放,只需要记录以前的(s,a,r,s1)就可以拿这个数据来多次训练网络。

Q-Learning 和 SARSA

一个学Q⋆一个学Qπ

普通的Q学习已经不常用,SARSA通过TD训练Qπ,随后通过某种跟该算法无关的东西更新策略π,SARSA是on-policy的不能利用经验回放,如果状态空间是无限的我们也可以在SARSA上套个神经网络,跟DQN差不多了。

杂项

多步TD

TD时多进行几次动作然后进行TD即可。

蒙特卡洛

一次进行完游戏,计算总回报ut,然后鼓励价值网络接近ut。好处是无偏性,坏处是方差大收敛很慢。

自举

TD算法属于自举,好处是方差小,收敛快,坏处是估算有偏。

价值学习技术

优先经验回放

  • 通常在经验回放数组中有足够的四元组时才开始使用经验回放更新DQN
  • 经验回放的优点是可以打破序列的相关性,因为随机抽到的四元组都是独立的
  • 经验回放可以用更少的样本获得同样的表现

优先经验回放是这种方法的优化,即给某些回放数据更高的权重,令其更容易被抽中。

如何判断权重呢,我们可以想象,如果某个数据下的DQN的预测和真正的Q⋆距离较远,是否可以认为该数据应该更收到关注呢。

常用的分配权重方法有两种:

pjδj+ϵp_j\propto|\delta_j|+\epsilon

pj1rank(j)p_j\propto\frac{1}{rank(j)}

其中ϵ\epsilon是一个很小的数,防止有些东西抽不到,rank(j)是排序后的序号

然而权重不同时,我们也应该设置梯度下降不同的学习率来抵消非均匀抽样造成的误差

αj=α(bpj)β\alpha_j=\frac{\alpha}{(b\cdot p_j)^\beta}

其中β\beta是超参数,b是经验回放样本总数。

Q学习高估问题

目标网络与双Q学习

Q学习会高估真实价值。原因是

  • 自举导致偏差传播
  • 最大化问题导致高估(噪声均值为0,然而取最大值会导致高估)

高估是非均匀的,因此会造成偏差。

我们可以使用目标网络降低自举的危害,即使用一个结构相同但是参数不同的目标网络Q(s,a;w1)来估算TD目标,梯度下降更新原网络,然后用一个加权平均更新目标网络。

要降低最大化偏差,我们可以使用一种Double Q-learning,该方法在目标网络上更进一步。流程如下

设目标网络为ωnow\omega_{now}^-

  • 计算DQN正向传播q^=Q(sj,aj;ωnow)\hat{q}=Q(s_j,a_j;\omega_{now})

  • 找到a令a=argmaxQ(sj+1,a;ωnow)a^*=argmaxQ(s_{j+1},a;\omega_{now})

  • 计算q^j+1=Q(sj,a;ωnow)\hat{q}_{j+1}=Q(s_j,a^*;\omega_{now}^-)

  • 计算TD误差

  • 梯度下降更新DQN网络

  • 加权平均更新目标网络

对决网络

  • 最优状态价值函数是对Q⋆的所有动作和回报取期望V⋆(s)
  • 定义最优优势函数D⋆(s,a)=Q⋆(s,a)-V⋆(s)
  • 又有以下定理D⋆(s,a)=Q⋆(s,a)-V⋆(s)-maxD⋆(s,a1),其中a1为令D⋆(s,a)最大的a

这意味着我们如果能把D⋆和V⋆搞出来就可以获得输出的Q

而且这个东西的训练和DQN完全相同,所用优化方法也能应用在这上面。

噪声网络

这玩意可以应用与几乎所有的深度强化学习方法中,而且能显著提高DQN的表现

基本原理为把ωμ()+σ()ϵ()\omega改为\mu(均值)+\sigma(标准差)\circ\epsilon(随机噪声),噪声符合N(0,1)分布,该符号表示逐项乘积,即ωi=μi+σiϵi\omega_i=\mu_i+\sigma_i*\epsilon_i,这个意思是就是神经网络的参数从一个给定均值和标准差的正态分布中抽取。

训练时加入噪声可以鼓励网络进行更多的探索,而训练完成后决策可以把方差设为0,这时网络就变为了标准的DQN网络。

最终训练时可以把本部分提到的所有技巧全部用上。