GNN Pooling(二):Pointer Networks,NIPS2015;SEQUENCE TO SEQUENCE FOR SETS,ICLR,2016

Set2Set可以作为图池化的一种思路,其本质是对Ptr-Net的改进,因此会连续介绍这两篇论文。

1. Pointer Networks

简称Ptr-Net,是在Seq2Seq的基础上进行的改进。对于Seq2Seq的任务,输入输出都是任意的,而对于一些实际的问题,输出的长度、内容严重依赖于输入(甚至就是从输入中选出一部分作为输出),为了解决这个问题,Ptr-Net被提出来。其本质就是对Self-Attention进行的简单改进,使用注意力作为指针来选择输入序列中的一个成员作为输出。本文也在三个常见的任务中证实了Ptr-Net的有效性。
Ptr-Net也有着广泛的应用,比如文本摘要,比如图池化(Set2Set)。因此还是有必要读一读的。
本文的作者来自Google Brain,以及UC Berkeley。都是大佬啊。

三个任务

为了更好地理解Ptr-Net是如何克服Seq2Seq的缺点的,稍微改变一下论文的顺序,先介绍三个不同的几何学问题。

  1. planar convex hulls
    首先是平面凸包问题。平面的凸包可以不严谨地理解为给定一个点集,求一个由不同点构成的凸多边形,将剩余的所有顶点包括在内:
    在这里插入图片描述
    完备的数学定义应该是:所有包含点集X的所有凸集的交集,凸集则是说,在集合内的任意两点之间的连线上的所有点必须也在这个集合内。比如,月牙形就不是凸集。
  2. Delaunay triangulations(定义来源于百度百科)
    【定义】三角剖分:假设V是二维实数域上的有限点集,边e是由点集中的点作为端点构成的封闭线段, E为e的集合。那么该点集V的一个三角剖分T=(V,E)是一个平面图G,该平面图满足条件:
    1.除了端点,平面图中的边不包含点集中的任何点。
    2.没有相交边。
    3.平面图中所有的面都是三角面,且所有三角面的合集是散点集V的凸包。
    【定义】Delaunay边:假设E中的一条边e(两个端点为a,b),e若满足下列条件,则称之为Delaunay边:存在一个圆经过a,b两点,圆内(注意是圆内,圆上最多三点共圆)不含点集V中任何其他的点,这一特性又称空圆特性。
    【定义】Delaunay三角剖分:如果点集V的一个三角剖分T只包含Delaunay边,那么该三角剖分称为Delaunay三角剖分。
    在这里插入图片描述
  3. planar Travelling Salesman Problem
    旅行商问题。给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。它是组合优化中的一个NP难问题。

可以看到以上三个问题都严重依赖输入的结点。

Sequence-to-Sequence Model

首先介绍一下Seq2Seq:

给定输入(P,​​​​​​​​​​​​​​​​​​​​​CP​​​​​​​),根据RNN计算条件概率:p(CP​​​​​​​|P;θ):
在这里插入图片描述
其中,P ={P1…Pn}是特征向量的序列,CP​​​​​​​={C1…Cm( P )},m( P )是所有输出的index,CP​​​​​​​则表示输出。在上述链式概率公式中,第m( P )输出由其之前的C1…Ci-1共同决定。通过最大化训练集的条件概率来学习模型的参数:
在这里插入图片描述

Ptr-Net

为了方便描述,规定Encoder和Decoder的隐状态被表示为:(e1…en)和(d1…dm( p ))。然后论文中提到【1】为了encoder流向decoder的信息受限的问题,通过在encoder与decoder之间添加如下的注意力解决。
在这里插入图片描述
原论文里对公式符号的描述写得并不是很清楚,为此我又去翻了一下github的代码,有兴趣大家也可以看看:https://github.com/vy007vikas/PyTorch-PtrNet/blob/master/model.py。其中,j表示从1到n的encoder的输出的index,注意这时候已经把输入编码了,但是还不确定decoder的输出也就是(d1…dm( p )),这个需要根据上述注意力的计算公式得到。对于i,i是decoder的time step,i=1时候是一个特殊的标记符表示decoder的开始,这个是已知的;然后,attention就是根据当前这个时间步的i,联合所有的(e1…en)去得当前time step的输出。
v,W1,W2都是可学习参数,softmax也是注意力中常见的normalize操作,输出的aij就是注意力。di则是对所有e的加权和,这个权值是注意力。然后,di与di这俩被拼接起来作为当前时间i的隐藏状态使用,并在后续的预测任务中使用这个拼接之后的向量,并将其反馈给递归模型中的下一个时间步。
最终,Ptr-Net使用所有的注意力来表示指向原始输入的“指针”(Figure1 b)。
在这里插入图片描述

