@19373545 彭兴宇
1 逃生游戏
1.1 游戏介绍
给定一个随机的5×5的地图,包含一个终点(emerald_block),若干障碍(sea_lantern),以及可以
蔓延开的火(fire),目标是让史蒂夫能学会走到终点并尽量不要碰到火。
1.2 DQN
1.2.1 DQN的本质
DQN的本质是将Q-Learning中的Q函数的存储形式由表格转变为神经网络,以适应状态或动作连续、复
杂的应用场景。
对于Q函数而言,我们每向其输入一个(状态,动作)对,Q函数就会输出其相应的估值。在Q-
Learning中,我们以状态为纵轴,以动作为横轴,构建一表格,以实现这一映射。
但表格法有这样的问题:
①只能处理离散分布的输入,不能处理连续分布的输入。当状态或动作是连续变化的值的时候,就会有
无数多的状态或无数多的动作,此时表格便是不可行的;
②即使输入是离散的,但当可能的状态、可行的动作过于复杂时,表格也会极为庞大,其存储会占据极
大空间,也是不实用的。
那么为什么DQN用神经网络代替表格后,就能解决以上问题呢?
①神经网络天然得能处理连续的输入值;
②神经网络的本质也是一个函数,对其的训练就是调整其参数使之能够拟合我们的目标。请注意,这些
参数是为所有输入所共享的,也即我们只用一定的参数量就能实现对所有(状态,动作)对的估值的计
算——与之相对的,Q-Learning其实相当于为每一对(状态,动作)对都做了一个独立的到估值的映
射,因为对于每一个(状态,动作)对,Q表中都会为其填写一个估值。总而言之,估值计算的参数共
享让DQN能够使用更小的空间来表示Q函数。
那DQN有无缺点呢?
当然有。由于神经网络的参数为所有输入的(状态,动作)对所共享,因此在拟合其中某个输入对时,
对另一输入对拟合的误差可能会变大——捡了这个、丢了那个。我们是如何权衡的呢?像所有的神经网
络一样,去计算一批样本的某种平均误差指标,再进行反向传播更新参数,以平衡对各种不同输入对的
关照程度。
DQN的神经网络结构的设计极为重要。设计得太过简单,DQN就无法很好地拟合Q函数;设计得太过复
杂,泛化能力就会降低。
DQN对reward的设计提出了高要求。不合理的reward设置会导致神经网络的反向传播中出现梯度爆炸
或梯度消失。一种经验性的设计方式是将reward设计在一个较小的、在0附近的区间内,如[-1,1],以防
止出现极大的数,导致梯度爆炸;对于此时梯度消失,可以通过引入残差解决。
本实验中基于tensorflow框架设计的神经网络结构如下: