ON-LSTM介绍

2023-11-07

融入层级信息

在常见的神经网络中,神经元通常都是无序的,比如遗忘门 f t f_t ft是一个向量,向量的各个元素的位置没有什么规律。

ON-LSTM则试图把这些神经元排个序,并且用这个序来表示一些特定的结构,从而把神经元的序信息利用起来。比如说,c有6个维度,按顺序编号为0,1,2,3,4,5。接近0的维度存储高层级的语义,接近5的维度则存储低层次语义。

举个例子:

在这里插入图片描述

上图是一个句子的语法树结构,一共有5层,所以我们用一个5维的c来存储上述结构(姑且用一个值就能表示语义特征)。每一层都有其相应的语义信息,即便是语句层。比如说,你这句话是不是一条完整的语句,这是语句层可以提供的信息。

当我们输入The的时候。语句层的语义是“这不是一条完整的语句”。即便输入professor trains Jack后语义依然没有更新,直到接收到"."之后才更新为“这是一条完整的语句”。所以我们可以发现,高层级的语义通常更新较缓慢

最后一层是单词序列的语义层,显然大多数时候每输入一个新单词语义都会更新,因此低层级的语义更新频率较大

ON-LSTM正是依据高层级语义更新频率小,低层级的语义更新频率大这一特点,学习出了具有层次的记忆。

ON-LSTM首先引入了一个变量 d i d_i di,表示当前信息所包含语义的最高层次。比如说,当我们输入The的时候, d i d_i di为4,表示我们需要更新全部的历史信息。当输入professor的时候, d i d_i di为1,表示只需要更新历史信息的第0层和第1层。因为当前信息影响不到第2层及以上的语义,所以这些层不需要更新。

我们可能觉得疑惑的地方是,为什么输入The和输入professor,包含语义层级的差别这么大?原因就在于,我们评估当前信息所包含语义的最高层级不仅需要考虑当前信息,还需要考虑历史信息。其实这很合理,我们判断当前信息的层级的办法相当于是将当前信息与历史信息的每个层级的语义计算相关性,如果相关,那么说明当前信息就包含该层级,否则就不包含。开始输入The的时候,历史信息为空,我们默认都相关,所以 d i = 4 d_i=4 di=4。输入professor的时候,The和冠词都与professor相关,所以 d i = 1 d_i=1 di=1

除了 d i d_i di之外,ON-LSTM还引入了一个新的变量 d f d_f df,表示历史信息所包含语义的最低层级。

这是什么意思呢?我举个例子,trains这个词和Jack从单词本身来看并没有联系,真正将他们联系起来的是他们的语法角色。trains是一个动词,Jack是一个名词,二者正好组成一个动词短语。所以说,trains对Jack的影响没有单词层面的语义影响,而是在更高层次上。而这种情况是很常见的。这也就是说,历史信息可以把不需要的底层的信息遗忘掉,只需要保留高层语义即可。

ON-LSTM正是设计了一个符合上述过程的机制,通过变量 d f d_f df来确定哪些层级的语义是跟当前输入不相关的,从而把它遗忘掉。

分层次更新

更新机制

首先,根据当前历史信息和当前信息计算出 d i d_i di d f d_f df以及传统LSTM的三个门 f t , i t , o t f_t,i_t,o_t ft,it,ot和输入 u t u_t ut

如果 d i ≥ d f d_i\ge d_f didf,表示当前信息包含语义最高层级高于历史信息包含语义最低层级,对于高于 d f d_f df的部分,保留历史信息不用更新,对于低于 d i d_i di的部分,由于历史信息没有意义了,所以直接用当前信息相应层级覆盖掉,而对于 d f d_f df d i d_i di之间的交集部分,表示既有历史信息,也有当前输入,所以按照原始更新方式进行,即融合历史信息与当前信息作为新的历史信息。

如果 d i < d f d_i< d_f di<df,对于高于 d f d_f df的部分,保留历史信息不用更新,对于低于 d i d_i di的部分,用当前信息相应层级覆盖掉,对于 d i d_i di d f d_f df的部分,因为既没有信息输入,原来的历史信息又没用,所以就置零,这样当有新信息进来的时候就会默认相关,存储进新的历史信息。而如果不做处理的话这部分空间可能永远都得不到更新了。

