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,在标准的有监督学习中,通常会比较关注学习/近似函数(fff),此函数会建立输入(xxx)和输出(yyy)之间的映射。一个有监督的学习算法(LLL)可以被认为是当给出上述的输入输出数据对,返回一个近似的函数(f^\hat{f}f^​)。如果(LLL)是一个比较好的学习算法,那么在某种意义上f^≈f\hat{f} \approx ff^​≈f。

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

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

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

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

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

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

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

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

The Neural Process Family

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

CNP利用一系列映射直接对基于上下文集的某个感兴趣位置(xtx_txt​)的预测分布进行建模。 数学上,对于高斯预测可能性,可以将其表示为:
p(yt∣xt,Dc)=N(yt;μθ(xt,Dc),σθ2(xt,Dc))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(yt​∣xt​,Dc​)=N(yt​;μθ​(xt​,Dc​),σθ2​(xt​,Dc​))
其中xtx_txt​表示需要作出预测的的输入,DcD_cDc​表示作为条件的上下文集合。从编码器-解码器的角度可以最好地理解NP的计算结构,在计算上,我们可以将该模型可视化如下:

图3:CNP的计算图。左边的(xi,yix_i,y_ixi​,yi​)表示上下文集合,红色的eee块区域表示Encoder,aaa中的圆圈表示池化操作,ddd块区域表示Decoder。输出是传递给解码器的xtx_txt​在yty_tyt​上的高斯分布。图像来自于DeepMind NP repository[3]。

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

  • 首先在上下文集合中对于每个(xi,yix_i,y_ixi​,yi​)应用了同样的映射eee,产生了rir_iri​。通常使用神经网络实现eee。
  • 接着使用了池化操作aaa,产生单个向量值表示,表示为rrr。此池化操作非常重要。
  • 最后为了对xtx_txt​进行预测,将之前的进行连接变为rrr,之后经过解码器ddd,解码器ddd映射到预测分布的均值和方差。ddd通常也是神经网络。

给定任务数据集,我们现在可以训练模型的参数(编码器和解码器的权重θ)以最大化似然对数,即下列等式:
θ∗=argmaxθ∈ΘEτ[∑log⁡p(y∣x,Dc)],\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(y∣x,Dc​)],

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

目标集中的每个xtx_txt​与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)=ρ(s∈S∑​ϕ(s))

其中ϕ\phiϕ表示将sss中的元素进行映射到RD\mathbb{R}^DRD空间。ρ\rhoρ表示将元素从RD\mathbb{R}^DRD空间映射到RM\mathbb{R}^MRM空间。请注意,这是NP计算图的更一般形式:在图3中,eee具有ϕ\phiϕ的作用,ddd是(一个具有条件的)ρ\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

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

  1. 论文阅读--PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection

    为什么80%的码农都做不了架构师?>>>    论文地址:https://arxiv.org/abs/1608.08021 算法实现:https://github.com/Charl ...

  2. 论文阅读笔记:ProjectionNet: Learning Efficient On-Device Deep Networks Using Neural Projections

    提示:阅读论文时进行相关思想.结构.优缺点,内容进行提炼和记录,论文和相关引用会标明出处. 文章目录 前言 介绍 相关工作 神经投影网络(Neural Projection Networks) Pro ...

  3. 【文本分类】Deep Pyramid Convolutional Neural Networks for Text Categorization

    ·阅读摘要:   本文提出了DPCNN(深度金字塔CNN)模型.在transformer.bert还没兴起的年代,模型越深效果越好,但是模型的复杂度会随着深度提升.粗略地说,DPCNN就是为了解决CN ...

  4. 个人阅读的Deep Learning方向的paper整理

    http://hi.baidu.com/chb_seaok/item/6307c0d0363170e73cc2cb65 个人阅读的Deep Learning方向的paper整理,分了几部分吧,但有些部 ...

  5. 【面向代码】学习 Deep Learning Convolution Neural Network(CNN)

    转载自: [面向代码]学习 Deep Learning(三)Convolution Neural Network(CNN) - DarkScope从这里开始 - 博客频道 - CSDN.NET htt ...

  6. PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection

    PVANET: Deep but Lightweight Neural Networks for Real-time Object Detection 传送门:      论文:https://www ...

  7. 经典DL论文研读(part2)--Deep Sparse Rectifier Neural Networks

    学习笔记,仅供参考,有错必纠 文章目录 Deep Sparse Rectifier Neural Networks Abstract Introduction Background Deep Rect ...

  8. 论文笔记:Person Re-identification with Deep Similarity-Guided Graph Neural Network

    Person Re-identification with Deep Similarity-Guided Graph Neural Network 2018-07-27 17:41:45 Paper: ...

  9. 遥感图像-Deep Feature Alignment Neural Networks for Domain Adaptation of Hyperspectral Data高光谱数据深度特征对齐神经

    Deep Feature Alignment Neural Networks for Domain Adaptation of Hyperspectral Data高光谱数据领域自适应的深度特征对齐神 ...

最新文章

  1. 几种开源工作流引擎的简单比较(转)
  2. python 2/3 joblib.dump() 和 joblib.load()
  3. 程序压力测试、性能测试AB、Webbench、Tsung
  4. ASP.NET中添加View与Razor引擎以及View解析和Controller向View传值
  5. 微信、QQ都在用的腾讯云EB级对象存储架构剖析
  6. 【完整可运行代码】剑指 Offer 29. 顺时针打印矩阵
  7. 开发物体识别桌、_想用人工智能实现安全风险管控?快来试试EasyMonitor一站式视频监控开发平台...
  8. 使用用户名/密码和Servlet安全性保护WebSockets
  9. 关于hexo与github使用过程中的问题与笔记
  10. 「雕爷学编程」Arduino动手做(20)—水银开关模块
  11. 使用mysql导入数据
  12. 过滤程序的html代码,值得收藏的html过滤代码
  13. Dart基础第1篇:Dart环境搭建、Dart开发工具
  14. 进制转换演示及其Python示例
  15. Jenkins配置Android自动打包传蒲公英功能
  16. Linux 镜像挂载
  17. 绿幕抠图与无绿幕抠图区别
  18. 国家开发大学计算机平面设计试题,国家开放大学电大专科《计算机平面设计(1)》网络课形考任务1答案...
  19. 每日单词20110606
  20. 基于MPLS的VPLS

热门文章

  1. 宾夕法尼亚大学计算机专业研究生,宾夕法尼亚大学硕士计算机系统专业排名
  2. 2022年美国大学生数学建模(MCM/ICM)C题:量化交易策略
  3. Spark RDD distinct 算子
  4. 三次握手和四次挥手详解
  5. 培训机构无线覆盖解决方案
  6. el-dialog内的el-table实现自适应高度
  7. 维特比算法C++实现
  8. IntelliJ IDEA 代码提示快捷键
  9. MySQL联合索引原理解析
  10. 纯shell实现文本替换