【Posts阅读】关于 Deep Sets 和 Neural Processes的简单介绍

A Gentle Introduction to Deep Sets and Neural Processes

关于 Deep Sets 和 Neural Processes的简单介绍

Link: https://gordonjo.github.io/post/deepsets_nps/

Author:

Jonathan Gordon
Machine Learning PhD Student
My research interests include probabilistic machine learning, deep learning, and approximate Bayesian inference.

这篇博客中,作者谈了最近对Deep Sets 和 Neural Processes的理解,并在这篇文章中列出了这些模型的重要的组成的部分。作者主要关注 meta-learning,所以这篇文章也将从 meta-learning的背景介绍开始。

Quick Background on Meta-Learning

首先是(有监督的)meta-learning,在标准的有监督学习中,通常会比较关注学习/近似函数( f f f),此函数会建立输入( x x x)和输出( y y y)之间的映射。一个有监督的学习算法( L L L)可以被认为是当给出上述的输入输出数据对,返回一个近似的函数( f ^ \hat{f} f^)。如果( L L L)是一个比较好的学习算法,那么在某种意义上 f ^ ≈ f \hat{f} \approx f f^f

在met-learning中,面对的数据集不是一个很大的类似上面的数据集,而是由许多个任务组成的数据集,每个任务包含一个context set( D c D_c Dc)和target set( D t D_t Dt)(类似训练集和测试集)。每个集合中包含可变数量的输入输出数据对。面临假设是,尽管输入和输出之间的映射可能会因任务而有所不同,但任务共享一些统计属性,如果对其进行适当建模,则应会提高学习算法的整体性能

因此,元学习的目标是学会生成从数据集映射函数逼近器的黑箱算法(元学习的目标有点泰勒公式的意思,用一些学习到的简单函数去逼近一个新的函数)。换句话说,我们的目标是使用我们的数据集的任务训练模型,测试时候接受新的训练集,并生成函数近似者表现良好在看不见的数据相同的任务。

直观地说,元学习算法学习一种适合所有观察任务的学习算法。一个好的元学习算法会产生一个学习算法,这个学习算法具有与我们的训练集中的任务类似的理想性能(例如,产生好的函数逼近器,采样效率高,等等)。

在这里插入图片描述

扫描二维码关注公众号,回复: 11923613 查看本文章

图2:在元训练过程中提供了大量的少发任务。 元学习者学习将少量任务映射到有意义的预测分布。

元学习最引人注目的动机之一就是数据效率。 众所周知,神经网络需要大量数据集以供学习。 但是,已经观察到[1],例如,人类能够从少数例子中学习。

这是人类智能与我们当前的机器学习系统之间的主要区别,也是我们的学习系统渴望实现的极具吸引力的功能。 高效采样的学习者在许多应用程序中将非常有用,例如机器人技术,强化学习等。

这种思路导致了一种叫做few-shot learning(小样本学习) 的子研究领域。在这种情况下,仅向模型提供了执行模型所需的一些示例。 元学习是设计可以实现这一目标的模型的一种特别成功的方法。

在这里插入图片描述

图3:两个小样本学习问题的例子。(左)显示了一个示例图像(在红框中)。同一物体的所有图像必须从底部的设置中识别。(右)同样的情况,现在是字母。[1]的图像。

The Neural Process Family

接下来看Neural Process (NP)系列[2],NPs是最近推出的用于概率元学习的模型系列。 虽然存在一些有趣的潜在变体,但在这篇博客文章中,将重点关注条件神经过程(conditional neural processes,CNPs),它是NPs的一个简单的确定性变体。

CNP利用一系列映射直接对基于上下文集的某个感兴趣位置( x t x_t xt)的预测分布进行建模。 数学上,对于高斯预测可能性,可以将其表示为:
p ( y t ∣ x t , D c ) = N ( y t ; μ θ ( x t , D c ) , σ θ 2 ( x t , D c ) ) p(y_t | x_t, D_c) = \mathcal{N} \left(y_t; \mu_\theta(x_t, D_c), \sigma^2_\theta(x_t, D_c) \right) p(ytxt,Dc)=N(yt;μθ(xt,Dc),σθ2(xt,Dc))
其中 x t x_t xt表示需要作出预测的的输入, D c D_c Dc表示作为条件的上下文集合。从编码器-解码器的角度可以最好地理解NP的计算结构,在计算上,我们可以将该模型可视化如下:

