导航:首页 > 网络安全 > 人工神经网络是如何搭建的

人工神经网络是如何搭建的

发布时间:2023-03-18 03:22:22

A. 人工智能:什么是人工神经网络

许多 人工智能 计算机系统的核心技术是人工神经网络(ANN),而这种网络的灵感来源于人类大脑中的生物结构。

通过使用连接的“神经元”结构,这些网络可以通过“学习”并在没有人类参与的情况下处理和评估某些数据。

这样的实际实例之一是使用人工神经网络(ANN)识别图像中的对象。在构建一个识别“猫“图像的一个系统中,将在包含标记为“猫”的图像的数据集上训练人工神经网络,该数据集可用作任何进行分析的参考点。正如人们可能学会根据尾巴或皮毛等独特特征来识别狗一样,人工神经网络(ANN)也可以通过将每个图像分解成不同的组成部分(如颜色和形状)进行识别。

实际上,神经网络提供了位于托管数据之上的排序和分类级别,可基于相似度来辅助数据的聚类和分组。可以使用人工神经网络(ANN)生成复杂的垃圾邮件过滤器,查找欺诈行为的算法以及可以精确了解情绪的客户关系工具。

人工神经网络如何工作

人工神经网络的灵感来自人脑的神经组织,使用类似于神经元的计算节点构造而成,这些节点沿着通道(如神经突触的工作方式)进行信息交互。这意味着一个计算节点的输出将影响另一个计算节点的处理。

神经网络标志着人工智能发展的巨大飞跃,在此之前,人工智能一直依赖于使用预定义的过程和定期的人工干预来产生所需的结果。人工神经网络可以使分析负载分布在多个互连层的网络中,每个互连层包含互连节点。在处理信息并对其进行场景处理之后,信息将传递到下一个节点,然后向下传递到各个层。这个想法是允许将其他场景信息接入网络,以通知每个阶段的处理。

单个“隐藏”层神经网络的基本结构

就像渔网的结构一样,神经网络的一个单层使用链将处理节点连接在一起。大量的连接使这些节点之间的通信得到增强,从而提高了准确性和数据处理吞吐量。

然后,人工神经网络将许多这样的层相互叠放以分析数据,从而创建从第一层到最后一层的输入和输出数据流。尽管其层数将根据人工神经网络的性质及其任务而变化,但其想法是将数据从一层传递到另一层,并随其添加附加的场景信息。

人脑是用3D矩阵连接起来的,而不是大量堆叠的图层。就像人类大脑一样,节点在接收到特定刺激时会在人工神经网络上“发射”信号,并将信号传递到另一个节点。但是,对于人工神经网络,输入信号定义为实数,输出为各种输入的总和。

这些输入的值取决于它们的权重,该权重用于增加或减少与正在执行的任务相对应的输入数据的重要性。其目标是采用任意数量的二进制数值输入并将其转换为单个二进制数值输出。

更复杂的神经网络提高了数据分析的复杂性

早期的神经网络模型使用浅层结构,其中只使用一个输入和输出层。而现代的系统由一个输入层和一个输出层组成,其中输入层首先将数据输入网络,多个“隐藏”层增加了数据分析的复杂性。

这就是“深度学习”一词的由来——“深度”部分专门指任何使用多个“隐藏”层的神经网络。

聚会的例子

为了说明人工神经网络在实际中是如何工作的,我们将其简化为一个实际示例。

想象一下你被邀请参加一个聚会,而你正在决定是否参加,这可能需要权衡利弊,并将各种因素纳入决策过程。在此示例中,只选择三个因素——“我的朋友会去吗?”、“聚会地点远吗?”、“天气会好吗?”

通过将这些考虑因素转换为二进制数值,可以使用人工神经网络对该过程进行建模。例如,我们可以为“天气”指定一个二进制数值,即‘1'代表晴天,‘0'代表恶劣天气。每个决定因素将重复相同的格式。

然而,仅仅赋值是不够的,因为这不能帮助你做出决定。为此需要定义一个阈值,即积极因素的数量超过消极因素的数量。根据二进制数值,合适的阈值可以是“2”。换句话说,在决定参加聚会之前,需要两个因素的阈值都是“1”,你才会决定去参加聚会。如果你的朋友要参加聚会(‘1'),并且天气很好(‘1'),那么这就表示你可以参加聚会。

