读书笔记14:Graph networks as learnable physics engines for inference and control(ICML 2018)

原文地址: https://arxiv.org/pdf/1806.01242.pdf

此篇文章有supplementary material,有完整的算法,实现,方法的细节,实验的视频

摘要部分:首先还是介绍背景,理解并与日常生活中的各种物理场景进行互动需要丰富的关于世界的结构的知识,这些知识或者是用value or policy function来implicitly的表达,或者是explicitly的用transition model表示(这两个表示方法还不太清楚具体指什么)。接着介绍自己的模型,提出了一个基于graph networks的可学习的模型,这个graph networks指的就是读书笔记7当中提出的GN模型,后面有的图片好像都是那篇文章摘出来的。然后说结果展示我们的模型多么多么好,也可算作是从实验角度介绍模型,但是没有说具体数据集什么的。最后一句话说takes a key step toward building machines with more human-like representations of the world. 这句话说得很好,表明了一个观点,就是机器要是想和人类一样拥有智慧,那么,存储在机器中的数据和知识就不应该是现在这种线性的数据,像vector或者matrix之类的形式,而可能就应该是以graph的形式存储,像人类一样。

introduction部分:第一段用一个问题介绍了背景,很多领域都是随着组成元素的数量,组合复杂度大大增加的,例如一盒弹力球的轨迹这种多体系统的轨迹问题。那么一个智能体如何来掌控这么复杂的系统呢?第二段用回答这个问题的方式来引出目前的方法,一个有力的途径是将系统表示为object和其间的relation,对所有的object采用相同的计算,对所有relation也是(这也算是一个inductive bias,假定所有的object都是一种地位的的,所有的relation也是,可以用同样形式的计算来处理)。这使得模型可以推广到之前没见过的场景上,其实也就是对所有对象采取同样的方式操作,那么不管新的旧的,见过的没见过的,都可以处理。但是这个没见过的系统的组成成分和组合的规则不能未知,例如一个基于粒子的物理系统,假设所有的物体都遵循相同的动力学,并且相互作用都遵循相似的规则,例如通过力来进行相互作用,也就是说,推广到新的系统上,需要新的系统和老系统组成的object以及relation都是同类型的。第三段介绍自己的模型,here we introduce。。。。。。介绍了自己的模型是使用GN的,并且对GN做了简介,body dynamics编码进node的update function中,相互作用编码进了edge的。第四段从实验角度介绍模型的表现,第五段总结本文的三个技术贡献:GN-based forward model、inference model、control algorithm。其中前两个是用GN来对表示成graph的物理系统进行学习,第三个是用forward and inference model进行planning和policy learning。

技术部分,首先介绍了本文如何将物理系统表示为graph,graph的node及edge的符号和graph networks的符号一致。本文将物理场景中的static和dynamic属性区分开来,并用分开的graph来表示,static graph G_s表示graph中不变的静态的信息,例如全局的一些像时刻,重力场之类的参数,每个物体的质量等等,动态的graph G_d表示的是即时的信息,例如物体的坐标,空间指向等等。本文基于GN引入了一个GN-based forward model,用来基于当前的状态预测未来的状态。这个模型的结构如下

用了两个GN,参数是不共享的,首先,某一时刻的graph输入进去,然后输出一个latent graph G',这个G'再和原graph G连接在一起(本文的graph连接指的都是将graph对应的edge、node、global feature连接起来,合成一个graph,而分离graph指的就是相反的过程),作为第二个GN的输入,输出为G*,G*的每一个node被训练成下一个时刻每一个body的状态的预测值,使用两个GN的原因是第一个GN的全局信息g抓取了graph所有位置的信息,这样第二个GN在计算每一个node的时候,就都能包含全局的信息(和attention的思想很像,参见读书笔记6:attentive convolution),并且实验结果也证实了这个效果比单独的GN或者单独的interaction network效果好(也没准只是模型复杂度的提升带来的performance上升,怎么确定是g导致的呢?可以用一个没有g的GN代替上述模型中的第一个GN做对比实验)。作者还引入了一个recurrent GN based forward model(下图),包含着三个RNN的子结构(GRU),分别作用到edge、node、和global feature上。forward model预测的是状态的改变量,所以要求得绝对值,要用输入值加上改变量。为了生成长程的rollout trajectory(rollout是首次展示的意思,加上trajectory不是很明确是什么意思,后文可能会看出是什么),state的绝对值得的预测和外部的控制输入一遍一遍的输入到模型中。模型的输入和输出都会经过normalization。

