何时浅探,何时深究—机器学习不是一张纸就能说完的

译文
人工智能 深度学习 移动开发
深度学习的一大优势在于,其水平提升往往能够在各类场景下实现通用。举例来说,在某一领域中适用于深度学习的具体技术通常可以直接转移至其它领域,而无需经过任何修改。更具体地讲,构建大量计算密集型图像与语音识别类深度学习模型的方法已经全面渗透至自然语言处理当中。

 机器学习、深度学习与人工智能的崛起已经成为一项不争的事实,且开始对计算机科学领域产生极为深远的影响。正如大家所知,截至目前,在从图像识别到围棋竞技的众多领域内,深度学习的实际表现已经将人类远远甩在身后。

深度学习社区目前正在将自然语言处理(简称NLP)视为技术研究与应用的下一个前沿。

深度学习的一大优势在于,其水平提升往往能够在各类场景下实现通用。举例来说,在某一领域中适用于深度学习的具体技术通常可以直接转移至其它领域,而无需经过任何修改。更具体地讲,构建大量计算密集型图像与语音识别类深度学习模型的方法已经全面渗透至自然语言处理当中。在最新、最先进的翻译系统的帮助下,这套系统足以带来远胜以往的实际表现——当然,仍需要大量计算设备作为配合。尽管我们必须利用性能极强的系统从现实世界数据当中偶然发现高度复杂的分析模型,但在另一方面,这些模型将能够以规模化方式应用于其它多种任务。而这就提出了新的问题:

是否一切任务都有必要使用如此复杂的模型?

下面我们一起来看一套双层式MLP模型,其已经接受相关训练并可实现情感分析。

这是一套简单的深度学习系统,我们将其称为“词袋”模型,它会把句子分为正或负两类。最终可视化效果由词袋模型中双层MLP架构中处于上层的T-SNE隐藏层实现。每个数据点对应一个句子,并根据深度学习系统的预测结论与真实目标标以不同颜色。图中的边界框体根据句子的内容进行绘制。感兴趣的朋友可以通过鼠标悬停与图表进行交互!

上图中的边界框体提供了一些重要的见解。现实世界当中的数据处理任务在难度上往往有所区别——某些句子很容易分类,但其它一些句子则可能包含复杂的语义结构。对于那些易于分类的句子,我们可能并不需要高容量系统即可完成处理——换言之,利用较为简单的模型足以得出相同的结论。在今天的博文中,我们将探讨这种猜测是否属实。另外,文中还将展示我们通常如何运用此类简单模型。

文本内容与深度学习

大多数深度学习方法要求利用浮点数字作为输入内容——除非您之前尝试过处理文本信息,否则大家肯定会抱有以下疑问:

我该如何将文本片段与深度学习对接起来?

在处理文本内容时,其核心问题在于如何表达任意数量的信息。目前比较流行的解决方案之一在于将文本标记为单词、子词汇甚至是字符。我们可以利用word2vec或者GloVe等方案进一步将各个单词转换为浮点矢量。如此一来,大家即可通过不同单词之间的隐含关系表达单词意义。

选择一个单词,将其转化为一个高维度嵌入体(例如三百维),而后利用PCAaftT-SNE(二者皆为高人气降维工具,在本示例中可将其降至二维),如此一来大家即可发现单词之间的有趣关联。正如大家所见,上图提示uncle与aunt之间具备类似词义,只是分别指向男性与女性。

利用标记化以及word2vec方法,我们可以将文本片段转化为一条用以表达每个单词的浮点序列。

现在,我们该如何使用这条浮点序列?

词袋模型

现在我们来讨论词袋模型(bag-ofwords,简称BoW),这可能是大家接触过的最为简单的机器学习算法之一。

选取多个词汇表达(即底部灰色框),而后通过相加或者取平均值的方式将其归纳为另一通用表达式(蓝色框),其中应该会包含每个单词中的部分信息。在本文当中,这一通用表达式负责预测句子表达的情感为正抑或为负(红色框)。