如果天气不好(‘0'),并且聚会地点很远(‘0'),则达不到这一阈值,即使你的朋友参加(‘1'),你也不会参加聚会。

神经加权

诚然,这是神经网络基本原理的一个非常基本的例子,但希望它有助于突出二进制值和阈值的概念。然而,决策过程要比这个例子复杂得多,而且通常情况下,一个因素比另一个因素对决策过程的影响更大。

要创建这种变化,可以使用“神经加权”——-通过乘以因素的权重来确定因素的二进制值对其他因素的重要性。

尽管示例中的每个注意事项都可能使你难以决策,但你可能会更重视其中一个或两个因素。如果你不愿意在大雨中出行去聚会,那恶劣的天气将会超过其他两个考虑因素。在这一示例中,可以通过赋予更高的权重来更加重视天气因素的二进制值:

天气= w5

朋友= w2

距离= w2

如果假设阈值现在已设置为6,则恶劣的天气(值为0)将阻止其余输入达到所需的阈值,因此该节点将不会“触发”(这意味着你将决定不参加聚会)。

虽然这是一个简单的示例,但它提供了基于提供的权重做出决策的概述。如果要将其推断为图像识别系统,则是否参加聚会(输入)的各种考虑因素将是给定图像的折衷特征,即颜色、大小或形状。例如,对识别狗进行训练的系统可以对形状或颜色赋予更大的权重。

当神经网络处于训练状态时,权重和阈值将设置为随机值。然后,当训练数据通过网络传递时将不断进行调整,直到获得一致的输出为止。

神经网络的好处

神经网络可以有机地学习。也就是说,神经网络的输出结果并不受输入数据的完全限制。人工神经网络可以概括输入数据,使其在模式识别系统中具有价值。

他们还可以找到实现计算密集型答案的捷径。人工神经网络可以推断数据点之间的关系,而不是期望数据源中的记录是明确关联的。

它们也可以是容错的。当神经网络扩展到多个系统时,它们可以绕过无法通信的缺失节点。除了围绕网络中不再起作用的部分进行路由之外,人工神经网络还可以通过推理重新生成数据,并帮助确定不起作用的节点。这对于网络的自诊断和调试非常有用。

但是,深度神经网络提供的最大优势是能够处理和聚类非结构化数据,例如图片、音频文件、视频、文本、数字等数据。在分析层次结构中,每一层节点都在前一层的输出上进行训练,深层神经网络能够处理大量的这种非结构化数据,以便在人类处理分析之前找到相似之处。

神经网络的例子

神经网络应用还有许多示例,可以利用它从复杂或不精确数据中获得见解的能力。

图像识别人工神经网络可以解决诸如分析特定物体的照片等问题。这种算法可以用来区分狗和猫。更重要的是,神经网络已经被用于只使用细胞形状信息来诊断癌症。

近30年来,金融神经网络被用于汇率预测、股票表现和选择预测。神经网络也被用来确定贷款信用评分,学习正确识别良好的或糟糕的信用风险。而电信神经网络已被电信公司用于通过实时评估网络流量来优化路由和服务质量。

B. 人工神经网络由哪几部分构成

"人工神经网络"共有13个神经元构成,4个为输入神经元,1个为输 出神经元。也就是说,这个程序最多能处理一个四元关系(包含了二元, 三元)。

C. 图神经网络是怎么炼成的:GNN基本原理简介

此文算是对Google Research这篇 A Gentle Introction to Graph Neural Networks 神作的阅读笔记.

十多年来,研究人员开发了一种称之为图神经网络(Graph Neural Networks,GNNs)的技术,旨在将如今在深度学习的诸多任务中摧枯拉朽的神经网络,应用到图结构之上,从而让神经网络捕捉到更错综复杂的交叉特征,以期待在一些任务上取得更佳的效果。鉴于操作图数据结构的复杂性,尽管已经发展了十几年,它在实际应用中却刚刚起步,即时是google也才开始研究将其被应用到药品研发、物理模拟、假新闻检测、交通预测和推荐系统等领域。

尽管GNN是一个新兴的研究领域,但图结构的数据其实在我们身边无处不在。那么什么是图呢?

这个理科生应该都清楚,图有点(Vertex)和边(Edge)两部分组成,一个图就代表了各个实体节点(node)之间的关系(edge):

每个节点或者边都可以包含它的一些属性信息,比如如果一个节点表示一个人,那么就可以包含这个人的姓名、性别、身高、体重之类的..我们研究需要的信息。
而这些信息,都可以用通用的向量的形式存入其中:

还有别忘了一点,边是可以有方向的,按此我们还能分为有向图或是无向图。边的方向代表了信息的传递方向,例如a是b的微信好友,那b也是a的微信好友,好友关系自然是没方向的,而比如a是b的爹,那显然b就不是a的爹,此时叫爹的关系就是有有方向的。

图结构的构建是非常灵活的,可以根据个人的设计构建出各种不一样的图。而作为开发者显然要结合实际解决的问题来构建合适的图。

正如前面所提到的,图无处不在。你可能已经熟悉例如知识图谱、社交网络之类的图数据。当时显然,图是一种极其强大的通用数据表示,传统神经网络中用到的欧式空间的数据,同样可以用图来表示,例如可以将图像和文本建模为图结构数据。

比如,我们可以将一张图片的每个像素作为图的节点,再将相邻的像素用边连接起来,就构造了一个该图像的图。

如上图展示了一个5*5的图片的邻接矩阵表示和图表示。

我们将每个单词作为节点,并将每个节点连接到下一个节点,就得到了一个文本的图:

当然,在实践中我们并不会这样来编码文本和图像,因为所有的图和文本都是非常规则的结构,表示成图就多此一举了。
我们再来看一些例子,这些数据的结构更加复杂,除了图之外很难用其他方式来表达。

分子是构成物质的基石,我们可以用节点来表示它的原子和电子,用边来表示共价键,这样便将一个分子表示成了一个图:

不同的图可以表示出不同的分子结构:

都说社会是一个大熔炉,身处其中的人和事物之间会发生极其复杂的关系。这种关系的表示用普通的表格数据是很难表示的,而图却能很好的展现。

下图是将莎士比亚歌剧《奥赛罗》中的任务关系表示成图:

怎么样,如果没看过歌剧能推测出那些是主角吗?

下面是将一个空手道竞标赛的对战关系构建为图:

类似的可以表示为图的数据还有很多很多,比如论文的引用之类统统都可以表示为图,下面是现实世界中不同规模的数据图表示的统计数据:

可见,各种各样规模的数据都可以轻松的用图来表示。

在上面我们列举了这么多的图,那么我们该对这些图数据执行什么任务呢?

图上的预测任务一般分为三类:

下面我们通过具体的示例来说明GNN怎么来解决上述的三个级别的预测问题。

在图级别的任务中,我们的目标是预测整个图的属性。例如我们通过分子图,来预测该分子的气味或是者它是否是与某些疾病有关的受体。
它的输入是完整的图:

输出是图的分类:

节点级任务一般就是预测每个节点的类型。
一个经典的例子就是Zach的空手道俱乐部。该数据集市一个单一的社交网络图,犹豫政治分歧,讲师Hi先生和管理员John之间不和导致空手道俱乐部分裂,其中的学员一部分效忠于Hi先生,一部分效忠于John。每个节点代表空手道联系着,边代表空手道之外这些成员的互动,预测问题就是判断这些节点是效忠于谁的。

边级任务其实就是预测每个边的属性.
在目标检测的语义分割任务中,我们也许不止要识别每个目标的类型,还需要预测各个目标之间的关系.我们可以将其描述为边级别的分类任务:给定表示图像中的对象的节点,我们希望预测哪些节点共享一条边,或者该边的值是多少。如果我们希望发现实体之间的连接,我们可以考虑图是完全连通的,并根据它们的预测值修剪边来得到一个稀疏图。

用图表示就是这样的过程:

那么我们要如何使用神经网络来处理上述各种类型的任务呢?

首先要考虑的是如何将图结构数据适配到神经网络.
回想一下啊,传统的神经网络输入的往往是矩阵形式的数据,那么要如何把图作为输入呢?
图表示有四种类型的信息:节点(nodes),边(edges),全局上下文(global-context),联通性(connectivity).对于前三种信息,有一个非常简单的方案,比如将节点排序,然后每个节点表示为一个向量,所有节点就得到了一个节点的矩阵,同理,边和上下文也可以这么搞.
但是要标识连通性就没有这么简单了,也许你会想到用临街矩阵来表示,但是这样表示会有明显的缺陷,因为节点数的规模往往是巨大的,对于一个数百万节点的图,那将耗费大量的空间,而且得到的矩阵往往也十分的稀疏,可以说空间利用率会很低.
当然,你也许会想,可以用稀疏矩阵来存储,这样就只需要存储连通的情况,空间利用率将大大提升,但是我们还要考虑到一点,就是稀疏矩阵的高性能计算一直是个艰难的,尤其是在用到GPU的情况.
并且,使用邻接矩阵还有一个问题就是各种不同的邻接矩阵可以标识相同的连通性,而这些矩阵并不能保证在神经网络中取的相同的效果.比如,同样的连通性,通过调换列的顺序,就能得到不同的邻接矩阵:

现在,我们成功的将图结构成功表示成了置换不变的矩阵格式,终于可以使用图形神经网络(GNN)来做图形预测任务了。
GNN是对保持图对称性(置换不变性)的图的所有属性(节点、边、全局上下文)的可优化变换。
我们将使用Gilmer等人提出的“消息传递神经网络”框架构建GNN,并使用Battaglia等人介绍的图网络网络架构示意图。GNNS采用“图输入,图输出”架构,这意味着这些模型类型接受图作为输入,其中包含节点,边和全局上下文的信息,并逐步地转换这些图嵌入,而不会更改输入的连接图结构。

我们使用最开始提到的那个图来构建一个最简单的GNN,输入的图是相应节点,边,全局信息的向量,我们针对每个向量使用一个MLP层来作变换,于是得到一个新的图.

针对上述构建的最简单的GNN,我们如何在上面描述的任何任务中进行预测呢?这里我们仅仅考虑二进制分类的情况,但这个框架可以很容易地扩展到多类或回归的情况。
如果是对节点分类,我们只要在最后一层接一个线性类器就可以了:

但是上面的预测过程有点过于简单了,完全没有用到图的结构信息,我们在此基础上增加一个pooling操作,以增加它的边缘信息:

具体操作是把待预测节点的邻居节点以及全局的信息进行聚合再做预测,即将这些embedding向量加到一起得到一个新的向量,再输入到最后的线性分类器.

同理,如果我们只有节点相应边的信息的话,也可以用类似的方式pooling,然后得到节点的向量表示再输入分类器:

反之,如果我们只有节点的信息,那么也可以用边所连接的两个节点来pooling出边的向量,然后将器输入到分类器预测边的类型:

显然,不管是哪种任务,整个GNN的推理过程都是一样的,可以表示为这样一个端到端的过程:

不过,显而易见的,这个简单的GNN在分类前只是对每个向量进行了一个变换,而没有用到图结构的任何信息,虽然在最后做预测的时候做了一些pooling的聚合,但也始终没有用到adjacency的信息,因此这个GNN的作用相当有限,但是它为我们提供了一个图结构层变换和堆叠的基本思路.

针对上面最简单GNN的不足,我们可以在其中根据连通性增加更加复杂的变换从而引入整个图结构的信息,我们将这个过程称之为信息传递.
信息传递包含三个步骤:

这个过程有点类似于卷积操作,每个节点汇聚了其邻居的节点,经过多个层的变换,它将涵盖全图的信息.
于是我们可以将这个节点信息传递应用到上述的图变换过程中:

然后,我们发现它并没用用上边的信息,于是可以把边信息也加上,变成这样:

既然把边的信息加上了,那怎么可以漏掉全局信息呢,于是完整的信息传递就可以表示成这样:

以上,我们梳理了最简单的GNNs是怎么完成的,你应该已经对GNN有了一个基本的了解,就像学会了传统神经网络中最简单的全连接网络类似,关于GNN还有更多不同种类的更复杂的图需要取了解和学习,但你只要掌握了以上的思想,学习起来也是十分容易的.

D. 神经网络编程入门

听到 神经网络 这个词,从直觉上我们会想到大脑,的确,我们可以将大脑看成一个大型的天然神经网络。然而,人工神经网络又是什么呢?人工是一个与天然相对的词,我们首先想到的就是人工大脑或者机器人,这就是所谓的人工。在这种情况下,受人脑的启发,我们创建出一个和人脑相似的结构,称之为人工智能。

结合人脑的特点和结构,可以说人工神经网络是一种自然启发的方法。每个神经元与许多其他神经元相接,这些神经元又会和其他大量神经元相连,形成一个高度互连的结构。神经元之间的连通性解释了学习能力,因为每个连接都可以根据刺激和期望目标进行配置。

人工神经元

人工神经元是最基本的人工神经元素,已证明生物神经元是信号处理器,神经元中的树突会根据接受信号的强弱和振幅。发送信号到轴突。可以这样认为,神经元在输入上有一个信号收集器,在输出上有一个激活单元,它可以触发一个新的信号,然后传递给其他神经元。

激活函数

激活函数是指一个神经元根据输入信号,执行计算并产生输出。从数学方面讲,激活函数用于为神经网络模型的处理加入非线性因素,从而提供人工神经网络的非线性行为,这对模拟生物神经元的非线性特征非常有用。激活函数通常是一个非线性函数,输出限制在某个区间范围内,但某些特定情况下,也可以是线性函数。

权重

尽管神经网络的结构能固定,但通过神经元之间的连接权重能够增强或减弱接收到的神经信号,所以可以通过修改权重影响神经元的输出。因此,神经元的激活不仅依赖输入信号,还依赖权重。如果输入来自其他神经元或者外部世界,权重可以看成神经网络在神经元之间建立的连接。

偏置

作为一个独立组件,偏置主要为激活函数增加一个额外信号,这对人工神经元非常有用。

为抽象化处理层次,如我们大脑处理问题的方式,神经元按层组织。输入层接受外部世界的直接刺激,输出层触发一些行为,对外部世界产生直接影响。输入层和输出层之间,有许多隐含层,某种意义上,这些隐含层对外部世界不可见。在人工神经网络中,同一层的所有神经元具有相同的输入和激活函数。

神经网络可以有不同的布局,主要取决于神经元或层之间是如何连接的,每一个神经网络体系结构都是为特定目标而设计。神经网络可以应用于许多问题,根据问题的性质,神经网络旨在高效解决问题。

单层网络

单层网络体系中,所有神经元都处于同一层,形成单个层。

多层网络

多层网络中,神经元分成多个层,每层对应神经元的一个平行布局,每层神经元都共享相同的输入数据。

前馈网络

神经网络中的信号流动可以是单向的,也可以是递归的。对于第一种结构,称之为前馈网络,输入信号被送入输入层,经过处理后向前传递到下一层。多层感知机和径向基函数都是前馈网络

反馈网络

当神经网络中有某种内部递归时,这意味着信号会反向传递到已经接受或已经处理过信号的神经元或层,这类网络类型为反馈网络。

E. 人工神经元网络的拓扑结构主要有哪几种谢谢大侠~~~

神经网络的拓扑结构包括网络层数、各层神经元数量以及各神经元之间相互连接的方式。

人工神经网络的模型从其拓扑结构角度去看,可分为层次型和互连型。层次型模型是将神经网络分为输入层(Input Layer)、隐层(Hidden Layer)和输出层(Output Layer),各层顺序连接。其中,输入层神经元负责接收来自外界的输入信息,并将其传递给隐层神经元。隐层负责神经网络内部的信息处理、信息变换。通常会根据变换的需要,将隐层设计为一层或多层。

(5)人工神经网络是如何搭建的扩展阅读:

人工神经网络模型主要考虑网络连接的拓扑结构、神经元的特征、学习规则等。目前,已有近40种神经网络模型,其中有反传网络、感知器、自组织映射、Hopfield网络、波耳兹曼机、适应谐振理论等。

人工神经网络采用了与传统人工智能和信息处理技术完全不同的机理,克服了传统的基于逻辑符号的人工智能在处理直觉、非结构化信息方面的缺陷,具有自适应、自组织和实时学习的特点。

F. 如何建立神经网络模型

人工神经网络有很多种,我只会最常用的BP神经网络。不同的网络有不同的结构和不同的学习算法。
简单点说,人工神经网络就是一个函数。只是这个函数有别于一般的函数。它比普通的函数多了一个学习的过程。
在学习的过程中,它根据正确结果不停地校正自己的网络结构,最后达到一个满意的精度。这时,它才开始真正的工作阶段。
学习人工神经网络最好先安装MathWords公司出的MatLab软件。利用该软件,你可以在一周之内就学会建立你自己的人工神经网络解题模型。
如果你想自己编程实现人工神经网络,那就需要找一本有关的书籍,专门看神经网络学习算法的那部分内容。因为“学习算法”是人工神经网络的核心。最常用的BP人工神经网络,使用的就是BP学习算法。

G. 人工神经网络概念梳理与实例演示

人工神经网络概念梳理与实例演示
神经网络是一种模仿生物神经元的机器学习模型,数据从输入层进入并流经激活阈值的多个节点。
递归性神经网络一种能够对之前输入数据进行内部存储记忆的神经网络,所以他们能够学习到数据流中的时间依赖结构。
如今机器学习已经被应用到很多的产品中去了,例如,siri、Google Now等智能助手,推荐引擎——亚马逊网站用于推荐商品的推荐引擎,Google和Facebook使用的广告排名系统。最近,深度学习的一些进步将机器学习带入公众视野:AlphaGo 打败围棋大师李世石事件以及一些图片识别和机器翻译等新产品的出现。
在这部分中,我们将介绍一些强大并被普遍使用的机器学习技术。这当然包括一些深度学习以及一些满足现代业务需求传统方法。读完这一系列的文章之后,你就掌握了必要的知识,便可以将具体的机器学习实验应用到你所在的领域当中。
随着深层神经网络的精度的提高,语音和图像识别技术的应用吸引了大众的注意力,关于AI和深度学习的研究也变得更加普遍了。但是怎么能够让它进一步扩大影响力,更受欢迎仍然是一个问题。这篇文章的主要内容是:简述前馈神经网络和递归神经网络、怎样搭建一个递归神经网络对时间系列数据进行异常检测。为了让我们的讨论更加具体化,我们将演示一下怎么用Deeplearning4j搭建神经网络。
一、什么是神经网络?
人工神经网络算法的最初构思是模仿生物神经元。但是这个类比很不可靠。人工神经网络的每一个特征都是对生物神经元的一种折射:每一个节点与激活阈值、触发的连接。
连接人工神经元系统建立起来之后,我们就能够对这些系统进行训练,从而让他们学习到数据中的一些模式,学到之后就能执行回归、分类、聚类、预测等功能。
人工神经网络可以看作是计算节点的集合。数据通过这些节点进入神经网络的输入层,再通过神经网络的隐藏层直到关于数据的一个结论或者结果出现,这个过程才会停止。神经网络产出的结果会跟预期的结果进行比较,神经网络得出的结果与正确结果的不同点会被用来更正神经网络节点的激活阈值。随着这个过程的不断重复,神经网络的输出结果就会无限靠近预期结果。
二、训练过程
在搭建一个神经网络系统之前,你必须先了解训练的过程以及网络输出结果是怎么产生的。然而我们并不想过度深入的了解这些方程式,下面是一个简短的介绍。
网络的输入节点收到一个数值数组(或许是叫做张量多维度数组)就代表输入数据。例如, 图像中的每个像素可以表示为一个标量,然后将像素传递给一个节点。输入数据将会与神经网络的参数相乘,这个输入数据被扩大还是减小取决于它的重要性,换句话说,取决于这个像素就不会影响神经网络关于整个输入数据的结论。
起初这些参数都是随机的,也就是说神经网络在建立初期根本就不了解数据的结构。每个节点的激活函数决定了每个输入节点的输出结果。所以每个节点是否能够被激活取决于它是否接受到足够的刺激强度,即是否输入数据和参数的结果超出了激活阈值的界限。
在所谓的密集或完全连接层中,每个节点的输出值都会传递给后续层的节点,在通过所有隐藏层后最终到达输出层,也就是产生输入结果的地方。在输出层, 神经网络得到的最终结论将会跟预期结论进行比较(例如,图片中的这些像素代表一只猫还是狗?)。神经网络猜测的结果与正确结果的计算误差都会被纳入到一个测试集中,神经网络又会利用这些计算误差来不断更新参数,以此来改变图片中不同像素的重要程度。整个过程的目的就是降低输出结果与预期结果的误差,正确地标注出这个图像到底是不是一条狗。
深度学习是一个复杂的过程,由于大量的矩阵系数需要被修改所以它就涉及到矩阵代数、衍生品、概率和密集的硬件使用问题,但是用户不需要全部了解这些复杂性。
但是,你也应该知道一些基本参数,这将帮助你理解神经网络函数。这其中包括激活函数、优化算法和目标函数(也称为损失、成本或误差函数)。
激活函数决定了信号是否以及在多大程度上应该被发送到连接节点。阶梯函数是最常用的激活函数, 如果其输入小于某个阈值就是0,如果其输入大于阈值就是1。节点都会通过阶梯激活函数向连接节点发送一个0或1。优化算法决定了神经网络怎么样学习,以及测试完误差后,权重怎么样被更准确地调整。最常见的优化算法是随机梯度下降法。最后, 成本函数常用来衡量误差,通过对比一个给定训练样本中得出的结果与预期结果的不同来评定神经网络的执行效果。
Keras、Deeplearning4j 等开源框架让创建神经网络变得简单。创建神经网络结构时,需要考虑的是怎样将你的数据类型匹配到一个已知的被解决的问题,并且根据你的实际需求来修改现有结构。
三、神经网络的类型以及应用
神经网络已经被了解和应用了数十年了,但是最近的一些技术趋势才使得深度神经网络变得更加高效。
GPUs使得矩阵操作速度更快;分布式计算结构让计算能力大大增强;多个超参数的组合也让迭代的速度提升。所有这些都让训练的速度大大加快,迅速找到适合的结构。
随着更大数据集的产生,类似于ImageNet 的大型高质量的标签数据集应运而生。机器学习算法训练的数据越大,那么它的准确性就会越高。
最后,随着我们理解能力以及神经网络算法的不断提升,神经网络的准确性在语音识别、机器翻译以及一些机器感知和面向目标的一些任务等方面不断刷新记录。
尽管神经网络架构非常的大,但是主要用到的神经网络种类也就是下面的几种。
3.1前馈神经网络
前馈神经网络包括一个输入层、一个输出层以及一个或多个的隐藏层。前馈神经网络可以做出很好的通用逼近器,并且能够被用来创建通用模型。
这种类型的神经网络可用于分类和回归。例如,当使用前馈网络进行分类时,输出层神经元的个数等于类的数量。从概念上讲, 激活了的输出神经元决定了神经网络所预测的类。更准确地说, 每个输出神经元返回一个记录与分类相匹配的概率数,其中概率最高的分类将被选为模型的输出分类。
前馈神经网络的优势是简单易用,与其他类型的神经网络相比更简单,并且有一大堆的应用实例。
3.2卷积神经网络
卷积神经网络和前馈神经网络是非常相似的,至少是数据的传输方式类似。他们结构大致上是模仿了视觉皮层。卷积神经网络通过许多的过滤器。这些过滤器主要集中在一个图像子集、补丁、图块的特征识别上。每一个过滤器都在寻找不同模式的视觉数据,例如,有的可能是找水平线,有的是找对角线,有的是找垂直的。这些线条都被看作是特征,当过滤器经过图像时,他们就会构造出特征图谱来定位各类线是出现在图像的哪些地方。图像中的不同物体,像猫、747s、榨汁机等都会有不同的图像特征,这些图像特征就能使图像完成分类。卷积神经网络在图像识别和语音识别方面是非常的有效的。
卷积神经网络与前馈神经网络在图像识别方面的异同比较。虽然这两种网络类型都能够进行图像识别,但是方式却不同。卷积神经网络是通过识别图像的重叠部分,然后学习识别不同部分的特征进行训练;然而,前馈神经网络是在整张图片上进行训练。前馈神经网络总是在图片的某一特殊部分或者方向进行训练,所以当图片的特征出现在其他地方时就不会被识别到,然而卷积神经网络却能够很好的避免这一点。
卷积神经网络主要是用于图像、视频、语音、声音识别以及无人驾驶的任务。尽管这篇文章主要是讨论递归神经网络的,但是卷积神经网络在图像识别方面也是非常有效的,所以很有必要了解。
3.3递归神经网络
与前馈神经网络不同的是,递归神经网络的隐藏层的节点里有内部记忆存储功能,随着输入数据的改变而内部记忆内容不断被更新。递归神经网络的结论都是基于当前的输入和之前存储的数据而得出的。递归神经网络能够充分利用这种内部记忆存储状态处理任意序列的数据,例如时间序列。
递归神经网络经常用于手写识别、语音识别、日志分析、欺诈检测和网络安全
递归神经网络是处理时间维度数据集的最好方法,它可以处理以下数据:网络日志和服务器活动、硬件或者是医疗设备的传感器数据、金融交易、电话记录。想要追踪数据在不同阶段的依赖和关联关系需要你了解当前和之前的一些数据状态。尽管我们通过前馈神经网络也可以获取事件,随着时间的推移移动到另外一个事件,这将使我们限制在对事件的依赖中,所以这种方式很不灵活。
追踪在时间维度上有长期依赖的数据的更好方法是用内存来储存重要事件,以使近期事件能够被理解和分类。递归神经网络最好的一点就是在它的隐藏层里面有“内存”可以学习到时间依赖特征的重要性。
接下来我们将讨论递归神经网络在字符生成器和网络异常检测中的应用。递归神经网络可以检测出不同时间段的依赖特征的能力使得它可以进行时间序列数据的异常检测。
递归神经网络的应用
网络上有很多使用RNNs生成文本的例子,递归神经网络经过语料库的训练之后,只要输入一个字符,就可以预测下一个字符。下面让我们通过一些实用例子发现更多RNNs的特征。
应用一、RNNs用于字符生成
递归神经网络经过训练之后可以把英文字符当做成一系列的时间依赖事件。经过训练后它会学习到一个字符经常跟着另外一个字符(“e”经常跟在“h”后面,像在“the、he、she”中)。由于它能预测下一个字符是什么,所以它能有效地减少文本的输入错误。
Java是个很有趣的例子,因为它的结构包括很多嵌套结构,有一个开的圆括号必然后面就会有一个闭的,花括号也是同理。他们之间的依赖关系并不会在位置上表现的很明显,因为多个事件之间的关系不是靠所在位置的距离确定的。但是就算是不明确告诉递归神经网络Java中各个事件的依赖关系,它也能自己学习了解到。
在异常检测当中,我们要求神经网络能够检测出数据中相似、隐藏的或许是并不明显的模式。就像是一个字符生成器在充分地了解数据的结构后就会生成一个数据的拟像,递归神经网络的异常检测就是在其充分了解数据结构后来判断输入的数据是不是正常。
字符生成的例子表明递归神经网络有在不同时间范围内学习到时间依赖关系的能力,它的这种能力还可以用来检测网络活动日志的异常。
异常检测能够使文本中的语法错误浮出水面,这是因为我们所写的东西是由语法结构所决定的。同理,网络行为也是有结构的,它也有一个能够被学习的可预测模式。经过在正常网络活动中训练的递归神经网络可以监测到入侵行为,因为这些入侵行为的出现就像是一个句子没有标点符号一样异常。
应用二、一个网络异常检测项目的示例
假设我们想要了解的网络异常检测就是能够得到硬件故障、应用程序失败、以及入侵的一些信息。
模型将会向我们展示什么呢?
随着大量的网络活动日志被输入到递归神经网络中去,神经网络就能学习到正常的网络活动应该是什么样子的。当这个被训练的网络被输入新的数据时,它就能偶判断出哪些是正常的活动,哪些是被期待的,哪些是异常的。
训练一个神经网络来识别预期行为是有好处的,因为异常数据不多,或者是不能够准确的将异常行为进行分类。我们在正常的数据里进行训练,它就能够在未来的某个时间点提醒我们非正常活动的出现。
说句题外话,训练的神经网络并不一定非得识别到特定事情发生的特定时间点(例如,它不知道那个特殊的日子就是周日),但是它一定会发现一些值得我们注意的一些更明显的时间模式和一些可能并不明显的事件之间的联系。
我们将概述一下怎么用 Deeplearning4j(一个在JVM上被广泛应用的深度学习开源数据库)来解决这个问题。Deeplearning4j在模型开发过程中提供了很多有用的工具:DataVec是一款为ETL(提取-转化-加载)任务准备模型训练数据的集成工具。正如Sqoop为Hadoop加载数据,DataVec将数据进行清洗、预处理、规范化与标准化之后将数据加载到神经网络。这跟Trifacta’s Wrangler也相似,只不过它更关注二进制数据。
开始阶段
第一阶段包括典型的大数据任务和ETL:我们需要收集、移动、储存、准备、规范化、矢量话日志。时间跨度的长短是必须被规定好的。数据的转化需要花费一些功夫,这是由于JSON日志、文本日志、还有一些非连续标注模式都必须被识别并且转化为数值数组。DataVec能够帮助进行转化和规范化数据。在开发机器学习训练模型时,数据需要分为训练集和测试集。
训练神经网络
神经网络的初始训练需要在训练数据集中进行。
在第一次训练的时候,你需要调整一些超参数以使模型能够实现在数据中学习。这个过程需要控制在合理的时间内。关于超参数我们将在之后进行讨论。在模型训练的过程中,你应该以降低错误为目标。
但是这可能会出现神经网络模型过度拟合的风险。有过度拟合现象出现的模型往往会在训练集中的很高的分数,但是在遇到新的数据时就会得出错误结论。用机器学习的语言来说就是它不够通用化。Deeplearning4J提供正则化的工具和“过早停止”来避免训练过程中的过度拟合。
神经网络的训练是最花费时间和耗费硬件的一步。在GPUs上训练能够有效的减少训练时间,尤其是做图像识别的时候。但是额外的硬件设施就带来多余的花销,所以你的深度学习的框架必须能够有效的利用硬件设施。Azure和亚马逊等云服务提供了基于GPU的实例,神经网络还可以在异构集群上进行训练。
创建模型
Deeplearning4J提供ModelSerializer来保存训练模型。训练模型可以被保存或者是在之后的训练中被使用或更新。
在执行异常检测的过程中,日志文件的格式需要与训练模型一致,基于神经网络的输出结果,你将会得到是否当前的活动符合正常网络行为预期的结论。
代码示例
递归神经网络的结构应该是这样子的:
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder(
.seed(123)
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1)
.weightInit(WeightInit.XAVIER)
.updater(Updater.NESTEROVS).momentum(0.9)
.learningRate(0.005)
.gradientNormalization(GradientNormalization.ClipElementWiseAbsoluteValue)
.(0.5)
.list()
.layer(0, new GravesLSTM.Builder().activation("tanh").nIn(1).nOut(10).build())
.layer(1, new RnnOutputLayer.Builder(LossFunctions.LossFunction.MCXENT)
.activation("softmax").nIn(10).nOut(numLabelClasses).build())
.pretrain(false).backprop(true).build();
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();
下面解释一下几行重要的代码:
.seed(123)
随机设置一个种子值对神经网络的权值进行初始化,以此获得一个有复验性的结果。系数通常都是被随机的初始化的,以使我们在调整其他超参数时仍获得一致的结果。我们需要设定一个种子值,让我们在调整和测试的时候能够用这个随机的权值。
.optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).iterations(1)
决定使用哪个最优算法(在这个例子中是随机梯度下降法)来调整权值以提高误差分数。你可能不需要对这个进行修改。
.learningRate(0.005)
当我们使用随机梯度下降法的时候,误差梯度就被计算出来了。在我们试图将误差值减到最小的过程中,权值也随之变化。SGD给我们一个让误差更小的方向,这个学习效率就决定了我们该在这个方向上迈多大的梯度。如果学习效率太高,你可能是超过了误差最小值;如果太低,你的训练可能将会永远进行。这是一个你需要调整的超参数。