公式表示

我们要如何用公式来表示上面的过程?

如果直接预测 d i d_i di d f d_f df两个整数,不太容易限定范围。所以我们用预测一个长度与c相同的one-hot张量来代表 d i d_i di d f d_f df

比如 d i = 3 d_i=3 di=3 d f = 1 d_f=1 df=1就相当于
d i = [ 0 , 1 , 0 , 0 , 0 ] d f = [ 0 , 0 , 0 , 1 , 0 ] d_i = [0,1,0,0,0] \\ d_f = [0,0,0,1,0] di=[0,1,0,0,0]df=[0,0,0,1,0]
当前信息的层级区域和历史信息的层级区域就可以表示为
i ~ t = c u m s u m → ⁡ d i = [ 0 , 1 , 1 , 1 , 1 ] f ~ t = c u m s u m ← ⁡ d f = [ 1 , 1 , 1 , 1 , 0 ] \begin{aligned} \tilde i_t &= \operatorname{\overrightarrow{cumsum}}d_i = [0,1,1,1,1] \\ \tilde f_t &= \operatorname{\overleftarrow{cumsum}}d_f = [1,1,1,1,0] \end{aligned} i~tf~t=cumsum di=[0,1,1,1,1]=cumsum df=[1,1,1,1,0]
当前信息和历史信息的层级交集可表示为
w t = i ~ t ∗ f ~ t = [ 0 , 1 , 1 , 1 , 0 ] w_t = \tilde i_t * \tilde f_t = [0,1,1,1,0] wt=i~tf~t=[0,1,1,1,0]
当前信息除去交集部分表示为
i ~ t − w t = [ 0 , 0 , 0 , 0 , 1 ] \tilde i_t-w_t = [0,0,0,0,1] i~twt=[0,0,0,0,1]
历史信息除去交集部分表示为
f ~ t − w t = [ 1 , 0 , 0 , 0 , 0 ] \tilde f_t-w_t = [1,0,0,0,0] f~twt=[1,0,0,0,0]
我们会发现上述表示跟 d i d_i di d f d_f df的大小无关,这里就不赘述了。

这样一来,ON-LSTM的c的更新式为:
c t = w t ⋅ ( f t ∘ c t − 1 + i t ∘ u t ) + ( f ~ t − w t ) ⋅ c t − 1 + ( i ~ t − w t ) ⋅ u t c_t = w_t \cdot (f_t \circ c_{t-1}+i_t \circ u_t) + (\tilde f_t-w_t)\cdot c_{t-1}+(\tilde i_t-w_t)\cdot u_t ct=wt(ftct1+itut)+(f~twt)ct1+(i~twt)ut

软化

