读芯术 · 2019年08月01日

教你用ANNs,RNNs和LATMs构建“私人助理”

全文共3390字,预计学习时长7分钟

image.png
你是否曾幻想过拥有一个私人助理,可以回答你的任何问题或者能够与你交谈?幸好有机器学习与深度神经网络,使得这一梦想不再遥远。想想苹果的Siri和亚马逊的Alexa的神奇功能吧!

但也不要太激动,因为在接下来文章中要创建的并不是一个无所不能的人工智能,而仅仅是一个简单的聊天机器。它被输入了一些问题和相应的答案,人们向它提问时,它可以回答是或不是。

它与Siri或Alexa的功能相差甚远,但它充分说明了即使使用非常简单的深度神经网络结构,也能获得惊人的结果。本文将学习人工神经网络、深度学习、递归神经网络和长短时记忆网络的知识。

在学习关于神经网络的有趣知识前,可以先仔细观察下面的图片。里面有两幅图:左边是一辆在马路上行驶的校车,右边是一个普通的客厅。图画下面分别标有注解。

image.png
两幅不同的图片附以人工标注的文字说明。
image.png

人工神经网络

为了构建用于创建聊天机器人的神经网络模型,将要使用一个非常流行的用于神经网络的Python库—Keras。但是,在进一步研究之前,首先必须了解什么是人工神经网络。

人工神经网络是一种机器学习模型,它试图模仿人脑的功能。而人脑的结构是由大量互相连接的神经元组成的,因而得名“人工神经网络”。

感知器

最简单的人工神经网络是由单个神经元组成的,它的名字听起来跟《星际迷航》里的感知器很相似。1957年,弗兰克·罗森布拉特发明了感知器,它由一个神经元组成,对输入信号进行加权(生物神经元中的输入信号口成为树突),应用于数学函数公式,最后输出结果(信号输出口称之为轴突)。此处不对可应用功能作详细讨论。

上图为一个神经元,左边是信号输入口,将每个权重相乘。神经元将一个函数应用于输入值,最终输出结果。

这些单一的神经元可以堆叠在一起,形成任意大小的层,有顺序地放在一起,从而使得神经网络达到更深层。

当神经网络以这种方式构建时,不属于输入层或者输出层的神经元被认为是隐藏层的一部分。用它们的名字来描述一下人工神经网络的主要特征之一吧,它们基本上都是黑盒模型;尽管理解发生的事情背后的数学原理,并且对黑盒子里发生的事情有一种直觉,但若取一个隐藏层的输出并试图理解它,人们很可能会绞尽脑汁却得不到任何结果。

尽管如此,隐藏层仍然能够生成许多我们意想不到的结果。因此,没有人抱怨其缺乏可解释性。
image.png

上图是一个更大的神经网络图,由许多单一的神经元和层组成:一个输入层、两个隐藏层和一个输出层。

关于神经网络的结构以及如何训练它们的讨论已经有二十多年的历史了。那么,是什么导致了现在对人工神经网络和深度学习大惊小怪和大肆宣传呢?这个问题的答案就在下面,但我们首先需要理解什么是深度学习。

什么是深度学习?

深度学习,顾名思义,就是使用很多层来逐步从提供给神经网络的数据中提取更高层次的特征。就是这么简单,使用多个隐藏层来提高神经模型的性能。

了解这一点之后,上面问题的答案就很简单了:那就是规模。在过去的20年间,可用数据量以及数据存储和处理的机器(也就是计算机)的性能呈指数级增长,从而使得人们能够创建更大、更深层次的神经网络来训练模型。

世界最顶尖的深度学习专家之一吴恩达在这个视频中对此作了详细的阐述。他展示了一张类似于下图的图像,并用它解释了拥有更多数据训练模型的好处,以及大型神经网络相对于其他机器学习模型的优势。

image.png
上图展示了随着训练数据的增加各个算法性能的逐步优化。

对于传统机器学习算法来说(线性或逻辑回归、SMVs和随机森林等),随着训练模型数据的增加,性能会持续增加至某一点,之后维持在该水平。达到该点时,模型似乎不知道该如何处理额外数据了,因而无法通过增加数据量来提高性能。

然而,对于神经网络来说就不存在这种情况了。如果数据质量较高,那么,性能总会随着数据量的增加而增强,而且其增长速度取决于网络规模大小。因此,若想获得最优性能,则需要处于绿线上(也就是代表神经网络的线)x轴方向(即更大数据量)的某个位置。

