atbjss 2017-04-26
在自然语言处理的很多子领域,循环神经网络都表现出了很大的潜力,这些子领域涵盖文档分类、机器翻译和自动问答等等。尽管潜力巨大,但许多循环模型都必须要逐词阅读整个文本,这会使得长文档的处理速度缓慢。比如说,要使用一个循环网络阅读一本书并回答有关于其的问题是很困难的。在这篇论文中,我们提出了一种阅读文本的方法,其可以在有需要的时候跳过不相关的信息。该方法的底层模型是一个循环网络,其可以在阅读了少量输入文本的词之后了解需要跳过多少内容。我们使用一种标准的策略梯度方法训练了该模型,使其可以做出离散的跳跃决策。在不同的四种任务(包括数值预测、情感分析、新闻文章分类和自动问答)的基准上,我们提出的一种带有跳过(jumping)的修改过的 LSTM 的速度可以达到标准序贯 LSTM(sequential LSTM)的 6 倍,而且同时还能维持同样的准确度或甚至达到更好的准确度。
方法
在这一节,我们介绍了我们提出的模型 LSTM-Jump。我们首先描述了其主要结构,后面介绍了评估该模型部分参数由不可微分性(nondifferentiability)而造成的难点。为了解决这个问题,我们借助了一种强化学习形式并采用了一种策略梯度方法。
模型概述
我们提出的模型的主要架构如图 1 所示,该模型基于一个 LSTM 循环神经网络。在训练之前,首先要选择允许的 jump 的数量 K、每两次 jump 之间读取的 token 的数量 R 和最大的 jump 大小 K。对于该模型,K 是一个固定的参数,而 N 和 R 是可以在训练和测试中变化的超参数。另外,在这篇论文中,我们会使用 d1:p 来表示一个序列 d1, d2, ..., dp
图 1:我们提出的用于处理文本文档的模型的一个合成样本。在这个例子中,jump K 的最大大小为 5,一次 jump 之前读取的 token R 为 2,允许的 jump 数量为 10. 绿色的 softmax 用于 jump 预测。处理过程终止的情况有三种:a) 这个 softmax 预测到了一个 0、b) jump 次数超过了 N、c) 该网络处理完了最后一个 token。图中仅给出了 a) 的情况。
接下来,我们详细讨论该模型在处理文本时是如何工作的。给定一个训练样本 x1:T,该循环网络将读取第一个 R token x1:R 的嵌入,并输出隐藏状态(hidden state)。然后该状态会被用于计算 jumping softmax,其确定了 1 到 K jump 步骤上的分布。然后该模型会从这个分布采样一个 jump 步骤,其会被用于确定下一个被读入该模型的 token。设 κ 为被采样的值,那么下一个起始 token 是 xR+κ。这个过程会持续,直到遇到下列情况:
a) 这个 jump softmax 采样了一个 0
b) jump 次数超过了 N
c) 该网络处理完了最后一个 token xT
在停止之后,作为输出,最后的隐藏状态将会进一步被用于预测想得到的目标。怎样利用这个隐藏状态取决于当前特定的任务。比如说,对于 3.1、3.1 和 3.3 中的分类问题,其可以直接被用于产生一个用于分类的 softmax;而在 3.4 中的问答问题上,其可被用于计算与候选答案之间的关联,以便选择出其中最好的一个。图 1 给出的例子是 K = 5、R = 2、N = 10,终止于条件 a)。
以上是CMU与谷歌的最新研究论文,而MetaMind就曾深度解读NLP研究:如何让机器学习跳读,下面是MetaMind所做的描述。
学习何时跳读何时阅读
知道什么时候在两个不同模型之间转换还不够,因为我们要构建一个更通用的系统,学习在所有不同模型之间转换。这样的系统将帮助我们处理更复杂的行为。
在监督学习中当阅读完胜于跳读时,我们可以学习吗?
LSTM 自左到右地「阅读」我们,每一步都存储一个记忆,而「跳读」则使用 BoW 模型。在来自词袋模型上的概率操作时,我们基于不变量做决策,这个不变量是指当词袋系统遭到质疑时,更强大的 LSTM 工作地更好。但是情况总是如此吗?
当词袋和 LSTM 关于一个句子是正确或错误的时候的「混淆矩阵」(confusion matrix)。相似于来自之前的词袋和 LSTM 之间的混淆 T-SNE 图。
事实上,结果证明这种情况只适用于 12% 的句子,而 6% 的句子中,词袋和 LSTM 都错了。在这种情况下,我们没有理由再运行 LSTM,而只使用词袋以节省时间。
学习跳读,配置
当 BoW 遭受质疑时我们并不总是应该使用 LSTM。当 LSTM 也犯错并且我们要保留珍贵的计算资源时,我们可以使词袋模型理解吗?
让我们再一次看看 T-SNE 图,但是现在再加上 BoW 和 LSTM 之间的混淆矩阵图。我们希望找到混淆矩阵不同元素之间的关系,尤其是当 BoW 错误时。
从对比图中,我们发现当 BoW 是正确的,并遭受怀疑时,我们很容易判决出来。然而,当 LSTM 可能是对或错时,BoW 与 LSTM 之间并没有明确的关系。
我们能学习这种关系吗?
另外,因为概率策略依赖于二元决策并要求概率,其是有很大的限制性的。相反,我们提出了一个基于神经网络的可训练决策网络(decision network)。如果我们查看混淆矩阵(confusion matrix),那么我们就能使用这些信息为监督决策网络生成标签。因此,我们就能在 LSTM 正确且 BoW 错误的情况下使用 LSTM。
为了生成数据集,我们需要一个句子集,其包含了词袋和 LSTM 的真实、潜在的预测。然而在训练 LSTM 的过程中,其经常实现了超过 99% 的训练准确度,并显然对训练集存在过拟合现象。为了避免这一点,我们将训练集分割成模型训练集(80% 的训练数据)和决策训练集(余下 20% 的训练数据),其中决策训练集是模型之前所没有见过的。之后,我们使用余下的 20% 数据微调了模型,并期望决策网络能泛化到这一个新的、没见过的但又十分相关的数据集,并让系统更好一些。
词袋和 LSTM 最初都是在「Model train」上先进行训练(80% 训练数据),随后这些模型被用于生成决策网络的标签,再进行完整数据集的训练。验证集在这段时间一直被使用。
为了构建我们的决策网络,我们进入我们低成本的词袋系统的最后一个隐藏层(用来生成 T-SNE 图的同一层)。我们在模型训练集上的词袋训练之上叠加一个两层 MLP。我们发现,如果我们不遵循这个方法,决策网络将无法了解 BoW 模型的趋势,并且不能很好地进行泛化。
底部的长条状代表词袋系统的层,不包含 dropout。一个双层的 MLP 被加在顶部,一个类用于是否选择词袋或卓越的 LSTM。
由决策网络在验证集上选择的类别(在模型训练集上训练过的模型基础上)接着被应用于完全训练集上训练过但非常相关的模型上。为什么要应用到一个完全训练集训练过的模型上?因为模型训练集上的模型通常较差,因此准确度会比较低。该决策网络是基于在验证集上的 SUC 最大化而利用早停(early stopping)训练的。
决策网络的表现如何?
让我们从观察决策网络的预测开始。
数据点和之前使用词袋模型时的 T-SNE 图相同。绿色点代表使用词袋预测的句子,黄色点代表 LSTM。
注意:这有多近似词袋的概率截止(probability cutoff)。让我们看看决策网络最后一个隐藏层的 T-SNE 是否能够真的聚集一些关于 LSTM 什么时候正确或错误的信息。
网络如何执行我们的决策
让我们从决策网络的预测开始。
数据点基于决策网络最后隐藏状态的语句表征,源自验证语句。颜色和之前的比较图相同。
看起来决策网络能够从词袋的隐藏状态中拾取聚类。然而,它似乎不能理解何时 LSTM 可能是错误的(将黄色和红色聚类分开)。
紫色曲线代表在验证集上新引入的决策网络,注意决策网络如何实现接近但略微不同于概率阈值的解决方案。从时间曲线和数据精度来看,决策网络的优势并不明显。
Bow 与 LSTM 在测试集和验证集中的表现。SUC 基于准确率与速度图的平均值。每个模型都用不同种子计算了十次。表中结果来自 SUC 的平均数。标准偏差基于与比率的差异。
从预测图、数据量、准确率和 SUC 分数中,我们可以推断决策网络很善于了解 BoW 何时正确,何时不正确。而且,它允许我们构建一个更通用的系统,挖掘深度学习模型的隐藏状态。然而,它也表明让决策网络了解它无法访问的系统行为是非常困难的,例如更复杂的 LSTM。
讨论
我们现在终于明白了 LSTM 的真正实力,它可以在文本上达到接近人类的水平,同时为了达到这一水平,训练也不需要接近真实世界的数据量。我们可以训练一个词袋模型(bag-of-words model)用于理解简单的句子,这可以节省大量的计算资源,整个系统的性能损失微乎其微(取决于词袋阈值的大小程度)。
这个方法与平均相关,该平均通常是当类似于带有高置信度的模型将被使用时而执行的。但是,只要有一个可调整置信度的词袋,并且不需要运行 LSTM,我们就可以自行权衡计算时间和准确度的重要性并调整相应参数。我们相信这种方法对于那些寻求在不牺牲性能的前提下节省计算资源的深度学习开发者会非常有帮助。