Empirical Results

实验之前需要构建数据集,对于不同的三种任务,数据集有所差别,但是所有的输入集P = {P1…Pn}都是平面坐标系中的点,Pj = (xj ; yj)代表结点的坐标。所有坐标的取值范围都在[0; 1] 之间,输出是CP。用n表示结点的数量。

凸包
使用两个指标衡量算法的好坏:准确率以及覆盖面积。本质上凸包是一堆结点构成的凸多边形,而Ptr-Net的返回结果也包含一些结点,这两个结点集的交集占凸包集的比例应该就是准确率;而覆盖面积就是这个结点组成的多边形围成的面积占凸包的面积的比。Table1是在不同结点数量下的准确率。FAIL表示算法不能生成一个简单的多边形面积占比超过99%的多边形。
在这里插入图片描述

Delaunay Triangulation
两个指标:以百分比表示的准确性和三角形覆盖率(模型正确预测的三角形的百分比)。(但是论文里没有给出这个的实验结果???可能我看的是假论文???)
旅行商
从结果来看,Ptr-Net只是提供了一个解法,但是并没有最优,A1A2A3是论文中提到的仨对比方法。
在这里插入图片描述
个人感觉这篇论文里的实验部分参考价值不大,但是这个模型还是值得借鉴的。

[1] Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. Neural machine translation by jointly learning to align and translate. In ICLR 2015, arXiv preprint arXiv:1409.0473, 2014

2. Set2Set

文本首先通过各种例子说明,在学习底层模型时,我们组织输入和/或输出数据的顺序非常重要,然后讨论seq2seq框架的一个扩展,它超越了序列,可以通过集合进行输入(变成顺序无关的)。此外提出了一个损失函数,这个函数能够在训练的时候在可能出现的顺序上进行检索,解决结构信息缺失的问题。

Model

在这里插入图片描述
这个Model是对Ptr-Net的一个改进,把Seq2Seq的Encoder变成了一个Read部件,这样就使得输入不依赖于顺序,而可以是一个集合了。模型分为三个部分:

  • A reading block。本质上是一个小规模的神经网络,将输入特征xi∈X映射到记忆向量mi。

  • A process block。这个模块用到了Ptr-Net中对记忆力的改进,不过形式化的描述稍有不同:
    在这里插入图片描述
    process本质上是一个LSTM,通过当前时间t与所有的输入mi(i∈[1,n])的注意力的加权聚合共同得到下一个时间步的输入q*t。这个都与Ptr-Net中提到的注意力差不多。

  • write block。是一个LSTM pointer network,所以Set2Set里用到了两次Ptr-Net的结构,在指针之前添加了一个额外的注意步骤(文中称之为glimpse)来扩展它。
    它满足输入X元素顺序不变的关键特性,从而有效地将输入处理为一个集合。这部分我的理解是,在输入X转化为mi之后,首先用了一个注意力(process)来确定离散元素之间的顺序关系,因此满足了顺序不变性。

SORTING EXPERIMENT

为了验证我们的模型是否比普通的seq2seq方法更有效地处理集合,我们在人工数据上运行了以下实验来完成排序数字的任务:给定0到1之间的N个无序随机浮点数,我们将按照排序的顺序返回它们。进行了多次实验,改变要排序的数的N,以及读、处理、写模型的处理步骤的数T。可以看到在采用了glimpse之后,本文的方法是要强于Ptr-Net的,但是对于很长的数据输入来说效果还是蛮差的。
在这里插入图片描述
接下来又讨论了模型在不同任务上的应用,并探究了顺序对输出的影响,比如语言模型,constituency parsing(这个与句法解析不同,这个解析出来的是一个个词组之间的关系,句法的解析呢是单词之间的关系),组合问题,图模型等等。
对于图模型来说,还是得考虑链式概率分布,通过选择任何从head变量开始的排序,应该更容易建立联合分布的模型。也就是得给图指定一个head初始点,这个点是独立的,之后的结点的概率都依赖于这个结点。
在这里插入图片描述
但是我也没咋看懂这个图模型任务是啥…总感觉这篇论文怪怪的,要不是有别的论文提到了这个Set2Set我是绝不会看的,并且Set2Set在github的代码居然是用C实现的…算了算了,不看了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五月的echo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值