首页 理论教育 2013版DQN网络结构及训练过程

2013版DQN网络结构及训练过程

时间:2023-06-30 理论教育 版权反馈
【摘要】:2013版DQN的结构是非常经典的。(二)训练过程DQN的训练过程注定和MNIST不一样,因为如果一样,就是做分类了。标准的、平淡无奇的MSE Loss,让这个DQN网络输入一个状态所描述的φj产生18维的向量,让输出的向量值和进行价值评估回溯后的yi不断靠近。

2013版DQN网络结构及训练过程

(一)模型结构

每当提到深度学习模型,不论是结构简单的CNN、RNN、FC,还是由它们组合而成的那些高级的、针对每个具体应用场景的Deep Speech、Tacotron、Info-GAN等,我都喜欢称它们为“模型”,而不是“算法”。在我看来,“算法”这个词所指代的内容关注的是计算逻辑,是人类用自己的思维方式书写的完整的计算过程。而刚刚列举的这些概念则不同,它们只是映射的逻辑或者结构,是人类摆出来的“架子”,“架子”上放满了待定系数。要想实现它们,需要进行大量的样本训练,并在训练中确定那些待定系数(也就是权重),从而确定计算逻辑。可以看出,两者的区别还是蛮大的。

2013版DQN的结构是非常经典的。经典到什么程度呢?几乎任何讲深度强化学习的文章和书籍都会提到它。2013版DQN各层的参数,如下表所示。

2013版DQN各层的参数

解释一下这个网络的结构。网络的输入是一个连续4帧84×84的图像。也就是说,这个充当游戏机器人的网络,要在正式把样本输入网络之前,连续观测4帧图像,把这4帧图像连接在一起(可以理解为连成一幅“大图”),作为样本的状态s输入。为什么要使用连续的图像而不是一帧图像呢?原因很简单。这种游戏和象棋有一些差别。象棋的盘面是固定的,不论前面的棋子是怎么走的,到了当a的盘面后,盘面信息就能将状态完整地描述出来了。对一名成熟的棋手来说,只看当前的盘面就可以决定接下来走哪步棋最好了。当然,有人会说,前面的棋子是怎么走的,代表了对方的下棋风格(或者战略意图)。然而,在计算机面前,这些都不重要——任你什么风格,我只按照当前看到的盘面寻找最优解。

(二)训练过程

DQN的训练过程注定和MNIST不一样,因为如果一样,就是做分类了。具体怎么做,我们通过伪代码来了解。

这段伪代码很短,算上标题还到20行,从结构上可以分成三层。

·第一层:初始化一个Replay Memory(称作“D”),其最大容量为N。Replay Memory是为了存储Transition信息而设置的,就是每个Step在玩游戏时收集的(s,a,r,s′)。然后,将随机数作为参数,初始化一个深度神经网络Q。网络Q的参数为θ。接下来,开启一个M次的循环,也就是做M个Episode,让机器人在里面不停地玩游戏,直到通关或者失败。

·第二层:在每一个Episode中初始化一个序列,然后进行预处理。在伪代码中没有对此做太多的解释,但实际上,这部分就是用来构造输入内容的(我们暂时不用细究)。在第二层中开启一个T次的循环,相当于这T次中的每一次都在处理一个Step的内容。

·第三层:每个Step都在做什么?

用一个ε大小的概率去做一个随机动作at。这个动作很容易理解,就是为了进行充分的试探。在这段伪代码中,虽然没有做过多的说明,但我们每个人都能想到,ε是一个变化的值会比较合理。这个值在一开始比较大,就是为了让机器人充分地随机试探环境并得到反馈。越到后面,这个值应该越小——机器人的不断学习,会使其行为逐渐得到优化,变得越来越靠谱,所以,应该适当减小ε的值,使机器人不至于进化了那么久还会有相当的概率去做不靠谱的事情。(www.xing528.com)

在设置ε概率之外要做什么?用1-ε的概率计算。

简言之,就是让当前的环境状态变量st,通过当前的网络产生18个值。前面说过为什么会产生18个值,就是18个动作各自的评分。然后,将其中评分最高的动作作为输出到环境中的动作。这个动作相比一开始的动作,也非常不靠谱,跟随机没什么两样。不过,这个动作将逐渐进化,因为网络Q会逐步拟合s→Q(s,a)这个映射过程。这个拟合过程,和用神经网络拟合从一个输入到多维连续向量输出的过程没有区别——区别在后面。

从Replay Memory D中随机选择一些Transition,进行如下计算:

也就是说,yi有两种赋值的情况。

以上表达式中的前一种情况是,如果当前状态是游戏结束(也就是通关或者失败),yi就被赋值成当前得到的回报值。这里的回报赋值肯定是有讲究的。如果是通关,或者以通关为终极目标的任务,就一定要给出一个比较大的回报值(这相当于终极目标的实现)。而且,这个比较大的回报值会“逆流而上”,通过贝尔曼方程不断向前更新,把一棵树中的一条靠谱的路线标出来。如果失败了,那一定要赋值一个绝对值比较大的负数(至少我是这么想的)。这样,在使用贝尔曼方程进行更新的时候,只要有一条路可选,就永远不会有机会进行回溯了。

对其他情况,赋值为yi=rj+γQ(φj+1,a′;θ)。这种设置相当于,对在下一个状态下做的所有动作中的估值进行比较,拿出一个最大的作为“远期回报”,加上当前的回报rj,赋值给yi。这个赋值过程,就是在时间差分法的Q-Learning算法中用贝尔曼方程进行估值更新的过程。

Replay Memory相当于一个池子,里面保存了一小段一小段(s,a,r,s′)的Transition信息。在做估值更新时,会随机选择其中的一部分。这样做的好处是,能够消除这些样本在序列上的相关性.更高效地对yi的值进行估算。Replay Memory就像游戏世界中的“二十四史”,记录了曾经发生的各种Transition信息及历史评价Reward,供后人研究。

在第三层的最后一步做优化,相当于优化损失函数

这还真是一个监督学习过程。标准的、平淡无奇的MSE Loss,让这个DQN网络输入一个状态所描述的φj产生18维的向量,让输出的向量值和进行价值评估回溯后的yi不断靠近。因此,yi也应该是18维的向量。将向量和向量的对应维度,两两相减后算平方,就是损失函数的定义。

用简短的文字描述一下这个训练过程。在一个与Q-Learning极其类似的计算过程中,通过玩游戏收集(s,a,r,s′),将其存入Replay Memory。玩游戏过程中的每个Step,都有一定的概率用随机动作去试探。而对其他情况,都是用目前的网络拟合出来的最优动作来做的。每个Step执行后,都要从Replay Memory里取出一些(s,a,r,s′)的Transition信息来做估值更新,并把这些估值当成标签,用Loss=(yi-Q(φj,a;θ))2不断进行拟合,让Q网络根据这些估值来调整Q(s,a)这个函数的估值。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