现在的问题之一是 d i d_i di d f d_f df都是one-hot,不方便求梯度,所以我们用softmax软化
p i = softmax ⁡ ( W i ~ x t + U i ~ h t − 1 + b i ~ ) p f = softmax ⁡ ( W f ~ x t + U f ~ h t − 1 + b f ~ ) \begin{aligned} p_i &= \operatorname{softmax}\left(W_{\tilde{i}} x_{t}+U_{\tilde{i}} h_{t-1}+b_{\tilde{i}}\right) \\ p_f &= \operatorname{softmax}\left(W_{\tilde{f}} x_{t}+U_{\tilde{f}} h_{t-1}+b_{\tilde{f}}\right) \\ \end{aligned} pipf=softmax(Wi~xt+Ui~ht1+bi~)=softmax(Wf~xt+Uf~ht1+bf~)
然后我们定义 cummax ⁡ = cumsum ⁡ ( softmax ⁡ ) \operatorname{cummax} = \operatorname{cumsum}(\operatorname{softmax}) cummax=cumsum(softmax),于是有
i ~ t = c u m m a x → ⁡ ( W i ~ x t + U i ~ h t − 1 + b i ~ ) = [ 0 , 1 , 1 , 1 , 1 ] f ~ t = c u m m a x ← ⁡ ( W f ~ x t + U f ~ h t − 1 + b f ~ ) = [ 1 , 1 , 1 , 1 , 0 ] \begin{aligned} \tilde i_t &= \operatorname{\overrightarrow{cummax}}\left(W_{\tilde{i}} x_{t}+U_{\tilde{i}} h_{t-1}+b_{\tilde{i}}\right) = [0,1,1,1,1] \\ \tilde f_t &= \operatorname{\overleftarrow{cummax}}\left(W_{\tilde{f}} x_{t}+U_{\tilde{f}} h_{t-1}+b_{\tilde{f}}\right) = [1,1,1,1,0] \end{aligned} i~tf~t=cummax (Wi~xt+Ui~ht1+bi~)=[0,1,1,1,1]=cummax (Wf~xt+Uf~ht1+bf~)=[1,1,1,1,0]
其它公式保持不变,这样一来,ON-LSTM的全部更新式如下
f t = σ ( W f x t + U f h t − 1 + b f ) i t = σ ( W i x t + U i h t − 1 + b i ) o t = σ ( W o x t + U o h t − 1 + b o ) u t = tanh ⁡ ( W c x t + U c h t − 1 + b c ) f ~ t = c u m m a x ← ⁡ ( W f ~ x t + U f ~ h t − 1 + b f ~ ) i ~ t = c u m m a x → ⁡ ( W i ~ x t + U i ~ h t − 1 + b i ~ ) ω t = f ~ t ∘ i ~ t c t = ω t ∘ ( f t ∘ c t − 1 + i t ∘ u t ) + ( f ~ t − ω t ) ∘ c t − 1 + ( i ~ t − ω t ) ∘ u t h t = o t ∘ tanh ⁡ ( c t ) \begin{aligned} f_{t} &=\sigma\left(W_{f} x_{t}+U_{f} h_{t-1}+b_{f}\right) \\ i_{t} &=\sigma\left(W_{i} x_{t}+U_{i} h_{t-1}+b_{i}\right) \\ o_{t} &=\sigma\left(W_{o} x_{t}+U_{o} h_{t-1}+b_{o}\right) \\ u_{t} &=\tanh \left(W_{c} x_{t}+U_{c} h_{t-1}+b_{c}\right) \\ \tilde{f}_{t} &=\operatorname{\overleftarrow {cummax}}\left(W_{\tilde{f}} x_{t}+U_{\tilde{f}} h_{t-1}+b_{\tilde{f}}\right) \\ \tilde{i}_{t} &=\operatorname{\overrightarrow {cummax}}\left(W_{\tilde{i}} x_{t}+U_{\tilde{i}} h_{t-1}+b_{\tilde{i}}\right) \\ \omega_{t} &=\tilde{f}_{t} \circ \tilde{i}_{t} \\ c_{t} &=\omega_{t} \circ\left(f_{t} \circ c_{t-1}+i_{t} \circ u_{t}\right)+\left(\tilde{f}_{t}-\omega_{t}\right) \circ c_{t-1}+\left(\tilde{i}_{t}-\omega_{t}\right) \circ u_{t} \\ h_{t} &=o_{t} \circ \tanh \left(c_{t}\right) \end{aligned} ftitotutf~ti~tωtctht=σ(Wfxt+Ufht1+bf)=σ(Wixt+Uiht1+bi)=σ(Woxt+Uoht1+bo)=tanh(Wcxt+Ucht1+bc)=cummax (Wf~xt+Uf~ht1+bf~)=cummax (Wi~xt+Ui~ht1+bi~)=f~ti~t=ωt(ftct1+itut)+(f~tωt)ct1+(i~tωt)ut=ottanh(ct)

上面的关于 f ~ t \tilde f_t f~t的计算跟苏剑林大神保持一致,原论文是

f ~ t = 1 − cummax ⁡ ( W f ~ x t + U f ~ h t − 1 + b f ~ ) \begin{aligned} \tilde f_t &= 1-\operatorname{cummax}\left(W_{\tilde{f}} x_{t}+U_{\tilde{f}} h_{t-1}+b_{\tilde{f}}\right) \end{aligned} f~t=1cummax(Wf~xt+Uf~ht1+bf~)

个人认为原论文是有一点不合理的,假如我们要表示历史信息的最低层级是第一层,那么就要求 f ~ t \tilde f_t f~t都接近1,也就是说 cummax ⁡ ( . . . ) \operatorname{cummax}(...) cummax(...)需要全接近0,也就是说 softmax(...) ⁡ \operatorname{softmax(...)} softmax(...)需要全接近0,而且所有维度的值加起来还要接近0。这显然是不可能的,因为最左维度值一定是1。

