DQN,即Deep Q-learning算法,是将神经网络与Q-learning算法相结合而得到的强化学习算法。在DeepMind发表的论文《Playing Atari with Deep Reinforcement Learning》中,DeepMind使用DQN算法训练出可以玩Atari游戏的模型,该模型甚至在某些游戏上表现的比人类还要优秀。然而,该算法性能如此优秀,原理却不是很复杂,本篇文章将介绍这个神奇的算法。
算法思想
DQN是神经网络和Q-learning算法相结合的产物,其基本思想与Q-learning一致,都是通过估计动作价值函数的值以选择合适的策略。两者的不同之处在于:
- 原本在Q-learning中用来存储值的Table,在DQN中被取缔了,取而代之的是一个神经网络。
- 在模型训练过程中,DQN算法利用离线记忆存储的方式,打破了样本的相关性。
在原本的Q-learning算法中,使用一个张Table存储所有状态以及动作空间的值。如果状态和动作空间是离散且动作维度不高的时候,一张Table完全可以存储。如果状态和动作空间高维连续时,这时候Table所需要存储的数据就非常巨大甚至海量,这时候Table就显得很无力了。
事实上,Table在整个Q-learning算法中的作用是根据输入的状态,输出动作空间的值,如果用函数来表示如下:
从公式上看,只要完成这一功能,使用何种形式去实现都可以,而神经网络恰好是其中一个很合适的方案。因为神经网络的本质就是使用一组有限的参数,根据某种规律来拟合某种分布,以进行预测评估。有于神经网络只需要一组有限的参数,因此可以避免存储数量庞大的样本,减少样本存储占用,提升性能。
同样,在原本的Q-learning算法中,每一次与环境进行交互之后,得到的样本基本只能使用一次。这就导致样本的利用率不是很高,尤其是对于那些有着非常积极影响的样本。通过将这些样本存储下来,之后对样本进行采样训练,可以在一定程度上提高对样本的利用率,加速算法的收敛。
算法流程
-
初始化一个存储容量为的记忆池,同时随机初始化一个网络。
-
按以下流程迭代轮。
-
初始化状态为第一个状态,并进行处理得到特征向量。
-
按以下流程迭代轮。
-
通过-greedy算法根据状态从动作空间中得到动作,通过网络选择动作的公式如下。
-
执行动作并观测环境,得到奖励以及图片。
-
设置并对提取特征得到。
-
将状态存储到记忆池中。
-
随机从记忆池中选择一组的记忆,并根据以下公式计算收获:
-
通过来计算损失,并通过梯度更新网络的参数。
-
-
需要注意的是:
- 记忆池的容量为,当记忆池中的记忆数量达到时,在新加入记忆时,会将最久远的记忆清除掉。
- 在实际训练时,-greedy算法的值会随着迭代次数的增加而减小。
- 网络的目标函数是,目的是让网络预测的值更加接近真实值。