lstm原始论文_有序的神经元——ON-LSTM模型浅析

f57bf20834408ff6f2d8dccc312cced4.png

尽管最近出现的Transformer系列的模型在nlp领域内很流行,但RNN仍然有着重要的地位。本文介绍的模型来自于ICLR 2019的最佳论文之一,它针对自然语言具有语法分层的特点,对原有的LSTM模型的结构做出了改进,使得新模型不仅具有更好的性能,还能够无监督地从语料文本中学习到句子的语法结构。

LSTM与ON-LSTM

先介绍一下该模型的出发点,自然语言虽然从表面来看呈现出来的是序列形式,但其实句子的结构并不是连续的序列,而是树状结构,如下图所示。因此如果我们能够设计一种可以考虑到句子的语法结构的模型,那么就有可能在nlp任务中表现的更好。

569a1df7e73bfe761b5350ab74b017c0.png

先来看原始的LSTM模型,如下所示,其中

分别是遗忘门和输入门,可以看出它们通过对于
的更新来实现对于历史信息
和当前输入信息
的记忆与忘记。

f7c5d0472f73e0e7719668f6448c8188.png
LSTM流程图(来自参考资料[2])

在原始LSTM中,更新的方式是通过遗忘门和输入门来完成的,即

。而ON-LSTM做出改进的地方就在这里,它通过语法层次来控制哪些信息需要记忆或忘记,对于语法层次较高的内容(语法树中更靠近根节点的内容),它们影响的范围更大,对于这些信息,模型应该保留较长的时间;而对于层次较低的,它们对之后内容影响较小,模型应该尽快忘记它们,以免这些信息干扰后面的过程。

有序的神经元

为了达到这样的目的,首先我们就需要对信息进行语法分层,对神经元按照语法层次进行排序,语法层次较高的信息储存在上面的神经元中,较低的则储存在下面的神经元,然后根据层次的不同,采用不同的更新方式。如下图所示,对于句子中较高层次的信息S,则位于cell states的上面的维度,这类信息的更新频率不应该很快;而对于底层信息如N和V,它们位于cell states的下部,这些信息应该较快地进行更新。这样,我们就能通过cell stats的维度的高低来将信息中不同语法层次的内容分开,从而实现了有序的神经元。

e945514a802c47a6718009eb5de32d82.png

完成了对cell states的排序之后,我们接下来就是划分区间,以便模型按照区间的不同实现不同的更新方式。为了实现区间的划分,模型用到了两个整数

,它们分别用来表示历史信息的最低层次和当前信息的最高层次,如下图所示。

c7edcf69a6fe63b3beae796b90876af6.png
区间划分(来自参考资料[3])

对于上面的区间,有如下的更新规则:

  • 时,两区间有交叠。对于交叠的部分,采用原始LSTM的方式进行更新;对于高于
    的部分,
    只保留原来的历史信息;对于低于
    的部分,
    只保留当前输入的信息。
  • 时,两区间没有交叠。对于没有交叠的部分,直接设其为0;而对于大于
    和小于
    的部分,分别只保留历史信息和当前输入信息。

8132a592a952fbfc33e54aa0a2df0b9c.png
更新规则(来自参考资料[3])

可以看出,其实模型在这里认为高层次的语法信息主要是来自于历史信息,而低层次的主要来自当前输入信息,而这也比较符合人们的直观印象,对于一个新的输入,它对于语法信息的影响往往局限于一个较低的层次,高层次的信息(如句子或者短语信息)仍然来自于历史信息,只有当一个句子或者短语完结的时候,历史信息的影响变小,这时新的输入才有可能影响较高语法层次的信息。而这样也就使得高语法层次的信息的更新频率较低,大多时候是保持不变,而低语法层次的信息则随着当前的输入在一直变化。

上面是区间划分的思想,而具体的实现过程如下:

定义向量

定义函数

可以得到

它们表示了历史信息和当前信息的影响范围,可以看作窗口函数,也就起到了区间划分的作用。这两个向量需要通过模型学习得到,但是如果直接去学习

这样的one hot向量,会导致更新过程不可导,这就会比较麻烦,因此我们对它做一些
“软化”,用
函数来表示one hot向量,输入历史信息
和当前输入信息
,通过神经网络来对
进行预测,则有

得到

之后,就可以按照上面的思想进行区间划分,具体形式如下:

其中

对上式简单分析一下,

主要由三个区间组成,如下图所示:

d74d4790e22d77d8765f9a2394b177be.png
区间分布

与此类似,这样我们就实现了对于
的更新,把公式放到一起,则整个ON-LSTM的更新公式为:

其流程图如下:

da8643464d9dbf9de001bcf1fce16012.png
ON-LSTM流程图,来自参考资料[2]

最后补充一下,通常隐层神经元的数目都比较大,而实际中语法的层数远远达不到这个数字,因此对于