除此之外,还有一些算法上的改进也推动了深度学习和人工神经网络崛起,但最主要原因还是规模:计算规模和数据规模。
image.png
该领域的另一位重要人物杰夫•迪恩(谷歌深度学习的发起者之一)对深度学习也曾提出过他的见解:

当你听到“深度学习”这个术语时,将它想象成一个巨大的深度神经网络。“深”通常指的是图层的数量,是媒体常用的术语。我通常将它们看做是深度神经网络。

在谈到深度学习时,他强调了神经网络的可扩展性,这表明随着数据的增多和模型的增大,性能会逐步优化,而正如上文所述这反过来又需要更多的计算训练。

好的,明白了。可是,神经网络是如何学习的呢?

或许你已经猜到了答案,那就是:通过数据学习。

还记得在单个感知器中乘以输入的权重吗?这些权重也包含在连接两个不同神经元的任何边中。这意味着在一个更大的神经网络的图像中,它们存在于每一条黑边上,获取一个神经元的输出,乘以该权重,然后将其传送给另一个与该边相连神经元作为新的输入。
image.png

这是一幅神经网络图,包含两个隐藏层和位于每层之间的权重。

训练神经网络时(训练神经网络是一种机器语言表达,意为‘使其学习’),输入一组已知数据(机器语言称之为标签数据),让它预测已知的关于这些数据的特征(比如一个图像代表了一只狗还是一只猫),然后将预测结果与实际结果进行比较。

在这一过程中,神经网络会出错,但它会调整神经元之间所连接的权重以减少出错的次数。正因为如此,如上文所述,如果不断增加输入量,性能在大多数情况下都会随之提升。

image.png
从序列数据——循环神经网络中学习

既然已经知道了人工神经网络和深度学习,并且对神经网络如何学习有了大致的了解,那让接下来看看用来构建聊天机器人的网络类型:循环神经网络(简称RNNs)。

递归神经网络是一种特殊的神经网络,它能有效地处理序列数据。这类数据包括时间序列(特定时段内某些参数值的列表),文本文档(可以看作是一组单词序列),以及录音文档(可以看作音频序列)。

递归神经网络工作的方式是通过获取每个神经元的输出信号,再将其作为新的输入反馈给它。这样一来,它不仅能够在每个时间段接收新信息,而且还可以将这些新信息添加到以前输出的加权版本中。这使得神经元对之前的输入有了“记忆”,因为它们通过反馈给神经元的输出来进行量化。
image.png

这是一个递归神经元,其输出数据乘以一个权值后重新输入。

细胞内是上一阶段输入的函数,成为记忆细胞。

递归神经网络现存的问题是,随着时间的推移,越来越多的新数据被输入,神经网络在这些新数据和激活函数的转换以及权重乘法之间不断被稀释,于是开始“忘记”以前看到的数据。这意味着它们只有良好的短期记忆,但却记住不久前发生的事情(即在过去时间段中看到的数据)。

我们需要某种长期记忆,而这正是长短期记忆网络(LSTMs)所提供的。
image.png

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

长短期记忆网络(LSTMs)是递归神经网络的一种变体,它解决了递归神经网络的长期记忆问题。本文将通过简要介绍它们如何工作来作为这篇文章的结尾。

长短期记忆网络的细胞结构比一般的递归神经元更为复杂,这使其能够更好地调节如何从不同的输入源学习或遗忘。
image.png

这是一个长短期记忆网络的细胞。请不要把注意力放在蓝色的圆圈和方框上,可以看到它的结构比普通的递归神经网络细胞要复杂得多,因而本文将不作讨论。

长短期记忆网络神经元通过合并细胞状态和三个不同的门(输入门、遗忘门和输出门)来进行工作。这要感谢显式门控机制,使得细胞在每个时间段中可以决定如何处理状态向量:读取、编写或删除。通过输入门,细胞可以决定是否更新其状态。通过遗忘门,细胞可以清除其内存。通过输出门,细胞可以决定输出信息是否有效。

长短期记忆网络还缓和了梯度爆炸和消失,但这就是另一个新的问题了。

就是这样!现在对这些不同类型的神经网络如何工作有了初步的了解,可以将其用于首个深度学习项目了!

神经网络真的很神奇。哦对了,还记得这张照片吗?

image.png

为了证明深度神经网络很厉害,我们不得不承认对图片的文字描述来源撒了谎。

在这篇文章的开头说这些文字描述是人工标注的,然而,事实是这些描述每张图片上所能看到的内容的短文本实际上是由人工神经网络输出的。

很疯狂吧?请尽情体验人工智能的神奇之处!

推荐阅读
关注数
11
内容数
5
人工智能干货,看这个专栏够了!
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息