强化学习之深度Q函数

来源:互联网 发布:java逆波兰式 编辑:程序博客网 时间:2024/06/05 00:09

背景:强化学习玩游戏

模拟器(model 或 emulator)以动作(action)为输入,输出一张图像和奖励。

单张图像无法完全理解agent的当前状态,所以得结合动作与状态序列的信息。

agent的目标是,以一定的方式选择动作,与模拟器进行相交,来最大化将来的奖励。

Bellman equation:

Q(s,a)=Esϵ[r+γmaxQ(s,a)|s,a]

强化学习的一般方法是利用Bellman equation作为迭代更新:
Qi+1(s,a)=Esϵ[r+γmaxaQ(s,a)|s,a]

DQN

这里写图片描述

将深度学习应用到强化有几个挑战。

  1. 大多深度学习的应用都需要大量的标注数据,而强化学习需要从reward信号学习,且reward信号经常比较稀疏(sparse)、有噪声(noisy)、有延迟(delayed)。从执行动作(action)到产生reward的延迟,可能有上千步长。
  2. 数据样本的独立性。深度学习假设数据样本是独立的,而在强化学习中状态(state)之间是高度相关的。
  3. 数据分布的不变性。深度学习假设数据分布是不变的,而强化学习可以学习新的行为(policy),进而改变数据的分布。

针对第二和第三点的应对策略:

​ 经验回放机制(experience replay mechanism):通过多次随机取样之前的状态转移,来平滑训练分布的变化。

Q函数用网络表示时的损失函数

Li(θi)=Es,aρ()[(yiQ(s,a;θi))2]

其中目标值
yi=Esϵ[r+γmaxaQ(s,a;θi1)|s,a]

值得注意的是,在深度学习中目标值在训练开始时是固定不变的,而有强化学习中却与网络的参数有关。

损失函数的导数为:

θiLi(θi)=Es,aρ();sϵ[(r+γmaxaQ(s,a;θi1)Q(s,a;θi))θiQ(s,a;θi))]

该算法有两点值得注意:

  1. model-free。只用到模拟器产生的样本,并不需要去估计模拟器。
  2. off-policy。要学习的是greedy strategy,follow的是ϵ-greedy strategy。

该算法比standard online Q-learning 的优势在以下几个方面。

  1. 每一次经验都可能被多次用到,来更新权重,数据利用效率更高。
  2. 由于连续样本之间的高度相关性,直接从连续的样本学习是不足的。随机抽取这些样本打破了这种相关性,因此能减小更新权重的方差。
  3. 学习on-policy的时候,当前的参数会决定下一个数据样本,且是在这个数据样本上训练的。

关于网络的结构:

  1. 输入为历史经验和动作,输出为该动作的value值。缺点是每计算一个动作的value都得运行一次网络。
  2. 输入为历史经验,输出为每个动作对应的value值。优点是只要运行一次网络,就知道所有动作的value值。

Double DQN

DQN 存在高估Q(s,a)的问题,因为它有max操作,倾向于高估的值。高估问题一直被认为是由不够强大的函数近似、噪声造成的。文中还发现不准确的Q(s,a)也会造成高估问题,而Q(s,a)不准确是很常见的,所以高估问题应该比之前认为的更常见。

DQN有强大的函数近似、确定的环境也降低了噪声的影响,但有时还是存在高估的问题。

背景

DQN里的最大化操作用同样的网络参数θ,来选择和评价一个动作,这就使它更容易选择高估的动作。Double DQN的idea是将选择和评价过程解耦合,来防止这种高估问题;换句话说,通过将target里的max操作分解为动作选择和动作评价。

Q-learning的target为:

YQt=Rt+1+γmaxaQ(St+1,a;θt)

将它改写为:
YQt=Rt+1+γQ(St+1,argmaxaQ(St+1,a;θt);θt)

而Double-DQN的target就是:
YQt=Rt+1+γQ(St+1,argmaxaQ(St+1,a;θt);θt)

其中,θt是随训练变化而变化的,而θt是按周期从θ复制过来的。

注意到argmax里的动作选择使用的是θt参数,这意味着,就像Q-learning一样,我们仍然根据当前的参数(θt)来估计greedy policy的value以选择动作。然而,我们用第二组参数θt还公平地评价这个policy的value。

作者说:“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和均匀采样。确保了被采样的概率随着优先级是单调的,以及优先级最低的样本也有可能被采样到。

具体来说,采样经验i的概率为:

P(i)=pαikpαk

其中pi>0是经验i的优先度。指数α决定在多大程度上利用优先度,当α=0时就对应着均匀采样。

第一种pi=|δi|+ϵ,其中ϵ是一个小正常数,确保当误差为零时,该样本也有概率被采样到。

第二种,pi=1rank(i)rank(i)也是根据|δi|进行排序的。

偏差退火

随机更新期望估计依赖于那些更新要对应于同样的分布作为期望。PER引入偏差的原因是它以一种不可控的方式改变了这个分布,因此改变了估计会收敛到的结果(即使Policy和状态分布保持不变)。作者利用重要性采样(IS)权重来纠正这一偏差:

wi=(1N1P(i))β

如果β=1就可以完全补偿非一致性概率。这些权重可用在Q-learning的更新上,只要把δi替换为wiδi。为了稳定的原因,作者规范化权重,乘以1/maxiwi,这样就只能减小更新。

在一般强化学习情景中,更新的非偏性对在训练末期的收敛是最重要的,且这个过程是高度非静态的,由于不断变化的policy、状态分布、bootstrap target; 我们推断一个小的偏差在这种情况下是可以忽略的。作者通过设置β慢慢从其初始值β01,缓慢减少IS纠正的量。

Dueling DQN

这里写图片描述
Dueling网络由两个流组成,一个是状态value估计,一个是状态独立的动作优势函数,同时共享底层的卷积特征学习模块。这样分解的一个主要好处在于可以泛化动作之间的学习,而不会改变强化学习算法。

Dueling网络也应该理解为单个Q网络,只是用两个流实现的,而不是一个流。

直观上来说,Dueling网络可以学到哪些状态有(或没有)价值,而不必学习每个状态下的每个动作的影响。这尤其有用,尤其对一些状态,它的动作不会影响到环境。

实验表明:随着多余或者相似的动作加进到学习问题,Dueling网络能够在评价policy时,快速明确正确的动作。

优势函数(advantage function):

Aπ(s,a)=Qπ(s,a)Vπ(s).

注意Eaπ(s)[Aπ(s,a)]=0。 直观上来说,价值函数V度量处在某个状态下s有多好。Q函数度量的是在该状态下选择特定动作的好坏。所以优势函数是对每个动作重要性的相对度量。

这里写图片描述

如Figure 1所示,有一个全连接层流输出标量V(s;θ,β),另一个流输出|A|维向量A(s,a;θ,α)。其中θ表示卷积层的参数,αβ是两个全连接层流的参数。

根据优势函数的定义,我们可能倾向于构建融合模块为:

Q(s,a;θ,β)=V(s;θ,β)+A(s,a;θ,α)

注意到这个表达式应用于所有(s,a),也就是说我们要复制V(s;θ,β) |A|次。

然而Q(s,a;θ,β)只是真实Q函数的一个参数估计而已,V(s;θ,β)A(s,a;θ,α)不一定是一个好的估计。

而且上式是无法识别,因为给定Q,我们不能恢复VA。比如给A加一个常数,同时给V减一个常数,并不改变Q的值。直接使用这个缺乏识别性的式子,会导致不好的实验结果。

为了解决可识别性问题,作者强迫优势函数估计在选择的动作下有零优势(没有优势)。也就是说,在最后一个模块(绿线):

Q(s,a;θ,α,β)=V(s;θ,β)+(A(s,a;θ,α)maxa|A|A(s,a;θ,α)).

这样,对a=argmaxaAQ(s,a;θ,α,β)=argmaxaAA(s,a;θ,α), 可以得到Q(s,a;θ,α,β)=V(s;θ,β)。 因此,V(s;θ,β)提供了价值函数的估计,而另一个则提供了优势函数的估计。

一个替代的模块是将取最大换成取平均:

Q(s,a;θ,α,β)=V(s;θ,β)+(A(s,a;θ,α)1|A|aA(s,a;θ,α)).

一方面,这失去了原始VA的语义,因为它们现在偏离目标一个常数值;但另一方面,这有助于优化的稳定性:对于上式,优势只需要改变得有均值快就好了,而对于上上式,要补偿最优动作优势的任何变化。

trick:

  1. 梯度尺度缩放。进入最后一个模块前(绿线),调节联合梯度为原来的1/2
  2. 梯度剪切。将所有梯度剪切到不超过10.
  3. α=0.7β从0.5变到1.
原创粉丝点击