Py学习  »  机器学习算法

独家 | NLP的深度学习:ANN,RNN和LSTM详解!(附资源)

THU数据派 • 4 年前 • 427 次点击  

作者:Jaime Zornoza,马德里技术大学

翻译:陈之炎

校对:王威力

本文约3700字,建议阅读10+分钟。
本文带你以前所未有的方式了解深度学习神经网络,并利用NLP构建Chatbot!


是否曾经幻想过能和自己的私人助理对话或是漫无边际地探讨任何问题?多亏机器学习和深度神经网络,你曾经的幻想很快会变成现实。让我们来看一下Apple的Siri或亚马逊的Alexa所展示的这一神奇功能吧。

不要太激动,我们在下面一系列帖子中,创建的不是一个无所不能的人工智能,而是创建一个简单的聊天机器人,预先些输入一些信息,它能够对此类信息相关的问题做出是或否的回答。

它远不及Siri或Alexa,但它却能很好地说明:即使使用非常简单的深度神经网络架构,也可以获得不错的结果。在这篇文章中,我们将学习人工神经网络,深度学习,递归神经网络和长短期记忆网络。在下一篇文章中,我们将在真实项目中利用它来回答问题

在开始讨论神经网络之前,先仔细看看下面的图像。其中有两张图片:其中一张图片是一辆校车行驶通过马路,另一张图片是是普通的起居室,这两张图片都有人工注释人员对其进行了描述。

图中为两个不同的图像,附有人工注释人员对其进行的描述

好了,让我们继续吧!

开始 - 人工神经网络

 
为了构建一个用于创建聊天机器人的神经网络模型,会用到一个非常流行的神经网络Python库:Keras。然而,在进一步研究之前,首先应了解人工神经网络(ANN)是什么。

人工神经网络是一种机器学习模型,它试图模仿人类大脑的功能,它由连接在一起的大量神经元构建而成- 因此命名为“人工神经网络”。
 

感知器

 
最简单的ANN模型由单个神经元组成, Star-Trek将之命名为感知器(Perceptron)。它由弗朗克·罗森布拉特(Frank Rossenblatt)于1957年发明,它包括一个简单的神经元,对输入的加权和进行函数变换(在生物神经元中是枝状突起),并输出其结果(输出将等同于生物神经元的轴突)。我们不在这里深入研究用到的函数变换的细节,因为这篇文章的目的不是成为专家,而只是需要了解神经网络的工作原理。

单个神经元的图像,左边为输入,乘以每个输入的权重,神经元将函数变换应用于输入的加权和并输出结果


这些单独的神经元可以堆叠起来,形成包含不同个数神经元的层,这些层可以顺序地相邻放置,从而使得网络更深。

当以这种方式构建网络时,不属于输入层或输出层的神经元叫做隐藏层,正如它们的名称所描述:隐藏层是一个黑盒模型,这也正是ANN的主要特征之一。通常我们对其中的数学原理以及黑盒中发生的事情有一些认知,但是如果仅通过隐藏层的输出试图理解它,我们大脑可能不够用。

尽管如此,ANN却能输出很好的结果,因此不会有人抱怨这些结果缺乏可解释性。

大的神经网络的图像,由许多单独的神经元和层组成:一个输入层,两个隐藏层和一个输出层

神经网络结构以及如何训练一个神经网络,已为人所知有二十多年了。那么,又是什么原因导致了当今对人工神经网络和深度学习的火爆和炒作?下面我们会给出问题的答案,但在此之前,我们先了解一下深度学习的真正含义。

什么是深度学习?

 
从它的名称可以猜测到,深度学习使用多个层逐步从提供给神经网络的数据中提取出更高级别的特征。这个道理很简单:使用多个隐藏层来增强神经模型的性能。

明白了这一点之后,上面问题的答案便简单了:规模。在过去的二十年中,各种类型的可用数据量以及我们的数据存储和处理机器(即,计算机)的功能都呈指数级增长。

计算力的增加,以及用于训练模型的可用数据量的大量增加,使我们能够创建更大、更深的神经网络,这些深度神经网络的性能优于较小的神经网络。