而言,其实不需要那么多的维数,这样会导致需要学习的参数量过多,但是
要求它们的维数必须这么大,因此我们可以构造一个维数为
的向量,其中D为隐层神经元的维数,然后在将其扩充为D维向量,例如D=6,c=3,先构造一个向量
,然后将其扩充为

无监督提取语法结构

上面就是ON-LSTM模型的全部内容,不过该模型除了在性能表现上更优以外,还有一个很有意思的特性,那就是能够无监督地提取出句子的语法结构,其基本思想如下:

在时间步t,可以得到历史信息的语法层次

,我们可以认为这个数字的大小代表了历史信息对当前输入影响的大小,如果
较小,则时间步t之前的历史信息对当前影响较小,可以认为出现了一个新的语法结构。对于所有的时间步,则可以得到一个序列
,然后采用下面的贪心算法来提取出语法结构:对于然后找出层级序列中最大值所在的下标,比如k,那么就将输入序列分区为
。然后对子序列
重复上述步骤,直到每个子序列长度为1。

其中

的计算方式如下:

下图是一些语法结构提取的实验结果对比,其中左侧是模型结果,右侧是人类专家的结果

70e4a94fb01f9a29389c3a717b050ffb.png

总结

该ON-LSTM模型从语法结构的角度出发,根据语法层次对cell states进行有序排列,再按照语法层次的不同实行不同的更新规则,从而实现对于较高语法层次信息的保留,这样对于语言模型等任务无疑是很有利的。另外,利用该模型还能够较好地从句子中无监督地提取出语法结构,而这也是该模型的一大亮点。

参考资料

[1] ORDERED NEURONS: INTEGRATING TREE STRUCTURES INTO RECURRENT NEURAL NETWORKS

[2] 苏剑林. (2019, May 28). 《ON-LSTM:用有序神经元表达层次结构 》[Blog post]. Retrieved from https://kexue.fm/archives/6621

[3] ON-LSTM:能表示语言层次的LSTM

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

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

相关文章

malloc函数详解

一、原型&#xff1a;extern void *malloc(unsigned int num_bytes); 头文件&#xff1a;#include <malloc.h> 或 #include <alloc.h> (注意&#xff1a;alloc.h 与 malloc.h 的内容是完全一致的。) 功能&#xff1a;分配长度为num_bytes字节的内存块 说明&#xf…

c++ 航空管理系统_浅谈航站楼能源管理系统的设计与应用

蒋超萍江苏安科瑞电器制造有限公司 江苏江阴 214400 【摘要】根据航站楼的特点&#xff0c;从航站楼能源消耗现状、能源管理系统的功能、系统架构、子系统以及能源的优化调度方案五个方面介绍了航站楼能源管理系统的设计&#xff0c;并对节能效果进行了预测。关键词&#xff1a…

mysql 线性表_线性表之顺序存储,基本操作

