深度强化学习中的DQN系列算法

DQN是考虑到维度灾难,在q-learning算法的价值函数近似Value Function Approximation基础上修改的。

主要是对Q(s,a,w)进行修改,s可能是非常大的,比如输入一个图像,a可能是很小的,比如玩游戏时候几个操作键。

这种情况下引入神经网络,可以把Q(s,a,w)变成a = Q(s,w),输出的是a大小的向量,每个元素表示每个动作a下的Q(s,a)值。

下面要训练这个神经网络,它的target值就是Rt+1 + Q(s_,a_,w)。

回想神经网络训练的时候,是样本是独立,可以打乱顺序,可以批量学习。但是DQN这里的target是按顺序出现的,每走一步出现一个,而且他们之间是有关联的(这里有关联会造成怎样的影响还没理解),为了打消这种关联,使得更像普通的神经网络训练过程,需要把多个样本先储存起来,从中抽样进行训练。

DQN的几个改进版本:

nature DQN(因为2013年发表在nature上得名):

增加了target Q网络。本来target 值也是用 Q(s,w)计算的,现在独立出来了,用 Q(s,w_)计算,这样增加了独立性。但是w_从何而来呢,其本身就是target了,并没有什么loss函数来优化它,答案是copy w值,但是推迟n步,就是每次学习的时候使用n步之前w作为w_。

Double DQN:
以nature DQN为基础
修正了每次都使用max a 造成的误差(Q(S,a,W)是对真是Q的近似,存在误差,每次选择了最大的Q值,也就选择了最大的误差)。

方法是:
每次计算target Q的时候需要选择 max a ,nature DQN 是根据Q(s,w_)来计算是, Double DQN是根据Q(s,w)来计算的。

Prioritised Replay:
以nature DQN为基础
从储存的样本中进行抽样的时候不是随机抽样,而是有先后顺序的。target Q 和 要更新的Q差值越大,说明梯度越大,就先更新

Dueling Network:
将Q网络分成两个通道,一个输出V,一个输出A,最后再合起来得到Q。
Q(s,a) = V(s,v) + A(s,a,w)

你可能感兴趣的:(机器学习,增强学习,算法,深度强化学习)