在这里插入图片描述

图3:CNP的计算图。左边的( x i , y i x_i,y_i xi,yi)表示上下文集合,红色的 e e e块区域表示Encoder, a a a中的圆圈表示池化操作, d d d块区域表示Decoder。输出是传递给解码器的 x t x_t xt y t y_t yt上的高斯分布。图像来自于DeepMind NP repository[3]。

注意到编码器中的重要形式:

  • 首先在上下文集合中对于每个( x i , y i x_i,y_i xi,yi)应用了同样的映射 e e e,产生了 r i r_i ri。通常使用神经网络实现 e e e
  • 接着使用了池化操作 a a a,产生单个向量值表示,表示为 r r r。此池化操作非常重要。
  • 最后为了对 x t x_t xt进行预测,将之前的进行连接变为 r r r,之后经过解码器 d d d,解码器 d d d映射到预测分布的均值和方差。 d d d通常也是神经网络。

给定任务数据集,我们现在可以训练模型的参数(编码器和解码器的权重θ)以最大化似然对数,即下列等式:
θ ∗ = argmax θ ∈ Θ   E τ [ ∑ log ⁡ p ( y ∣ x , D c ) ] , \theta^\ast = \underset{\theta \in \Theta}{\text{argmax}}\ \mathbb{E}_\tau \left[ \sum \log p \left(y | x, D_c \right) \right], θ=θΘargmax Eτ[logp(yx,Dc)],

上述公式表示在任务 τ \tau τ上的期望,公式内部用于求和的是在目标集合上的 ( x t , y t ) (x_t,y_t) (xt,yt)数据对。实际上,在每次迭代中,我们都会从任务数据集中采样一批任务,然后(如果尚未将它们)划分为上下文和目标集。然后,我们通过e传递每个上下文集以产生r。

目标集中的每个 x t x_t xt与r串联,然后将其通过解码器以获得预测分布。 然后,迭代的目标函数是目标集中各个任务的平均可能性之和。 这与模型参数是完全可微的,因此我们可以使用标准优化器和自动微分来训练模型。

下面,展示了经过0、20和40个epoch的训练之后,使用带有EQ内核的高斯过程样本对简单CNP进行训练的过程。

在这里插入图片描述

图4:0、20和40个epoch后,CNP训练过程的快照。 每个时期都会迭代1024个随机采样的任务。

可能会立即注意到,与oracle GP(这里的oracle指的是使用ground truth内核)相比,CNP似乎不太合适。一方面:不确定性并不严格,即使观察到很多数据点。另一方面,GP拥有更多的领域知识(用于生成数据的确切内核),因此CNP到底应该有多确定并不清楚。无论如何,CNPs都面临着严重的不匹配问题。在我的下一篇文章中,我将探讨np家族中一些旨在解决这一问题的有趣补充。

Deep Sets

让我们更深入地研究CNP的内部工作原理。 思考它们的一种有用方法如下。 我们的解码器是一个标准的神经网络,它通过一点细微的调整即可映射X→Y:我们将其作为附加输入r的条件,这是特定于数据集的表示。 编码器的工作实际上只是将数据集嵌入到适当的向量空间中。 CNP指定了此类嵌入,并提供了一种使用预测模型端到端训练此嵌入的方法。 但是,可能有人会问–这是这种嵌入的“正确”形式吗?

因此,真正出现的问题是–将数据集嵌入向量空间的函数是什么样的? 这与标准的机器学习模型有很大的不同,在标准的机器学习模型中,我们期望输入是某个空间(通常是向量空间(特征向量,图像等))或至少是一个序列(例如RNN)的实例。 这里我们想要的是一个可以接受输入集合的函数逼近器

集(Sets)的属性是什么,我们希望该函数具有什么属性?第一个问题是集合的大小各不相同,我们希望能够处理任意大小的集合。 第二个关键问题是,按照定义,集合没有顺序。
因此,对集合进行操作的任何模块必须不受被认为有效的元素顺序的影响。这个性质被称为置换不变性(permutation invariance),并且是用集合建模和表示学习文献中的一个关键概念。