H. 从零开始用Python构建神经网络

从零开始用Python构建神经网络
动机:为了更加深入的理解深度学习,我们将使用 python 语言从头搭建一个神经网络,而不是使用像 Tensorflow 那样的封装好的框架。我认为理解神经网络的内部工作原理,对数据科学家来说至关重要。
这篇文章的内容是我的所学,希望也能对你有所帮助。
神经网络是什么?
介绍神经网络的文章大多数都会将它和大脑进行类比。如果你没有深入研究过大脑与神经网络的类比,那么将神经网络解释为一种将给定输入映射为期望输出的数学关系会更容易理解。
神经网络包括以下组成部分
? 一个输入层,x
? 任意数量的隐藏层
? 一个输出层,?
? 每层之间有一组权值和偏置,W and b
? 为隐藏层选择一种激活函数,σ。在教程中我们使用 Sigmoid 激活函数
下图展示了 2 层神经网络的结构(注意:我们在计算网络层数时通常排除输入层)

2 层神经网络的结构
用 Python 可以很容易的构建神经网络类

训练神经网络
这个网络的输出 ? 为:

你可能会注意到,在上面的等式中,输出 ? 是 W 和 b 函数。
因此 W 和 b 的值影响预测的准确率. 所以根据输入数据对 W 和 b 调优的过程就被成为训练神经网络。
每步训练迭代包含以下两个部分:
? 计算预测结果 ?,这一步称为前向传播
? 更新 W 和 b,,这一步成为反向传播
下面的顺序图展示了这个过程:

前向传播
正如我们在上图中看到的,前向传播只是简单的计算。对于一个基本的 2 层网络来说,它的输出是这样的:

我们在 NeuralNetwork 类中增加一个计算前向传播的函数。为了简单起见我们假设偏置 b 为0:

但是我们还需要一个方法来评估预测结果的好坏(即预测值和真实值的误差)。这就要用到损失函数。
损失函数
常用的损失函数有很多种,根据模型的需求来选择。在本教程中,我们使用误差平方和作为损失函数。
误差平方和是求每个预测值和真实值之间的误差再求和,这个误差是他们的差值求平方以便我们观察误差的绝对值。
训练的目标是找到一组 W 和 b,使得损失函数最好小,也即预测值和真实值之间的距离最小。
反向传播
我们已经度量出了预测的误差(损失),现在需要找到一种方法来传播误差,并以此更新权值和偏置。
为了知道如何适当的调整权值和偏置,我们需要知道损失函数对权值 W 和偏置 b 的导数。
回想微积分中的概念,函数的导数就是函数的斜率。

梯度下降法
如果我们已经求出了导数,我们就可以通过增加或减少导数值来更新权值 W 和偏置 b(参考上图)。这种方式被称为梯度下降法。
但是我们不能直接计算损失函数对权值和偏置的导数,因为在损失函数的等式中并没有显式的包含他们。因此,我们需要运用链式求导发在来帮助计算导数。