也就是说原论文的公式无法表示历史信息包含全部层级的情况,当然应用在实际上可能影响不大。

维度匹配

现在还有第二个问题是通常我们的层级是非常少的,一般4、5层可能就差不多了,而c的维度通常是非常大的,这就导致 f ~ t ⋅ c t − 1 \tilde f_t\cdot c_{t-1} f~tct1无法直接计算。那要如何处理呢?难道我们就把LSTM的hidden_size设为4、5层?一个值能表示这么复杂的语义吗?显然是不能的。

所以ON-LSTM的做法是这样的,例如历史信息有8个维度,共划分4个层级,那么 f ~ t \tilde f_t f~t就是一个4维的张量,假如是[0,1,0,0]。我们把它的每个神经元重复2次,即可得到[0,0,1,1,0,0,0,0],然后用这个新的张量去更新历史信息c。这就相当于我们将整个c的8个维度分成了4份,每一份包含两个维度,我们用每两个维度建模一个层级语义,而这两个维度我们用 f ~ t \tilde f_t f~t的相应层级来控制。

无监督导出句法结构

ON-LSTM导出句法树是使用 d f d_f df来导出的,它的主要思想是说,历史信息最低层级发生变化的时候,就表示这是一个新的语法结构的开始,并且历史信息最低层级越高表示新的语法结构的层次越高

在这里插入图片描述

这里借用蝈蝈的例子,根据历史层级的变化,x4的层级最高,所以x4处是一个较高层次的新的语法结构的开始。所以可以分成两部分
在这里插入图片描述

然后对x1,x2,x3和x4,x5可以做同样的处理,最终得到

在这里插入图片描述

然后我们要如何根据 f ~ t \tilde f_t f~t获得 d f d_f df呢?
在这里插入图片描述
这里本来 d f = a r g m a x k   p f ( k ) d_f = \underset{k}{argmax}\ p_f(k) df=kargmax pf(k),上面的公式是argmax软化后的式子,具体可以看苏剑林的博客

但是我在蝈蝈的博客下面评论了一个问题,是我没搞懂的一个地方。就是在输入一句话的第一个词的时候,这个时候没有历史信息,按照博客中说的,把历史信息辐射范围设为0,那么随意输入一串序列,第一个词的历史信息最低层级都为0,那么要如何参与句法树的导出呢?

参考文献

蝈蝈.《ON-LSTM:能表示语言层次的LSTM》. https://zhuanlan.zhihu.com/p/69314959

苏剑林. (May. 28, 2019). 《ON-LSTM:用有序神经元表达层次结构 》. https://spaces.ac.cn/archives/6621

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ON-LSTM介绍 的相关文章