现在,这是一个棘手的情况:一方面,我们已经声明集合没有排序。 另一方面,现在要保证模块必须对集合的顺序保持不变性。解决这种问题的方法是,在实践中,我们的算法必须对集合的表示进行操作,并且必须按顺序进行处理。 因此,更准确地说,我们正在构造处理有序元组的模块,并且我们要求它们是置换不变的,这等效于将有序元组视为集合。

The ρ-sum Decomposition

事实证明,NP不是第一个遇到此问题的模型。 仅举几个例子,Neural Statistician[4]和PointNet[5]也考虑了表示集的问题,并提出了一种类似于CNP的解决方案。

这种形式被称为求和分解或深度集。 对于集合S,其计算如下:

f ^ ( S ) = ρ ( ∑ s ∈ S ϕ ( s ) ) \hat{f}(S) = \rho \left( \sum_{s \in S} \phi (s) \right) f^(S)=ρ(sSϕ(s))

其中 ϕ \phi ϕ表示将 s s s中的元素进行映射到 R D \mathbb{R}^D RD空间。 ρ \rho ρ表示将元素从 R D \mathbb{R}^D RD空间映射到 R M \mathbb{R}^M RM空间。请注意,这是NP计算图的更一般形式:在图3中, e e e具有 ϕ \phi ϕ的作用, d d d是(一个具有条件的) ρ \rho ρ,其中池化操作相当于这里的求和。这也是在神经统计学家和PointNet中选择的操作。 但是,此操作的作用是强制执行置换不变性,因此,任何置换不变性池化操作(例如均值或最大值)也可以代替求和。

Zaheer等人(2017)[6]对该问题进行了更为严格的处理。他们的关键定理证明了(一些重要的注意事项)集合上的任何函数都有上述公式的形式。

需要注意的是,ϕ和ρ必须是其功能类别的通用逼近器(促使使用神经网络)。
一个重要的警告是,当S的元素是从不可数的集合(例如)中得出时,该定理仅针对固定大小的集合证明。 因此,避开了各种需求。

尽管理论上有一些警告,Zaheer等人提供了一个显著的结果,用于描述深集网络的近似能力,并证明了它们在机器学习问题中的广泛使用。

Summary

这篇文章首先介绍了用于概率元学习的神经过程模型家族,并研究了集合表示学习在该模型类中的关键作用。

集的建模是机器学习研究领域中一个重要而有趣的子领域。就个人而言,由于它在元学习中的作用,我对此很感兴趣。

的确,对元/小样本学习研究线的一种观点就像学习灵活地对小数据集条件模型一样,当然,深度集在这一观点中起着关键作用。

神经过程就是采用这种方法。可以说,CNP的最直接的视角是由DeepSet网络参数化的简单预测变量,并经过最大似然训练。然而,这种简单的方法已被证明非常强大。原始论文表明,此类模型能够提供强大的概率预测,并在低数据条件下表现出色。 Requeima等人[7]以此观点运行,并使CNP适应大规模,少量拍摄的图像分类设置,表现出非常强的性能。最后,此类模型在近期取得了一些进步,从而提高了它们的能力并解决了其对拟合不足的敏感性。这些将是我下一篇有关Attentive[8]和Convolutional[9] CNP的主题。

References

  1. Brendan Lake et al. Human-level concept learning through probabilistic program induction. 2015 ↩︎

  2. Marta Garnelo et al. Neural Processes. 2018 ↩︎

  3. DeepMind Neural Process GitHub Repository ↩︎

  4. Harrison Edwards and Amos Storkey. Towards a neural statistician. 2016 ↩︎

  5. Charles R. Qi et al. PointNet: deep learning on point sets for 3d classification and segmentation. 2016 ↩︎

  6. Manzil Zaheer et al. Deep Sets. 2017 ↩︎

  7. James Requeima et al. Fast and flexible multi-task classification with conditional neural adaptive processes. 2019 ↩︎

  8. Hyunjik Kim et al. Attentive Neural Processes. 2019 ↩︎

  9. Jonathan Gordon et al. Convolutional Conditional Neural Processes. 2020

猜你喜欢

转载自blog.csdn.net/qq_33414271/article/details/108942592
今日推荐