作者丨苏剑林
研究方向丨NLP,神经网络
个人主页丨kexue.fm
今天介绍一个有意思的 LSTM 变种:ON-LSTM,其中“ON”的全称是“Ordered Neurons”,即有序神经元,换句话说这种 LSTM 内部的神经元是经过特定排序的,从而能够表达更丰富的信息。
ON-LSTM 来自文章 Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks,顾名思义,将神经元经过特定排序是为了将层级结构(树结构)整合到 LSTM 中去,从而允许 LSTM 能自动学习到层级结构信息。
这篇论文还有另一个身份:ICLR 2019 的两篇最佳论文之一,这表明在神经网络中融合层级结构(而不是纯粹简单地全向链接)是很多学者共同感兴趣的课题。
笔者留意到 ON-LSTM 是因为机器之心的介绍,里边提到它出了提高了语言模型的效果之外,甚至还可以无监督地学习到句子的句法结构!正是这一点特性深深吸引了我,而它最近获得 ICLR 2019 最佳论文的认可,更是坚定了我要弄懂它的决心。认真研读、推导了差不多一星期之后,终于有点眉目了,遂写下此文。
在正式介绍 ON-LSTM 之后,我忍不住要先吐槽一下这篇文章实在是写得太差了,将一个明明很生动形象的设计,讲得异常晦涩难懂,其中的核心是和
的定义,文中几乎没有任何铺垫就贴了出来,也没有多少诠释,开始读了好几次仍然像天书一样。总之,文章写法实在不敢恭维。
基本原理
通常来说,在文章的前半部分,都是要先扯一些背景知识的。
LSTM
首先来回顾一下普通的 LSTM。用常见的记号,普通的 LSTM 写为:
如果熟悉了神经网络本身,其实这样的结构没有什么神秘的,就是三个单层全连接模型,输入是历史信息
和当前信息
,用 sigmoid 激活,因为 sigmoid 的结果在 0~1 之间,所以它们的含义可以诠释为“门(gate)”,分别称为遗忘门、输入门、输出门。不过我个人觉着 gate 这个名字是不够贴切的,“valve(阀门)”也许更贴切些。
有了门之后,被整合为 ĉt,然后通过 ∘ 运算(对应逐位相乘,有时候也记为 ⊗)与前面的“门”结合起来,来对
和 ĉt 进行加权求和。
下面是自己画的一个 LSTM 的示意图:
▲ LSTM运算流程示意图
语言和序信息
在常见的神经网络中,神经元通常都是无序的,比如遗忘门 ft 是一个向量,向量的各个元素的位置没有什么规律。如果把 LSTM 运算过程中涉及到的所有向量的位置按照同一方式重新打乱,权重的顺序也相应地打乱,然后输出结果可以只是原来向量的重新排序(考虑多层的情况下,甚至可以完全不变),信息量不变,不影响后续网络对它的使用。
换言之,LSTM 以及普通的神经网络都没有用到神经元的序信息,ON-LSTM 则试图把这些神经元排个序,并且用这个序来表示一些特定的结构,从而把神经元的序信息利用起来。
ON-LSTM 的思考对象是自然语言。一个自然句子通常能表示为一些层级结构,这些结构如果人为地抽象出来,就是我们所说的语法信息,而 ON-LSTM 希望能够模型在训练的过程中自然地学习到这种层级结构,并且训练完成后还能把它解析出来(可视化),这就利用到了前面说的神经元的序信息。
为了达到这个目标,我们需要有一个层级的概念,层级越低代表语言中颗粒度越小的结构,而层级越高则代表颗粒度越粗的结构,比如在中文句子中,“字”可以认为是最低层级的结构,词次之,再上面是词组、短语等。层级越高,颗粒度越粗,那么它在句子中的跨度就越大。
用原文的图示就是: