DQN
强化学习
- DQN
- 深度网络
- 经验回放
- 目标网络
深度网络
一个神经网络能够将输入向量映射到输出向量,这个映射过程可以用下式表示。
某种意义上来说,神经网络就是一个函数,只不过不同于一般的数值函数,它的输入输出都是向量,并且拥有可以学习的参数
,这些参数可以通过梯度下降的方式来优化,从而使得神经网络能够逼近任意函数。类似于Q表,它也可以用来近似动作价值函数。
经验回放
强化学习是与环境实时交互得到样本然后进行训练的,这个样本一般包括当前的状态、当前动作、下一时刻的状态、奖励以及终止状态的标志(通常不呈现在公式中),也叫做一个状态转移。在算法中,每次交互得到一个样本之后,就立马拿去更新模型了。
这样的方式用在神经网络中会有一些问题,这跟梯度下降有关。首先每次用单个样本去迭代网络参数很容易导致训练的不稳定,从而影响模型的收敛,在深度学习基础的章节中我们也讲过小批量梯度下降是目前比较成熟的方式。其次,每次迭代的样本都是从环境中实时交互得到的,这样的样本是有关联的,而梯度下降法是基于一个假设的,即训练集中的样本是独立同分布的。
在深度学习中其实是没有这样的问题的。因为训练集是事先准备好的,每次迭代的样本都是从训练集中随机抽取的,因此每次迭代的样本都是独立同分布的。但是这样的假设在强化学习中是不成立的,因为每次迭代的样本都是从环境中实时交互得到的,因此每次迭代的样本都是相互关联的。
Q-learning算法训练的方式就是把每次通过与环境交互一次的样本直接喂入网络中训练。而在DQN中,我们会把每次与环境交互得到的样本都存储在一个经验回放中,然后每次从经验池中随机抽取一批样本来训练网络。
这样做的好处是,首先每次迭代的样本都是从经验池中随机抽取的,因此每次迭代的样本都是独立同分布的,这样就满足了梯度下降法的假设。其次,经验池中的样本是从环境中实时交互得到的,因此每次迭代的样本都是相互关联的,这样的方式相当于是把每次迭代的样本都进行了一个打乱的操作,这样也能够有效地避免训练的不稳定性。
目标网络
目标网络和当前网络结构都是相同的,都用于近似Q值,在实践中每隔若干步才把每步更新的当前网络参数复制给目标网络,这样做的好处是保证训练的稳定,避免Q值的估计发散。