2016-ICLR-Order Matters- Sequence to sequence for sets

news2024/12/28 6:57:57

2016-ICLR-Order Matters- Sequence to sequence for sets


Paper: [https://arxiv.org/pdf/1511.06391.pdf](https://arxiv.org/pdf/1511.06391.pdf)
Code:

顺序重要性:集合的顺序到序列

摘要

许多需要从观察序列映射或映射到观察序列的复杂任务现在可以使用序列到序列(seq2seq)框架来制定,该框架使用链规则来有效地表示序列的联合概率。然而,在许多情况下,可变大小的输入和/或输出可能不会自然地表示为序列。因此,作者讨论 seq2seq 框架的扩展,该框架超越序列并以原则的方式处理输入集。此外,作者提出了一个损失,通过在训练期间搜索可能的顺序,处理输出集结构的缺乏。并展示了关于排序的主张的经验证据,以及对基准语言建模和解析任务的seq2seq框架的修改,以及两个人工任务 - 排序数字和估计未知图形模型的联合概率。

序列和集合的神经网络

考虑一个具有 n n n ( X i , Y i ) i = 1 n (X_i, Y_i)^n_{i=1} (Xi,Yi)i=1n的给定训练集的通用监督任务,其中 ( X i , Y i ) (X_i, Y_i) (Xi,Yi)是输入的第 i i ii 对及其相应的目标。序列到序列范式对应于 X i X_i Xi Y i Y_i Yi都由长度可能不同的序列表示的任务: X i = { x 1 i , x 2 i , . . . , x s i i } X_i = \{x^i_1, x^i_2,...,x^i_{si}\} Xi={x1i,x2i,...,xsii} Y i = { y 1 i , y 2 i , … , y t i i } Y_i = \{y^i_1, y^i_2, …, y^i_{ti} \} Yi={y1i,y2i,,ytii}。在这种情况下,使用条件概率 P ( Y ∣ X ) P(Y |X) P(YX)对每个示例建模并使用链式法则将其分解如下

并将其实现为编码器递归神经网络 (RNN, 以按顺序读取每个 x s ∈ X x_s \in X xsX,如下所示:

其中 h s h_s hs 是编码器在时间 s 的状态,后跟解码器 RNN 以在给定当前状态 g t g_t gt 和之前的 y t − 1 y_{t−1} yt1 符号的情况下,一次生成一个 y t ∈ Y y_t \in Y ytY

输入集

原则上,当使用复杂编码器(如递归神经网络)时,顺序无关紧要,因为这些是通用近似器,可以从输入序列(例如,任何顺序的 n 元语法)对复杂特征进行编码。作者认为,顺序似乎很重要的原因是由于潜在的非凸优化和更合适的先验。并且输入数据向模型显示的顺序会影响学习性能。

注意力机制(重要,主要公式)

在此,作者采用了基于“content”的注意力。它具有以下特性:如果随机排序内存,从内存中检索到的向量不会改变。这对于正确处理输入集 X X X 本身至关重要。基于注意力机制的流程块使用以下功能:

其中 i i i 通过每个内存向量 m i m_i mi(通常等于 X 的基数)进行索引, q t q_t qt 是一个查询向量,允许从内存中读取 r t r_t rt f f f 是一个从 m i m_i mi q t q_t qt 计算单个标量的函数(例如,点积),LSTM 是一个计算循环状态但不带输入的模型。 q t ∗ q^∗ _t qt 是此 LSTM 演变的状态,通过将查询 q t q_t qt 与生成的注意力读出 r t r_t rt 连接起来而形成。 t t t 是指示要提供给解码器的状态所携带多少“处理步骤”的索引。请注意,排列 m i m_i mi m i ′ m_{i′} mi 对读取向量 r t r_t rt 没有影响。

读取、处理、写入

有三个组成部分:

  • 一个读取块,它使用一个小神经网络简单地将每个元素 x i ∈ X x_i \in X xiX 嵌入到一个记忆向量 m i m_i mi(所有 i i i 使用相同的神经网络)。
  • 一个进程块,它是一个没有输入或输出的LSTM,在存储器 m i m_i mi上执行 T T TT级计算。
  • 一个写块,它是一个 LSTM 指针网络,它接收 q T ∗ q^∗_T qT(作为从输入集产生输出所需的上下文),并指向 m i m_i mi的元素(隐式地, x i x_i xi), 一次一个步骤。

输出顺序的重要性

已经考虑了编码输入集的问题; 把注意力转向输出表示。描述随机变量 Y 集合上的联合概率的链式规则可能是联合概率的最简单分解,它不会产生任意限制(例如条件独立性)。

结论

LSTM已被证明是表示可变长度顺序数据的强大模型,这要归功于它们能够处理合理的长期依赖关系,并且使用链式规则有效地分解联合分布。另一方面,有些问题表现为一组无序的元素,要么作为输入,要么作为输出;在其他一些情况下,数据由一些需要线性化才能馈送到 LSTM 的结构表示,并且可能有多种方法可以做到这一点。

代码

来自于torchdrug

class Set2Set(Readout):
    def __init__(self, input_dim, type="node", num_step=3, num_lstm_layer=1):
        super(Set2Set, self).__init__(type)
        self.input_dim = input_dim
        self.output_dim = self.input_dim * 2
        self.num_step = num_step
        self.lstm = nn.LSTM(input_dim * 2, input_dim, num_lstm_layer)
        self.softmax = Softmax(type)

    def forward(self, graph, input):
 ensor: graph representations
        """
        input2graph = self.get_index2graph(graph)
        hx = (torch.zeros(self.lstm.num_layers, graph.batch_size, self.lstm.hidden_size, device=input.device),) * 2 # [bi*num_lyers, batch, hz]
        query_star = torch.zeros(graph.batch_size, self.output_dim, device=input.device) #[seq_len, batch, input_dim]

        for i in range(self.num_step):
            query, hx = self.lstm(query_star.unsqueeze(0), hx) #[seq_len, bz, bi*hz], [bi*nlayers, batch, hz]
            query = query.squeeze(0)
            product = torch.einsum("bd, bd -> b", query[input2graph], input) #
            attention = self.softmax(graph, product) # batch内节点对每个batch的注意力
            output = scatter_add(attention.unsqueeze(-1) * input, input2graph, dim=0, dim_size=graph.batch_size)
            query_star = torch.cat([query, output], dim=-1)

        return query_star

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/340296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++类基础(十一)

运算符重载&#xff08;二&#xff09; ● 对称运算符通常定义为非成员函数以支持首个操作数的类型转换 struct Str {int val 0;Str(int input): val(input){}auto operator(Str x){std::cout << "auto operator(Str x)\n";return Str(val x.val);} }; int …

git 常用命令之 git log

大家好&#xff0c;我是 17。 git log dev 查看 dev 分支的 log git log -p 每次提交所引入的差异 git log --stat 每次提交的简略统计信息 git log --name-status 比 --stat 更简洁&#xff0c;更常用。git log -2 最近两次提交 git log --since2.weeks 最近两周内的提交 git…

Linux通配符、转义符讲解

目录 通配符 通过通配符定义匹配条件 转义符 将所有的逻辑操作符都转换成字符 通配符 通过通配符定义匹配条件 * 任意字符都可以通配&#xff08;也可以匹配空值&#xff09; &#xff1f; 匹配单个字符 [a-z] 匹配单个的小写英文字母 [A-Z] 匹配单个的大写英文…

jQuery 基础知识(五)

前面已经介绍HTML、CSS和javaScript&#xff0c;这三个前端语言&#xff0c;俗称前端三剑客。下面来学习一个javaScript简化并封装好的库——jQuery库。01 - AJAX AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 AJAX的介绍 ajax 是 Asynchr…

freesurfer如何将组模板投影到个体空间——如投影 Schaefer2018 到个体空间

freesurfer如何将组模板投影到个体空间——如投影 Schaefer2018 到个体空间 freesurfer如何将组模板投影到个体空间? freesurfer如何将组模板投影到个体空间——如投影 Schaefer2018 到个体空间freesurfer的整理流程freesurfer的安装freesurfer对结构像分割流程及批处理代码fr…

git 常用命令之 git checkout

大家好&#xff0c;我是 17。 git checkout 是 git 中最重要最常用的命令之一&#xff0c;本文为大家详细解说一下。 恢复工作区 checkout 的用途之一是恢复工作区。 git checkout . checkout . 表示恢复工作区的所有更改,未跟踪的文件不会有变化。 恢复工作区的所有文件风…

硬件工程师入门基础知识(一)基础元器件认识(二)

硬件工程师入门基础知识 &#xff08;一&#xff09;基础元器件认识&#xff08;二&#xff09; tips&#xff1a;学习资料和数据来自《硬件工程师炼成之路》、百度百科、网上资料。 1.二极管 2.三极管 3.MOS管 4.IGBT 5.晶振 1.二极管 肖特基二极管和硅二极管的比较&#…

架构方法论

0.缘起最近在和同事以及相关领域的人沟通时&#xff0c;大家都在强调架构、架构图&#xff0c;于是兴起了一片关于架构的方法论介绍。本文对内容的组织按照顶层设计思路&#xff0c;先对架构本身进行剖析&#xff1a;什么是架构&#xff1f;为什么架构很重要&#xff1f;这些是…

大家心心念念的RocketMQ5.x入门手册来喽

1、前言 为了更好的拥抱云原生&#xff0c;RocketMQ5.x架构进行了大的重构&#xff0c;提出了存储与计算分离的设计架构&#xff0c;架构设计图如下所示&#xff1a; RocketMQ5.x提供了一套非常建议的消息发送、消费API&#xff0c;并统一放在Apache顶级开源项目rocketmq-clie…

T07 奥运排序问题

描述 按要求&#xff0c;给国家进行排名。 输入描述&#xff1a; 有多组数据。 第一行给出国家数N&#xff0c;要求排名的国家数M&#xff0c;国家号从0到N-1。 第二行开始的N行给定国家或地区的奥运金牌数&#xff0c;奖牌数&#xff0c;人口数&#xff08;百万&#xff09…

【c/c++】c语言的自增操作在不同编译器的差别

示例代码 代码如下&#xff1a; #include <stdio.h>#define product(x) ((x)*(x))int main(void) {int i 3, j, k;j product(i); // (i) * (i)k product(i); // (i) * (i)printf("%d %d\n", j, k); }执行结果 在Ubuntu18.04下通过GCC编译和执行的结果…

【在执行make geth报错解决方法】

在执行make geth报错解决方法问题详细描述&#xff1a;详细解决方法对根据报错提示信息对相关文件夹权限进行修改2、再次执行make geth 检查是否还报错问题详细描述&#xff1a; Ubuntu 版本&#xff1a;18.04问题&#xff1a;在编译运行以太坊源码执行make geth命令时报错&am…

*from . import _imaging as core : ImportError: DLL load failed: 找不到指定的模块

错误提示如上。为了解决这个问题&#xff0c;首先参考了解决 from . import _imag…模块。. 首先尝试了彻底卸载pillow&#xff1a;conda uninstall pillow &#xff1b; pip uninstall pillow 然后重装 pip install pillow&#xff0c;发现问题仍然没有解决。 并且尝试了windo…

湿敏电阻的原理,结构,分类与应用总结

🏡《总目录》 0,概述 湿敏电阻是指电阻值随着环境的湿度变化而变化的电阻,本文对其工作原理,结构,分类和应用场景进行总结。 1,工作原理 湿敏电阻是利用湿敏材料制成的,湿敏材料吸收空气中水分时,自身的阻值发生变化。 2,结构 如下图所示,市民电阻包括4个部分构成,…

SpringBoot+Vue实现智能物流管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7/8.0 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.3.9 浏…

【手写 Vuex 源码】第七篇 - Vuex 的模块安装

一&#xff0c;前言 上一篇&#xff0c;主要介绍了 Vuex 模块收集的实现&#xff0c;主要涉及以下几个点&#xff1a; Vuex 模块的概念&#xff1b;Vuex 模块和命名空间的使用&#xff1b;Vuex 模块收集的实现-构建“模块树”&#xff1b; 本篇&#xff0c;继续介绍 Vuex 模…

gradle命令

环境搭建 $ mkdir /opt/gradle $ unzip -d /opt/gradle gradle-7.6-bin.zip $ ls /opt/gradle/gradle-7.6 LICENSE NOTICE bin getting-started.html init.d lib media配置环境变量 $ export PATH=$PATH:/opt/gradle/gradle-7.6/bin检查配置是否ok gradle -v Android …

Elasticsearch7.8.0版本进阶——分布式集群(应对故障)

目录一、Elasticsearch集群的安装1.1、Elasticsearch集群的安装&#xff08;win10环境&#xff09;1.2、Elasticsearch集群的安装&#xff08;linux环境&#xff09;二、应对故障&#xff08;win10环境集群演示&#xff09;2.1、启动集群&#xff08;三个节点&#xff09;2.2、…

Lecture4 反向传播(Back Propagation)

目录 1 问题背景 1.1计算图&#xff08;Computational Graph&#xff09; 1.2 激活函数&#xff08;Activation Function&#xff09;引入 1.3 问题引入 2 反向传播&#xff08;Back Propagation&#xff09; 2.1 为什么要使用反向传播 2.2 前馈运算(Forward Propagation…

Allegro如何更改临时高亮的颜色设置操作指导

Allegro如何更改临时高亮的颜色设置操作指导 在用Allegro做PCB设计的时候,当移动或者高亮某个对象之前,会被临时高亮一个颜色,方便查看,类似下图 运行高亮命令的时候,器件被临时高亮成了白色 软件默认的是白色,如何更改成其它颜色? 具体操作如下 点击Display选择Color…