这样,强化学习训练所需的信息就齐全了,梦境中的训练,GO!
梦境重现了真实环境中的必要元素,和真正的VizDoom有着一样的游戏逻辑、物理规则和(比较模糊的)3D图形,也和真实环境一样有会扔火球的怪物,AI智能体要学着躲避这些火球。
更cool的是,这个梦境可以增加一些不确定因素,比如说让火球飞得更没有规律。这样,梦中游戏就比真实环境更难。
在梦境中训练之后,AI就可以去真正的VizDoom中一试身手了:
AI在VizDoom中的表现相当不错,在连续100次测试中跑过了1100帧,比150帧的基准得分高出不少。
怎么做到的?
他们所用的方法,简单来说就是RNN和控制器的结合。
这项研究把智能体分为两类模型:大型的世界模型和小型的控制器模型,用这种方式来训练一个大型神经网络来解决强化学习问题。
具体来说,他们先训练一个大型的神经网络用无监督方式来学习智能体所在世界的模型,然后训练一个小型控制器使用这个世界模型来学习如何解决任务。
这样,控制器的训练算法只需要在很小的搜索空间中专注于信任度分配问题,而大型的世界模型又保障了整个智能体的能力和表达性。
这里的世界模型包括两部分,一个视觉模型(V),用来将观察到的高维信息编码成低维隐藏向量;一个是记忆RNN(M),用来借历史编码预测未来状态。控制器(C)借助V和M的表征来选择好的行动。
在我们上面讲到的开车、打Doom实验中,视觉模型V用了一个VAE,变分自编码器;记忆模型M用的是MDN-RNN,和谷歌大脑让你画简笔画的SketchRNN一样;控制器C是一个简单的单层线性模型。
把这三个模型组装在一起,就形成了这项研究中智能体从感知到决策的整个流程:
视觉模型V负责处理每个时间步上对环境的原始观察信息,然后将这些信息编码成隐藏向量zt,和记忆模型M在同一时间步上的隐藏状态ht串联起来,输入到控制器C,然后C输出行为向量at。
然后,M根据当前的zt和at,来更新自己的隐藏状态,生成下一步的ht+1。
这有什么用?
让AI会“做梦”,还能在“梦境”中学习,其实有很多实际用途。
比如说在教AI打游戏的时候,如果直接在实际环境里训练,就要浪费很多计算资源来处理每一帧图像中的游戏状态,或者计算那些和游戏并没有太大关系的物理规则。用这个“做梦”的方式,就可以在AI自己抽象并预测出来的环境中,不消耗那么多计算资源,一遍又一遍地训练它。
在这项研究中,他们还借助了神经科学的成果,主要感知神经元最初出于抑制状态,在接收到奖励之后才会释放,也就是说神经网络主要学习的是任务相关的特征。
将来,他们还打算给VAE加上非监督分割层,来提取更有用、可解释性更好的特征表示。