直接对特征维度取平均值。事实证明,在简单的词汇平均嵌入场景下,即使完全忽略句子内的表达顺序,这套模型仍能够在多数简单实例中运行良好。而与深度神经网络(稍后将进一步说明)相结合后,词袋模型往往能够给出理想的理解基准线。另外,平均值是一项低资源占用量操作,且可帮助我们将句子的维度降低为一项固定大小的向量。

递归神经网络

某些句子中可能包含更为复杂的结构或者需要以更高精度加以处理。单靠词袋模型往往不足以解决这些难题,因此是时候祭出另一款神器——递归神经网络了!

 

在每个timestep(由左至右)上为RNN(灰色框)提供一条输入内容(例如一个单词),并将此作为原有内部记忆(蓝色框)之外的新增内容。RNN随后会在新的内部记忆(蓝色框)中进行计算,这部分结果代表的是全部此前见到过的单元(例如全部原有单词)。RNN现在应该已经获得了句子层级上的全新信息,意味着其能够更好地预测句子所表达的情感为正抑或为负(红色框)。

每个嵌入单词都会按顺序被馈送至一套递归神经网络当中,后者负责管理以往见到过的存储信息,并将这部分信息与新词汇加以结合。在使用长-短期记忆单元(简称LSTM)或者门控递归单元(简称GRU)等知名记忆单元支持下的RNN时,RNN将能够记住包含大量单词的句子的具体含义!(由于LSTM获得了成功,采用LSTM记忆单元的RNN通常也被直接称为LSTM。)这些模型当中最大的八个彼此相互堆叠。

欢迎来到最为先进(大概是)的深度学习模型当中,其利用配备LSTM记忆单元的RNN实现语言翻译。粉色、橙色与绿色框即为拥有LSTM单元的递归神经网络。其亦可实现在不同lstm层之间实现skip连接等处理技巧的交换,同时具备一项名为attention的方法。如大家所见,绿色的LSTM指向相反的方向。当将其与正常LSTM相结合后,即可生成所谓双向LSTM,其能够以两个方向从数据序列中获取信息。欲了解更多相关信息,请点击此处参阅Stephen Merity发表的博文。

然而,LSTM的运行资源需求要远远高于低成本词袋模型,也通常需要由经验丰富的深度学习工程师负责实现并高效支持与之配套的高性能计算硬件。

示例:情感分析

情感分析属于一种文档分类机制,其可对文档内容的主观倾向进行判断。在向其提交一个句子后,这套模型能够评估其表达的情感为正面、负面抑或中性。

希望在客户行动之前通过其推文将其找到?情感分析能够有效满足您的需求!

在这方面,最为知名的公共数据集(也正是我们将在后文中使用的选项)正是斯坦福情感树图库(简称SST)。SST不仅能够对句子进行分类(正面或者负面),同时亦可对句子中的各单独语法进行判断。但在我们的系统中,我们并未使用任何树状信息。初始SST将情感分为五种类别:非常正面、正面、中立、负面、非常负面。出于示例的考虑,我们认为二分法应该更为简单且易于理解,因此我们将非常正面与正面加以合并,非常负面与负面亦进行合并,同时将所有中性判断结果加以去除。

我们已经对示例中所要使用的模型架构进行了概括与技术性介绍。其中最重要的并非具体架构设计方式,而在于低成本模型能够在64项批量处理流程中以10毫秒延迟提供82%的验证准确率,而高成本LSTM则在64项批量处理流程中以87毫秒的延迟提供仅略有改善的88%验证准确率(顶级模型的准确性一般在88%到90%之间)。

 

底部绿色框代表嵌入词汇,由GloVe进行初始化,而后提取词意(词袋模型)并由一套双层MLP模型进行分析及中性要素去除。

 

底部青绿色框代表嵌入词汇,由GloVe进行初始化。此后我们不再对嵌入词汇进行追踪。这里我们使用与LSTM单元相似的具备LSTM单元的双向RNN。我们利用RNN隐藏状态以获取平均值与最大值,而后是双层MLP模型进行分析及中性要素去除。