/*九大基本操作(不同的存储结构实现的代码不同)此处用一维数组的动态分配&#xff1a;InitList(&L);//初始化表&#xff0c;Length(L);LocateElem(L,e);GetElem(L,i);ListInsert(&L,i,e);ListDelete(&L,i,&e);PrintList(L);Empty(L);DestoryList(&L);*//*静…

mac python安装太慢_【已解决】Mac中给pip3添加代理以提升下载python包的速度

折腾&#xff1a;【未解决】Mac中Python 3.7安装TensorFlow期间&#xff0c;用&#xff1a;pip3 install tensorflow期间会去从下载python包此处连接files.pythonhosted.org的速度很慢。而自己有代理可用。所以想办法去给pip3或pip用上代理&#xff0c;加速下载mac pip3 use pr…

集合数据源

集合数据源主要包括ArrayList,Hashtabel,DataView,DataReader转载于:https://www.cnblogs.com/handsomer/p/4150400.html

LeetCode 1785. 构成特定和需要添加的最少元素(贪心)

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums &#xff0c;和两个整数 limit 与 goal 。 数组 nums 有一条重要属性&#xff1a;abs(nums[i]) < limit 。 返回使数组元素总和等于 goal 所需要向数组中添加的 最少元素数量 &#xff0c;添加元素 不应改变 数组中 …

insert和update 锁等待_黑龙F5智感双全智能锁全球首发,掀起惊艳风潮

2020备受瞩目重磅新品 —— 黑龙F5智感双芯智能门锁&#xff0c;正式官宣&#xff0c;革新行业的智感解锁交互&#xff0c;强大的双芯片双智控&#xff0c;再次掀起惊艳风潮。双芯片科技感交互&#xff0c;领行业新风向黑龙F5智能锁前沿性地配备双芯片&#xff0c;以双核分别掌…

java喷泉编码_好程序员Java教程分享使用JS实现简单喷泉效果

原标题&#xff1a;好程序员Java教程分享使用JS实现简单喷泉效果好程序员Java教程分享使用JS实现简单喷泉效果&#xff0c;最近&#xff0c;在教学生使用JS的基本操作&#xff0c;为了练习JS的基本作用&#xff0c;特地写了一个喷泉效果&#xff0c;代码如下&#xff1a;页面代…

python 类继承 父类初始化_python之子类继承父类时进行初始化的一些问题

直接看代码&#xff1a;classPerson:def __init__(self):self.name "jack"classStudent(Person):def __init__(self):self.school "一中"stuStudent()print("学生的姓名是:",stu.name)此时&#xff0c;程序是不能正常运行的&#xff0c;运行之后…

『WPF』实现拖动文件到窗体(控件)

前言 实现从窗口外部拖文件到窗口内部并自动捕获文件地址。 第一步 开启属性 启用底层Window的AllowDrop属性&#xff0c;添加Drop事件。 Drop事件&#xff1a;当你拖动文件到对应控件后&#xff0c;松开触发。 除Drop事件外&#xff0c;我们还可以使用DragEnter、DragOver、Dr…

怎么更改苹果账户名称_番茄todo小组件背景怎么改 苹果番茄todo小组件背景更改方法介绍...

番茄todo小组件背景怎么改&#xff0c;这也是大家会用到的一款倒计时APP&#xff0c;那么用户们应该怎么更改小组件的背景图片呢&#xff0c;可能还有些人不知道更改的方法。所以这里就为大家带来了具体的步骤!番茄todo小组件背景怎么改1.在打开APP后&#xff0c;如没有待办事项…

LeetCode 1786. 从第一个节点出发到最后一个节点的受限路径数(迪杰斯特拉 + 拓扑排序)

文章目录1. 题目2. 解题1. 题目 现有一个加权无向连通图。 给你一个正整数 n &#xff0c;表示图中有 n 个节点&#xff0c;并按从 1 到 n 给节点编号&#xff1b;另给你一个数组 edges &#xff0c;其中每个 edges[i] [ui, vi, weighti] 表示存在一条位于节点 ui 和 vi 之间…

java选择题多选题系统小程序_单选题与多选题判断得分(自动考试小程序,入门级)...

【单选题与多选题判断得分】【核心代码】using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace 自动…

用python开启相机_如何用Python打开realsenseD435相机并获取相机参数

如何用Python打开realsenseD435相机import pyrealsense2 as rsimport numpy as npimport cv2if __name__ "__main__":# Configure depth and color streamspipeline rs.pipeline()config rs.config()config.enable_device_from_file("666.bag")#这是打开…

Sicily-1063

一&#xff0e;题意 一个员工是另外一个员工的老板必须满足的条件是作为老板的员工的薪水salary必须大于这个员工&#xff0c;而且作为老板的员工的身高height要大于等于这个员工。首先按照薪水的多少从小到大进行排序&#xff0c;然后找每一个员工的直属老板。注意老板的下属的…

流畅的Python 1. Python数据模型(特殊方法 __func__())

文章目录1. __getitem__()、__len__() 方法2. 特殊方法1. __getitem__()、__len__() 方法 举一个扑克牌的例子 import collectionsCard collections.namedtuple(Card_name, [rank, suit]) print(Card.__doc__) # Card_name(rank, suit)class FrenchDeck:ranks [str(n) for …

diskfileitemfactory 需要的包_浅析电动汽车电池包低压线束设计及制造

点击上方右侧“EDC电驱未来”可订阅哦&#xff01;般的电池包低压线束承载着模组通信、模组采样和电池管理等功能。电池包低压线束一般分为模组通信线束、模组采样线束、BMS线束等。这里结合实际工作中的经历和遇到的困扰&#xff0c;主要分析和探讨SUV纯电动汽车电池包低压线束…

[顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功)...

[顶]ORACLE PL/SQL编程详解之二&#xff1a;PL/SQL块结构和组成元素(为山九仞&#xff0c;岂一日之功) 原文:[顶]ORACLE PL/SQL编程详解之二&#xff1a;PL/SQL块结构和组成元素(为山九仞&#xff0c;岂一日之功)[顶]ORACLE PL/SQL编程详解之二&#xff1a; PL/SQL块结构和组成…

xgboost实例_XGBoost超详细推导,终于有人讲明白了!

- XGB中树结点分裂的依据是什么&#xff1f;- 如何计算树节点的权值&#xff1f;- 为防止过拟合&#xff0c;XGB做了哪些改进&#xff1f;相信看到这篇文章的各位对XGBoost都不陌生&#xff0c;的确&#xff0c;XGBoost不仅是各大数据科学比赛的必杀武器&#xff0c;在实际工作…

修改dts后重编译_「正点原子FPGA连载」第二十章另一种方式编译ZYNQ镜像

1)摘自【正点原子】领航者 ZYNQ 之linux驱动开发指南2)实验平台&#xff1a;正点原子领航者ZYNQ开发板3)平台购买地址&#xff1a;https://item.taobao.com/item.htm?&id6061601087614)全套实验源码手册视频下载:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.ht…