经验回放(Experience Replay)

复习DQN:

经验回放(Experience Replay)_第1张图片

 动作价值函数,依赖于当前动作a和状态s。基于当前的动作s给所有的动作打分,反映动作的好坏。DQN就是用神经网络来近似,神经网络的参数记作w。输入是动作s,DQN的神经网络中卷积层全连接层中的参数为w,输出是对动作的打分。

复习TD算法:

经验回放(Experience Replay)_第2张图片

观测当前的状态,并执行动作

环境会给出新的状态和回报

计算出此时的TD target,TD target一部分基于真实观测到的奖励,部分基于DQN网络在t+1时刻做出的预测。

把DQN在t时刻做出的预测记作,然后算出TD error,DQN网络得出的完全是基于预测的,没有现实依据,而则是一部分基于真实观测,一部分基于预测。

所以我们认为更靠谱,所以要做到两者相接近,也就是TD error尽量小。

所以TD算法的目标就是:

之前的方法是在线梯度下降:

经验回放(Experience Replay)_第3张图片

然后这个四元组作为一组数据,用完之后就可以丢掉了。

经验回放:

分析之前的TD算法的缺点:

1.浪费经验:

经验回放(Experience Replay)_第4张图片

所有的四元组在用完之后就丢掉了,造成经验的浪费。

2.相关性更新:

经验回放(Experience Replay)_第5张图片

t时刻的四元组为,在更新w的时候,有很强的相关性,但是这种相关性是有害的,我们希望打散这种相关性,从而使得训练效果更好。

 经验回放策略:

经验回放(Experience Replay)_第6张图片

经验回放(Experience Replay)_第7张图片

对于四元组数据,我们把它放在一个队列里面,队列的大小为n,即可存放n条四元组数据。该队列称为replay buffer。如果队列存满了,那么就从中删除最老的一条四元组,n的大小作为一组超参数,有很多实验表明,n的大小对实验结果有影响。n通常都设置的很大,但具体的大小要看具体的应用。

TD算法在经验回放中的用法:

经验回放(Experience Replay)_第8张图片

每次从队列中随机抽取一个四元组,然后逐步计算梯度,这里简化了,只抽取一条四元组,但是可以随机抽取多个四元组,然后算出的梯度求平均。

做经验回放有两个好处,打破四元组之间的相关性,又可以重复利用过去的经验。

 经验回放的改进(优先经验回放):

特点是用非均匀抽样代替均匀抽样。

经验回放(Experience Replay)_第9张图片

并不是所有的transitions是同等重要的,比如打游戏,左边的普通关的经验很多,但是右边的boss关的经验很少,所以右边的经验很重要,不然会一直卡在这一关。

但是怎么知道哪条transition比较重要呢?可以通过观察TD error的值,值越大,说明这条transition越重要。所以可以给右边的场景更高的权重,使得DQN能够更好地适应右边的场景。

有如下两种抽样方法:

经验回放(Experience Replay)_第10张图片

1.是让正比于,加上是为了防止绝对值里面的值为0。

2.是让做排序,让大的靠前,小的靠后,然后给其编号为,让反比于越大,则其序号就越小,反比之后就越大,抽到的概率就越大。

调整学习率:

经验回放(Experience Replay)_第11张图片

之前是做梯度下降来计算w,学习率对所有的transition都是一样的,但是当使用经验回放后的transition权重是不一样的,所以要根据权重大小调整学习率。如果一条transition有较大的抽样概率,那么它的学习率就应该设置的比较小。

优先经验回放的特点:

 经验回放(Experience Replay)_第12张图片

把每条四元组都用TD error进行标记,如果有一条新的四元组,我们不知道它的TD error,那么默认就给它最高的权重,每次从队列中搜集一次四元组,就需要及时的更新它的TD error。

你可能感兴趣的:(深度学习,深度学习)