低成本浅探阅读方案

在某些任务中,各类算法能够提供与人类水平相近的准确度,但其提出的服务器性能要求往往也令人难以承受。另外正如前文中所提出,我们并不需要始终利用LSTM这类高性能需求量方案处理实际数据——大多数情况下词袋模型已经足以完成任务。但有时候,我们可能面对着以下这类难题:

“演员表现非常糟糕,完全缺少真实感……但我仍然愿意给出9分好评”

作为一类忽略顺序的算法,词袋模型肯定会将这句话理解成负面表达。然而很明显,这样简单且明确的表达居然成为拉低分析准确率的罪魁祸首——这样的情况明显无法接受。因此问题就变成:

我们能否学会如何区分“简单”与“困难”两类句子?

另外,我们能否利用低成本模型完成这项任务?

深入探索

探索深度学习模型的一种主流方式,在于立足隐藏层对每个句子的表示方式进行绘制。然而,由于隐藏层通常位于高维,因此我们可以使用T-SNE等算法首先将其降维至二维,从而以人类可以理解的方式实施绘制。

大家可以移动、缩放、保存并将鼠标悬停在数据点上以查看其信息。请注意,在向右侧渲染的情况下(即将数据点移动至左侧)提示工具可能表现更好。

在以上图表中,大家会看到词袋模型(BoW)中绘制的最新隐藏层。在将鼠标悬停至任何数据点时,您将看到表示该数据点的对应句子。句子本身的颜色由其标签决定。

预测标签(Predictios tab):系统预测结果与实际模型标准间的比较。数据点的中央表壳其预测结论(蓝色为正面,红色为负面),而周边的线条代表实际标签。如此一来,我们就能轻松判断系统结论是否正确。

概率标签(Probabilities tab): 代表我们在输出层中分配给预测结论的具体概率。其负责告诉我们该模型对其预测结论的确信度。另外,在将鼠标悬停至数据点上时,图表将提供给定数据点的概率,并根据模型预测结论进行着色。需要注意的是,概率的起始值为0.5,代表任务本身为二分类型,且值为0.5时意味着确信度最低——为五五开。

T-SNE制图极易受到过度解读的影响,但其中部分因素的影响效果往往更为明显。

T-SNE解读

  • 将句子拆分为多个聚类(clusters)。这些聚类包含有不同的语义类型。
  • 部分聚类拥有的多重性相对简单,意味着模型对于准确度拥有较高的确信度。
  • 另一些聚类则准确度较低,且对结论的确信度亦不高。
  • 同时包含正面与负面表达的句子往往更难进行判断。

下面来看根据LSTM模型生成的绘制图表。

大家可以移动、缩放、保存并将鼠标悬停在数据点上以查看其信息。请注意,在向右侧渲染的情况下(即将数据点移动至左侧)提示工具可能表现更好。

采用与词袋模型相同的设置,旨在对LSTM进行深入探索!

我们可以发现,LSTM的大多数结果与词袋模型并无区别。然而,LSTM对于大多数结论都拥有更高的确信度,且其在判断同时包含正面与负面表达的句子时表现得也要比词袋模型更好。

如此看来,词袋模型完全有能力对句子进行聚类拆分,并利用概率机制据此对所作出预测的准确性进行量化判断。以此为基础,我们基本可以得出以下推断:

高确信度答案一般准确性更高。

为了调查这一假设,我们可以对概率阈值进行观察。

概率阈值

词袋模型与LSTM已经经过训练,旨在为每个类提供对应概率,而我们可以将此作为确信度的衡量指标。具体来讲,如果词袋模型返回值为1,则代表其对于预测结论极具信心。

一般来讲,在预测当中我们会选取模型所提供的可能性最高的类。在二元分类当中(即非正即负),可能性必然高于0.5(否则我们将会给出相反的结论)。然而,较低的概率值代表着模型本身对于当前论断并不能确定。举例来说,如果模型预测的负面值为0.49,而正面值为0.51,则代表着结论准确的可能性极低。

