存储动作的目的是什么一个a在经验元组内?

人工智能 强化学习 经验回放
2021-11-03 02:47:44

据我了解,体验重放是通过存储(s,a,r,s) 进行抽样训练。我明白我们为什么要存储s,rs. 但是,我不明白存储动作的必要性a.

我记得,奖励r和下一个状态s都用于计算目标值。然后,我们可以将这些目标值与我们使用状态进行前向传递时得到的输出进行比较s在我看来,存储的动作a此过程不需要工作;还是我错过了什么?为什么我们要存储动作a如果它不用于培训过程本身?

如果这个问题之前已经回答过,请原谅我。我看了看,但除了关于什么是经验回放以及我们为什么这样做的一般解释之外,找不到任何其他东西。

2个回答

我们需要存储动作a因为它告诉我们在我们正在备份的状态下采取的行动。

假设我们处于状态s我们采取行动a,那么我们将获得奖励r和下一个状态s. RL 的目标,尤其是 DQN(我提到 DQN,因为它是我想到重放缓冲区时想到的第一个算法,但它当然不是唯一使用它的算法),是我们试图学习最优状态-动作价值函数Q(s,a). 因此,我们希望我们的价值函数能够预测y=r+γmaxaQ(s,a),即给定sa我们希望能够预测y. 如您所见,我们需要知道我们在 state 中采取了哪些操作s这样我们就可以训练我们的价值函数来近似y,并且价值函数显然取决于a,因此我们还需要存储a在我们的经验元组中。

经验回放的目标最早由Lin (1992)提出,最近由Mnih 等人成功应用于 DQN 算法。(2013)旨在打破更新的时间相关性,并防止忘记以后可能有用的经验。

为了达到这些目标,回放缓冲区应该存储学习步骤中所需的元组。

大多数使用经验回放的作品,包括前面提到的那些,都学习(近似)Q函数,即Q(s,a). 显然,这个函数依赖于采样的动作a.

如果a在训练过程中根本不使用,那么它就不需要存储在回放缓冲区中。然而,在这种情况下,激发重播缓冲区的问题可能一开始就不存在。