本文还提出了一个inference model。首先,系统识别(system identification)指的是通过动力系统的观察值预测一些观测不到的特性,这对于控制系统来说是很重要的,因为这些观察不到的特性会影响到控制的动力过程。本文针对“implicit” system identification,指的是推断出来的非观测量不会明确的估计出来,而是以latent representation的形式再输入到其他机制之中。

本文提出的inference model是基于recurrent GN,只观察dynamic states,输入的是dynamic state graphs构成的序列G_d,结合一些控制输入,经过T个时刻的计算后返回输出是G*(T),G*(T)接着和G_d连接起来被输入到单步的前馈模型中。模型的核心recurrent core以G_d和hidden graph G_h连接在一起为输入,输出新的G*和G*_h(如上图),这里模型的工作过程说得很乱,根本没懂是什么意思,上面那个图也不是整个模型的示意图,看后文有没有详细说明吧。除了这个recurrent GN based inference model之外,最后一个是control algorithm,作者在这部分介绍也很简短,说探索了一个事实,那就是GN是可微分的,可以使用学好的forward model和inference model来进行model-predictive control(MPC),这个MPC是在经典的,基于梯度的轨迹优化框架内的(within a classic, gradient based trajectory optimization regime),此外还探索了一个通过SVG(stochastic value gradients)同时学习GN-based model和policy function的agent。

实验的环境设置是这样的:实验包含7个Mujoco模拟环境(如下),Pendulum,cartpole,acrobot,swimmer6,cheetah,walker2d和一个模拟的JACO机械臂。训练数据是通过进行模拟的随机控制得到的,人工控制的真实的JACO的轨迹记录也被用来作为训练数据。

在检验泛化能力和系统识别的实验中,前述的几个模拟系统的不同版本被创建来作为数据集,一些参数被改变了,例如质量,link长度之类的参数。

在MPC planning的实验中,模型的应用方式是在给定的初始状态下,沿着一条路径最大化dynamic-state-dependent reward,forward model用来预测一个由给定的action序列预测的N-step的轨迹,以及沿着轨迹的reward。action的优化是通过反向传播total reward对于action的梯度来实现的。

supplementary material里面有具体的算法,其中forward prediction算法如下

输入的是三个训练好的GN模块和两个normalizer,t0时刻的dynamic state,actions,和系统的参数,这里说action是将状态应用到某一个系统的,action不应该是对系统施加的外界作用吗?

有了输入之后,首先用系统参数构建static graph,用x^t0构建dynamic nodes,也就是动态图节点,动态图的边用a^t0(前文未提到)构建,之后就得到了dynamic graph,而输入graph是将static graph和dynamic graph连接在一起得到的。输入先经过输入normalizer规范一下,然后输入到GN1得到输出,GN1的输入和输出连接起来输入到GN2得到dynamic graph的变化量,之后取出结点信息,然后用normalize_out的逆运算(为啥是逆运算,是不是打错了,后面的算法中norm_out没出现逆运算)得到节点变化量的预测值,再和基础值加起来就是节点的预测值,也就是系统状态信息的预测值,再从中取出需要的信息作为下一次预测的输入值。

第二个算法是forward prediction和系统识别一起的算法,将dynamic graph的每一个graph都输入到训练好的参数推断GN中,不断地更新hidden graph G_h和G_0,所有的graph都处理完了之后得到的G_0就是系统识别的结果,之后用这个代替D1中的G_s来继续预测下一时刻的系统状态,算法的输出也是下一刻的系统状态,就像前文所说的,推测出来的系统状态并不会直接输出来,而是用来辅助得到更精确的系统状态预测值的。

这个training算法主要是用实际的下一时刻的系统状态与预测值做差值,得到loss,然后优化。

用最终得到的系统识别的G_ID来代替D3中的G_s,随便找一个时刻的信息,用D3得到dynamics prediction loss,应该是用识别出来的系统信息进行预测,然后和真实值比较,这样得到的loss优化时就能对系统识别的参数进行更新了。

MPC的,输入是系统状态,随机的一组操作,事先训练好的动力学模型M,这个模型用当前系统状态和采取的操作可以计算下一时刻的系统状态,还有trajectory cost function,用来计算cost的。接着是不断重复一个循环多次,这个循环每一次做的事情是:首先初始化为,然后从t=0开始,不断用函数M迭代,获得下一时刻的系统状态,一直进行horizon次,然后计算trajectory cost ,然后计算cost对于action的梯度,进行action的更新,最终输出的就是优化后的action sequence。这个采用的是滚动优化(receding horizon),一次又一次的为固定的horizon进行planning。

本文提到的MPC相关的问题由于背景知识介绍得较少,之前没接触过,所以理解的有些混乱。

猜你喜欢

转载自blog.csdn.net/b224618/article/details/81748187