在提到阈值时,我们的实际表意是将预测概率与某个给定值进行比较,从而评估该概率对应的结论是否可信。举例来说,我们可以决定直接使用概率值高于0.7的全部结论。或者,我们也可以选择查看概率值在0.5到0.55之间的句子,从而了解模型在这一确信度区间作出了怎样的预测——这部分内容我们将在后方进行详尽说明。

在阈值(threshold)绘图中,条状图形的高度对应两个阈值内数据点的准确度,而线条则代表其以全部数据点(而非给定阈值)为参照时的近似准确度。

在数据量(data amount)绘图中,条的高度对应两个阈值之间全部数据量的累加,而线条则代表来自各阈值限定区间内的累加数据。

通过词袋模型绘图,大家可能会发现提升概率阈值会改善预测准确度。然而这一点在LSTM图中则表现得并不明显,这主要是由于LSTM已经不再依赖于训练集,而只提供高确信度答案。

使用词袋模型处理简单示例,LSTM则负责复杂示例。

因此,通过输出的概率值,我们即可基本判断句子内容是否简单以及何时才有必要动用更为强大的LSTM等分析系统。

利用概率阈值,我们创建出一项新的策略,这里将其称为“概率策略”。其能够帮助我们获取词袋系统中的概率阈值,并利用LSTM进一步处理那些确信度达不到阈值要求的预测结论。如此一来,我们就能够将一部分数据交由词袋模型处理(概率高于阈值的句子),而另一部分数据则可选择词袋模型或者LSTM(特别是概率低于阈值的句子)加以处理。在此之后,我们将获得一项BoW与LSTM之间的使用率比值,由0.0(即只使用LSTM)到1.0(只使用BoW),从而得出分析计算所需要的时间与预期准确率。

确立基准

为了确立基准,我们需要选定两套模型的具体使用比例,例如将0.1的数据交由BoW而将0.9的数据交给LSTM,则意味着最终准确率将九成由LSTM决定,一成由BoW决定。我们的目标在于建立起一项无需策略指导的基准,其能够根据随机分配的句子内容决定使用BoW抑或是LSTM。然而,这项策略的执行本身也需要成本。我们需要首先通过词袋模型对全部句子进行处理,旨在确定哪些句子适用于词袋、而哪些适用于LSTM。如果任何一个句子的预测确信度都没有达成基准概率要求,则意味着我们必须将其全部交给LSTM——而这同时意味着我们的阈值设定可能存在问题。为了避免这种状况,我们决定通过以下方式计算策略的成本与模型使用比例。

其中C代表成本,而p代表词袋模型中所使用数据的比例。

验证集中的结果比较了BoW与LSTM(红线)与概率阈值策略(蓝线)不同搭配比例的对应准确度与处理速度。左侧的数据点代表仅使用LSTM的情况,而右侧则代表仅使用词袋模型的情况,二者之间则为双方皆有使用。蓝线代表在无指导策略影响下的BoW与LSTM组合,而红色曲线描绘了利用词袋概率作为策略以指导应对哪部分数据使用哪种系统的情况。您可将鼠标悬停在线上以查看不同比例/概率阈值所带来的处理时间节约效果。需要注意的是,在仅使用词袋模型的情况下,其达到时间节约能力上限——最高约90%。

这里我们得出一项有趣的发现,即使用词袋阈值的效果要明显优于未使用任何指导策略的情况。

我们将此曲线视为曲线速度(简称SUC),并对其取平均值。结果如下表所示。

利用验证集判断应使用BoW或者LSTM的离散选择结果。每种模型使用不同素材计算十次。表中的结果为SUC平均值。将概率策略与使用比例进行比较。

了解何时浅探而何时深究

光是了解何时在两种不同模型间切换显然还不够。我们希望建立一套更具通用性的系统,用以学习何时在每种模型间切换。这样一套系统能够帮助我们处理更为复杂的行为:

我们能否通过固定的管理方式了解何时深究比浅探效果更好?