链式法则用于计算损失函数对 W 和 b 的导数。注意,为了简单起见。我们只展示了假设网络只有 1 层的偏导数。
这虽然很简陋,但是我们依然能得到想要的结果—损失函数对权值 W 的导数(斜率),因此我们可以相应的调整权值。
现在我们将反向传播算法的函数添加到 Python 代码中

为了更深入的理解微积分原理和反向传播中的链式求导法则,我强烈推荐 3Blue1Brown 的如下教程:
Youtube:https://youtu.be/tIeHLnjs5U8
整合并完成一个实例
既然我们已经有了包括前向传播和反向传播的完整 Python 代码,那么就将其应用到一个例子上看看它是如何工作的吧。

神经网络可以通过学习得到函数的权重。而我们仅靠观察是不太可能得到函数的权重的。
让我们训练神经网络进行 1500 次迭代,看看会发生什么。 注意观察下面每次迭代的损失函数,我们可以清楚地看到损失函数单调递减到最小值。这与我们之前介绍的梯度下降法一致。

让我们看看经过 1500 次迭代后的神经网络的最终预测结果:

经过 1500 次迭代训练后的预测结果
我们成功了!我们应用前向和方向传播算法成功的训练了神经网络并且预测结果收敛于真实值。
注意预测值和真实值之间存在细微的误差是允许的。这样可以防止模型过拟合并且使得神经网络对于未知数据有着更强的泛化能力。
下一步是什么?
幸运的是我们的学习之旅还没有结束,仍然有很多关于神经网络和深度学习的内容需要学习。例如:
? 除了 Sigmoid 以外,还可以用哪些激活函数
? 在训练网络的时候应用学习率
? 在面对图像分类任务的时候使用卷积神经网络
我很快会写更多关于这个主题的内容,敬请期待!
最后的想法
我自己也从零开始写了很多神经网络的代码
虽然可以使用诸如 Tensorflow 和 Keras 这样的深度学习框架方便的搭建深层网络而不需要完全理解其内部工作原理。但是我觉得对于有追求的数据科学家来说,理解内部原理是非常有益的。
这种练习对我自己来说已成成为重要的时间投入,希望也能对你有所帮助

阅读全文

与人工神经网络是如何搭建的相关的资料

热点内容
电脑关掉网络通信 浏览:560
催乳师网络培训哪里不错 浏览:597
网络彩票500公司在哪里 浏览:761
路由器哪个网络都可以用吗 浏览:900
网络设置权限在哪里找 浏览:520
香信找回密码网络异常 浏览:756
索尼系统usb共享网络 浏览:89
计算机网络毕设ppt 浏览:852
移动网络部累不累 浏览:123
苹果13系统无线网络慢 浏览:35
缓存网络上可共享的资源 浏览:81
手机wifi都上不了网络连接不上怎么办 浏览:43
p40电信网络慢怎么设置 浏览:412
网络安全模式安装 浏览:769
电脑登陆软件显示网络异常 浏览:425
ins登上了连接不到网络 浏览:677
无线网络电信和联通的哪个好 浏览:590
二年级网络安全手抄报简单内容 浏览:839
网络电视哪里看越狱 浏览:627
苹果美团网络错误 浏览:892

友情链接