随机推荐

  • C++ 中有符号数转化为无符号数

    1 背景知识 我的计算中 char 类型占 8 个比特位 unsigned char 类型能表示的数的范围为 0 2 8 1 即 0 255 共 256 个数 int 类型占 32 个比特位 那么 unsigned 类型所能表示的数的范围为
  • STM32:配置定时器为PWM输出模式以及编码器接口模式

    一 STM32的高级定时器TIM8配置为PWM输出模式 最近在工程项目中 需要用stm32的定时器 以高级定时器TIM8为例 产生两路PWM输出 作为电机的pwm输入 方法如下 初始化电机控制所需IO口 void Motor Init vo
  • Linux——(管道练习)C实现父子进程通信、兄弟进程通信、多个读写端操作管道及管道缓冲区大小、fifo实现非血缘间进程通信

    一 父子进程通信 lswc l 父进程ls写到管道 子进程wc管道的内容 父进程创建管道 拥有读写两端 父进程fork子进程 父进程要将原本输出到屏幕上的内容输出到管道中 用dup实现 然后execlp去进行ls操作 子进程同理 将原本从标
  • 毕业设计-基于轨道的扣件状态检测- YOLO

    目录 前言 课题背景和意义 实现技术思路 一 YOLO 网络结构 二 模型建立 三 实验结果 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年
  • BUG收割机之解决eureka的Application显示为UNKNOWN

    BUG收割机之解决eureka的Application显示为UNKNOWN 初学spring cloud的小伙伴们 肯定会遇到eureka服务的application显示为UNKNOWN的情况 如果不幸和下图中的BUG类似 那么就请继续阅读
  • Metasploit超详细安装及使用教程(图文版)

    通过本篇文章 我们将会学习以下内容 1 在Windows上安装Metasploit 2 在Linux和MacOS上安装Metasploit 3 在Kali Linux中使用 Metasploit 4 升级Kali Linux 5 使用虚拟化
  • Python Pandas –数据输入和输出

    Pandas as a library can read and write data to a wide variety of sources In this article we would concentrate on the fol
  • 【衍射光栅】用于Matlab的交互式衍射光栅模型研究

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 干涉和衍射的交互式仿真 2 2 衍射光栅光谱 2 3 一阶衍射的扩展视图 2 4 用
  • Linux修改文件句柄数及vm.max_map_count、stack size

    一 修改文件句柄数 1 1 查看当前大小 ulimit a 1 2 临时修改 ulimit n 4096 1 3 永久修改 vim etc security limits conf soft nofile 65536 hard nofile
  • Python爬虫完整代码,一人一份,随便拿~

    对于新手做Python爬虫来说是有点难处的 前期练习的时候可以直接套用模板 这样省时省力还很方便 使用Python爬取某网站的相关数据 并保存到同目录下Excel 直接上代码 import re import urllib error im
  • 达梦数据库-锁表

    查询锁表语句 select from v sessions where trx id in select trx id from V LOCK and user name 用户名称 order by create time desc 关闭会
  • Aspose_Diagram_ for Java 2020.X.最先进的全新版

    Java 20 4的Aspose Diagram Java的Aspose Diagram是强大的Microsoft Visio文档处理API 它提供了常见的功能 例如创建 解析和转换本机Visio格式 并支持一些常用的图像和固定布局格式 应
  • 机器学习K-均值——nonzero(clusterAssment[冒号,0].A==cent

    先准备测试数据 如下 上面都是准备数据 下面才是一步步的告诉你怎么生成我们要的数据 矩阵 A是把矩阵转换为数组numpy nonzero 返回哪些元素不是False或者0 第一个array描述行 第二个array描述列
  • 敏捷虽好勿盲从

    原文作者 MARK LEVISON 很多公司正在往陷阱里掉 常常表现为 我们的合作伙伴 或竞争对手 采用了敏捷 因此我们也需要采用敏捷 如果没有正当的理由就向敏捷转型 组织将会受到伤害 就这么简单 多说无益 在20世纪80 90年代 制造商
  • 2022-05-08 Unity核心5——Tilemap

    文章目录 一 瓦片资源 二 瓦片调色板窗口 三 瓦片地图关键脚本和碰撞器 四 导入瓦片官方拓展包 五 新增瓦片类型 六 新增笔刷类型 七 代码管理 Tilemap Tilemap 一般称之为瓦片地图或者平铺地图 是 Unity2017 中新
  • java.lang.RuntimeException: com.mysql.cj.exceptions.CJException: Unknown database ‘test‘

    后端小白在进行IDEA数据库连接的时候会进行以下报错 这是没有mysql驱动的问题 填错了就会报以下的错误哦 解决方法 在URL后面添加 serverTimezone GMT
  • java读取zip/jar包中的文件

    1 jar vs zip jar 文件和 zip 文件都是归档文件 并且都经过压缩 事实上 jar 文件使用与 zip 文件相同的存档和压缩技术 所以 jar 文件实际上是一种特定类型的 zip 文件 JAR 文件本质上是一个包含可选 ME
  • SWUST OJ#77计算员工周工资

    SWUST OJ77 题目描述 如果时间小于0或大于一周的总时间 输出 input is wrong 若雇员周工作小时超过40 小时 则超过部分按原工资的1 5 倍的加班工资来计算 若雇员每周工作小时超过60 小时 则超过60 的部分按原工
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • ON-LSTM介绍

    融入层级信息 在常见的神经网络中 神经元通常都是无序的 比如遗忘门 f t f t ft 是一个向量 向量的各个元素的位置没有什么规律 ON LSTM则试图把这些神经元排个序 并且用这个序来表示一些特定的结构 从而把神经元的序信息利用起来