其中的“深究”代表利用LSTM由左至右进行处理,并将每个timestep的结果保存在内存中; “浅探”则代表使用BoW模型。在利用词袋模型计算概率时,我们可以据此作出判断,即当某一单词的含义存在不确定性时,更为强大的LSTM应该能够提供更准确的结果——但事实是否真是如此?

词袋模型与LSTM对同一句子存在判断正确或不正确的混淆矩阵。其类似于此前在词袋模型与LSTM之间进行混淆T-SNE绘图。

事实上,可以看到LSTM只有12%的机率提供比BoW更好的判断结果,而在6%的情况下词袋模型或LSTM都无法给出正确结果。考虑到这一点,我们似乎没有理由使用LSTM——单纯依靠词袋模型已经能够带来较为准确的结果,且处理速度要快得多。

了解“浅探”——设置

也就是说,即使BoW对结果不够确定,我们也并未总应使用LSTM加以进一步处理。那么我们能否让自己的词袋模型了解LSTM在哪些情况下会出现错误,而哪些情况下高资源占比的LSTM能给出正确结果?让我们再次审视T-SNE绘图,但现在我们要关注的是BoW与LSTM之间的混淆矩阵。我们希望找到该混淆矩阵中各元素间的关系,特别是BoW出现错误的情况。

 

 

大家可以移动、缩放、保存并将鼠标悬停在数据点上以查看其信息。请注意,在向右侧渲染的情况下(即将数据点移动至左侧)提示工具可能表现更好。我们对BoW与LSTM的预测结果进行比较,旨在了解二者的准确率差异。这能帮助我们评估哪种模型的效果更好。另外,在将鼠标悬停至某一数据点时,其将提供正确性与概率。概率信息根据预测结果进行着色。

通过比较情况来看,我们发现能够更轻松地判断BoW何时正确而何时对结果不太确定。然而,LSTM的正确及错误之间则没有明确的关联。

我们能否把握这一关联?

此外,概率策略本身也存在明显的局限性,因为其依赖于继承式二分决策且要求配合概率值。因此,我们提出了一套基于神经网络的可训练决策网络。如果单纯着眼于混淆矩阵,我们可以利用这部分信息为监控下的决策网络生成标签。如此一来,我们即可保证仅在BoW为错误而LSTM为正确的情况下使用LSTM。

为了生成该数据集,我们需要一组句子,其中包含词袋模型与LSTM给出的正确、底层预测。然而在训练当中,LSTM通常能够实现99%甚至更高的准确度,这意味着训练集的规模已经不足以为其提供更多经验。为了避免这种状况,我们将训练集拆分为模型训练集(包含80%的训练数据)与决策训练集(包含其余20%训练数据),后者在训练过程中始终不会被交付至模型当中。在此之后,我们利用决策训练集对模型进行细节调整,希望决策网络能够在这部分从未出现过的数据中提供同样出色的预测表现。

词袋模型与LSTM初始皆利用“模型训练”集(即80%训练数据)进行训练,接下来由这两套模型为决策网络生成标签,最后再利用完整数据集对模型进行再次训练。在这一过程中,我们始终使用同样的验证集。

为了构建我们的决策网络,我们挖掘了低成本词袋系统中最后一个隐藏层(我们亦利用该层生成了T-SNE绘图)。在此之后,我们将一套双层MLP堆叠在模型训练集的词袋训练之上。我们发现如果不采取这样的作法,则决策网络将无法掌握BoW模型的变化趋势,意味着结果不能得到有效推广。

底部青绿色框体代表来自词袋系统的各层(未经筛选)。此后,我们将一套双层MLP堆叠在其上,并生成一个类以判断应使用词袋模型抑或LSTM。

决策网络根据模型训练集训练出的模型所选择的各个类随后会在整体训练集中进行全面应用——但继续保持高度关联性。我们之所以将该训练完成的模型应用于完整训练集,是因为该模型训练集上的模型往往水平较差并将导致准确度较低。在对验证集上的SUC进行最大化后,决策网络能够提前停止训练。

我们的决策网络执行效果如何?

