这个系列算上ICLR2019的attentive neural process一共三篇文章,最早是conditional NP,之后更新了NP,后来又有了attentive NP。今天刚看完前两篇,趁热粗略写一下自己的理解,不一定正确。
深度神经网络的一个局限在于只能学到某一个固定的函数映射,而高斯随机过程可以得到关于函数的分布,这就灵活多了,作者正是将NN和GP结合起来得到了CNP。
问题的描述作者这一段说的很清楚了:
如果把图一的P看成高斯过程的话,一方面很难设计合适的prior process,另一方面计算代价高昂。于是作者提出CNP,直接参数化这个条件随机过程,让模型自己去挖掘先验信息。
上述模型可以描述为: 其中, 都是神经网络。 是随机过程 的参数,即 ,以回归问题为例,,也就是说对于每一个数据 ,找出分布 。
训练过程是这样的:设 是观测值, , 。目标函数为 ,这个目标函数咋一看有点迷,看了代码之后发现就是求得每个数据点分布p之后,取 。
值得注意的是,因为需要学习到函数的分布,所以这里的数据集也是特别加工生成的,首先依据不同的 ,生成多组 后,合起来作为总的数据,再接着分observation和target两个集。
大体过程就是这样了。
这一篇和CNP主要的区别就是引入了隐变量Z。其他的似乎没什么区别,所以只介绍一下隐变量部分,欢迎评论区补充。
注意到这里较之于CNP,多了一步提取隐变量的过程。对于这个隐变量Z,作者使用amortised variational inference来求解,具体的沿用conditional VAE的方法,变分下届如下:
下届的左半部分是解码器,用到了隐变量和Target集,右半部分是编码器,使用了全部的数据;这里前m个数是观测集,也就是图三中左侧的context部分,m到n的数据是target部分,图三右侧;
公式中context数据的后验又作为了全部数据的先验,并且使用 来近似 ,并且注意到这里的近似后验没有用额外的推断,而是借用了 的网络。图三中的虚线介绍了这一inference过程。
TODO……