Andrew Ng是世界领先的深度学习专家之一,他在本视频中明确了这一点。在这个视频(https://www.youtube.com/watch?v=O0VN0pGgBZM&t=576s)中,他展示了与下面图像类似的一副图像,并用它解释了利用更多数据来训练模型的优势,以及大型神经网络与其他机器学习模型相比较的优势。
 

图像显示了当训练数据集增大时,不同算法的性能演变

 
传统的机器学习算法(线性或逻辑回归,SMV,随机森林等)的性能会随着训练数据集的增大而增加,但是当数据集增大到某一点之后,算法的性能会停止上升。数据集大小超过这一值之后,即便为模型提供了更多的数据,传统模型却不知道如何去处理这些附加的数据,从而性能得不到进一步的提高。

神经网络则不然,这种情况永远不会发生。神经网络的性能总是随着数据量的增加而增加(当然,前提是这些数据质量良好),随着网络大小的增加,训练的速度也会加快。因此,如果想要获得最佳性能,则需要在X轴右侧(高数据量)的绿线(大神经网络)的某个位置。

此外,虽然还需要有一些算法上的改进,但是深度学习和人工神经网络兴起的主要因素便是规模:计算规模和数据规模

杰夫·迪恩(Jeff Dean)(谷歌深度学习的煽动者之一)是该领域的另一个重要人物,关于深度学习,杰夫如是说:
 
当听到深度学习这个词时,便会想到一个大的深度神经网络。深度通常指的是层数比较多,这是出版物中的一个流行术语,此刻,我便视它为深度神经网络。
在谈论深度学习时,杰夫强调了神经网络的可扩展性,即随着数据量的增大,模型规模的增大,模型输出的结果会越来越好,同时,训练的计算量也随之增大,这和先前看到的结果一致。


好了,理解了原理之后,那么神经网络如何进行深度学习的呢?

 
你可能已经猜到了:神经网络从数据中学习。

还记得将多个输入乘以权重之后输入到感知器中吗?连接两个不同神经元的“边”(连接)也需要赋权重。这意味着在较大的神经网络中,权重也存在于每个黑箱边之中,取一个神经元的输出,与其相乘,然后将其作为输入提供给这个边缘所连接的另一个神经元。
 

具有两个隐藏层的神经网络以及每个层之间的权重

当训练神经网络(通过ML表达式来训练神经网络使其进行学习)时,首先为它提供一组已知数据(在ML中称为标记数据),让它预测这些数据的特征(比如图像标记“狗”或“猫”)然后将预测结果与实际结果进行比对。

当这个过程在进行中出现错误时,它会调整神经元之间连接的权重,以减少所犯错误的数量。正因如此,如前所示,在大多数情况下,如果我们为网络提供更多的数据,将会提高它的性能。
 

从序列数据中学习 –递归神经网络

 
了解了人工神经网络和深度学习之后,我们懂得了神经网络是如何进行学习的,现在可以开始研究用于构建聊天机器人的神经网络:递归神经网络或RNN  。

递归神经网络是一种特殊的神经网络,旨在有效地处理序列数据,序列数据包括时间序列(在一定时间段内的参数值列表)、文本文档(可以视为单词序列)或音频(可视为声音频率序列)。

RNN获取每个神经元的输出,并将其作为输入反馈给它,它不仅在每个时间步长中接收新的信息,并且还向这些新信息中添加先前输出的加权值,从而,这些神经元具备了先前输入的一种“记忆”,并以某种方式将量化输出反馈给神经元。

递归神经元,输出数据乘以一个权重并反馈到输入中

来自先前时间步长的输入的函数单元称为记忆单元

RNN存在的问题是:随着时间的流逝,RNN获得越来越多的新数据,他们开始“遗忘”有关数据,通过激活函数的转化及与权重相乘,稀释新的数据。这意味着RNN有一个很好的短期记忆,但在尝试记住前一段时间发生过的事情时,仍然会存在一些小问题(过去若干时间步长内的数据)。

为此,需要某种长期记忆,LSTM正是提供了长期记忆的能力。
 

增强记忆力 - 长期短期记忆网络

 
 长短期记忆网络LSTM是RNN的一种变体,可解决前者的长期记忆问题。作为本文的结尾,简要解释它是如何工作的。

与普通的递归神经网络相比,它们具有更为复杂的记忆单元结构,从而使得它们能够更好地调节如何从不同的输入源学习或遗忘。

LSTM记忆单元示例。注意蓝色圆圈和方框,可以看出它的结构比普通的RNN单元更复杂,我们将不在本文中介绍它

LSTM神经元通过三个不同的门的状态组合来实现这一点:输入门,遗忘门和输出门。在每个时间步长中,记忆单元可以决定如何处理状态向量:从中读取,写入或删除它,这要归功于明确的选通机制。利用输入门,记忆单元可以决定是否更新单元状态;利用遗忘门,记忆单元可以删除其记忆;通过输出门,单元细胞可以决定输出信息是否可用。

LSTM还可以减轻梯度消失的问题,但这不在此做详细介绍。

 就是这样!现在我们对这些不同种类的神经网络已经有了一个初浅的认识,下面可以开始用它来构建第一个深度学习项目!

结论

 
神经网络会非常神奇。在下一篇文章中,我们将看到,即便是一个非常简单的结构,只有几个层便可以创建一个非常强大的聊天机器人。哦,顺便问一下,记得这张照片吗?

由神经网络创建的带有简短文本描述的两幅不同图像

 
为了证明深度神经网络是多么酷,不得不承认,我对如何产生这些图像的描述撒了谎。
 
记得在本文的开头,曾说明这些描述是人工注释的,然而实际上,每幅图像上所的简短文本实际上都是人工神经网络生成的
 
太狂啦?

如果想要学习如何使用深度学习来创建一个神奇的聊天机器人,请在媒体上追随我,并继续关注我的下一篇文章!然后,尽情享受人工智能!


其它资源


本帖中描述的概念解释非常初浅,如果想深入学习,请参考以下附加的资源。
 
  • 神经网络如何端到端地工作

    https://end-to-end-machine-learning.teachable.com/courses/how-deep-neural-networks-work/lectures/9533963

  • YouTube视频系列,讲解如何训练神经网络的主要概念

    https://www.youtube.com/watch?v=sZAlS3_dnk0

  • 深度学习和人工神经网络

    https://machinelearningmastery.com/what-is-deep-learning/


好啦,希望你喜欢这个帖子。可以在LinkedIn上与我联系,或在@jaimezorno的Twitter上跟我联系。此外,还可以在此处查看我的关于数据科学和机器学习的其它帖子。学习快乐!
 
作者简介:
Jaime Zornoza是一名工业工程师,拥有电子专业的学士学位和计算机科学的硕士学位。原创。经许可转载。


原文标题:

Deep Learning for NLP: ANNs, RNNs and LSTMs explained!

原文链接:

https://www.kdnuggets.com/2019/08/deep-learning-nlp-explained.html


编辑:黄继彦

校对:林亦霖



译者简介

陈之炎,北京交通大学通信与控制工程专业毕业,获得工学硕士学位,历任长城计算机软件与系统公司工程师,大唐微电子公司工程师,现任北京吾译超群科技有限公司技术支持。目前从事智能化翻译教学系统的运营和维护,在人工智能深度学习和自然语言处理(NLP)方面积累有一定的经验。业余时间喜爱翻译创作,翻译作品主要有:IEC-ISO 7816、伊拉克石油工程项目、新财税主义宣言等等,其中中译英作品“新财税主义宣言”在GLOBAL TIMES正式发表。能够利用业余时间加入到THU 数据派平台的翻译志愿者小组,希望能和大家一起交流分享,共同进步。

翻译组招募信息

工作内容:需要一颗细致的心,将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生,或在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组。

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对于数据科学前沿的认知,海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇。

其他福利:来自于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴。


点击文末“阅读原文”加入数据派团队~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:datapi),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以及改编者,我们将依法追究其法律责任。


点击“阅读原文”拥抱组织


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/46442
 
427 次点击