我们首先来看看这套决策网络的预测结果。

数据点与之前我们使用词袋模型时绘制的T-SNE曲线图相同。绿色点代表由词袋模型进行预测的句子,而黄色点则代表由LSTM进行预测的句子。

这里我们需要注意结果与词袋模型中概率阈值的相似度。现在让我们看看决策网络最后一个隐藏层的T-SNE,借此了解其是否能够准确判断LSTM预测结果的正确与错误情况。

各数据点基于决策网络最后一个隐藏层的句子表达,且源自验证句子。其颜色所代表的含义与之前的比较绘图一致。

看起来决策网络确实能够从词袋模型的隐藏状态中提取聚类。不过,其似乎无法发现哪些情况下LSTM也会作出错误判断(从红色中提取黄色聚类)。

紫色曲线表示验证集上新引入的决策网络。请注意决策网络所使用的,与概率阈值相近但略有不同的解决方案。

从时间节约曲线上的数据准确度来看,我们很难判断这套决策网络是否表现更好。

利用验证集与测试集判断应使用BoW或者LSTM的离散选择结果。SUC基于准确度与速度绘图曲线的平均值。每套模型利用不同素材计算十次。表中的结果为SUC的平均值。标准偏差基于与该比例间的差异。

从预测绘图来看,我们可以根据数据量、准确度以及SUC得分判断决策网络是否能够准确判断BoW给出的预测结果是否正确。另外,我们也能够借此构建起一套更具通用性的系统,确保其能够触及深度学习模型当中的隐藏状态。然而,结果同时表明决策网络很难理解其无法访问之系统的行为,例如更为复杂的LSTM。

相关讨论

现在我们可以肯定的是,强大的LSTM在文本分析方面可以提供与人类相近的表现,然而并非全部真实数据皆需要这种精度极高的分析效果,因此我们可以训练一套词袋模型以判断当前句子是否简单。对简单句子施以“浅探”处理能够帮助我们节约大量计算资源与时间。

这种方法主要通过取均值实现,且一般更适用于具有高确信度的分析模型。然而通过在词袋模型中调整确信度标准,我们同样能够选取适合实际情况的计算时间与准确度平衡点。为了有效节约计算资源,我们认为这种方法能够为深度学习工程师们带来一些有益的启发。

关于引用

如果您在公开发表的文章中引用此博文,请保留以下内容:

作者:Alexander Rosenberg Johansen、Bryan McCann、James Bradbury以及 Richard Socher。2017年。
《Learning when to skim and when to read 》(相关论文即将发布)


通过更为深入地了解深度学习系统在哪些情况下可能出错,我们将能够更为明智地判断在哪种条件下使用哪种深度学习模型。如此一来,我们将可以利用最低限度计算时间获得与预期相符的任务完成效果。

原文链接:https://metamind.io/research/learning-when-to-skim-and-when-to-read

责任编辑:林师授 来源: 51CTO
相关推荐

2024-08-01 10:10:24

MySQL场景搜索

2020-10-21 14:54:02

RustGolang开发

2021-11-07 15:04:39

机器学习人工智能数据

2020-06-09 18:52:04

机器学习技术人工智能

2011-08-08 15:43:01

MySQL索引

2021-04-12 07:34:03

Java集合框架

2021-11-26 09:00:00

数据库数据集工具

2019-11-29 07:53:07

DNSTCP网络协议

2020-12-13 14:32:22

5GWi-Fi 6

2024-02-28 11:41:50

2021-12-09 09:52:36

云原生安全工具云安全

2018-03-28 11:56:08

华为云

2019-12-06 09:41:40

开源技术 软件

2021-08-10 07:46:42

手机人工智能万物互联

2021-08-10 07:27:42

Python引用计数法

2013-08-21 15:06:31

iOSself.

2011-04-15 17:07:13

Java

2013-12-11 09:57:52

Windows 8.2操作系统

2014-03-17 10:14:53

云桌面DaaS

2023-06-14 16:40:31

LinuxWSL
点赞
收藏

51CTO技术栈公众号