❶ 人工神经网络训练的目的就是使得损失函数最小化。()
人工神经网络训练的目的就是使得损失函数最小化。(正确)
人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。
在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。
每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
最近十多年来,人工神经网络的研究工作不断深入,已经取得了很大的进展,其在模式识别、智能机器人、自动控制、预测估计、生物、医学、经济等领域已成功地解决了许多现代计算机难以解决的实际问题,表现出了良好的智能特性。
❷ 人工神经网络(ANN)简述
我们从下面四点认识人工神经网络(ANN: Artificial Neutral Network):神经元结构、神经元的激活函数、神经网络拓扑结构、神经网络选择权值和学习算法。
1. 神经元:
我们先来看一组对比图就能了解是怎样从生物神经元建模为人工神经元。
下面分别讲述:
生物神经元的组成包括细胞体、树突、轴突、突触。树突可以看作输入端,接收从其他细胞传递过来的电信号;轴突可以看作输出端,传递电荷给其他细胞;突触可以看作I/O接口,连接神经元,单个神经元可以和上千个神经元连接。细胞体内有膜电位,从外界传递过来的电流使膜电位发生变化,并且不断累加,当膜电位升高到超过一个阈值时,神经元被激活,产生一个脉冲,传递到下一个神经元。
为了更形象理解神经元传递信号过程,把一个神经元比作一个水桶。水桶下侧连着多根水管(树突),水管既可以把桶里的水排出去(抑制性),又可以将其他水桶的水输进来(兴奋性),水管的粗细不同,对桶中水的影响程度不同(权重),水管对水桶水位(膜电位)的改变就是水桶内水位的改变,当桶中水达到一定高度时,就能通过另一条管道(轴突)排出去。
按照这个原理,科学家提出了M-P模型(取自两个提出者的姓名首字母),M-P模型是对生物神经元的建模,作为人工神经网络中的一个神经元。
由MP模型的示意图,我们可以看到与生物神经元的相似之处,x_i表示多个输入,W_ij表示每个输入的权值,其正负模拟了生物神经元中突出的兴奋和抑制;sigma表示将全部输入信号进行累加整合,f为激活函数,O为输出。下图可以看到生物神经元和MP模型的类比:
往后诞生的各种神经元模型都是由MP模型演变过来。
2. 激活函数
激活函数可以看作滤波器,接收外界各种各样的信号,通过调整函数,输出期望值。ANN通常采用三类激活函数:阈值函数、分段函数、双极性连续函数(sigmoid,tanh):
3. 学习算法
神经网络的学习也称为训练,通过神经网络所在环境的刺激作用调整神经网络的自由参数(如连接权值),使神经网络以一种新的方式对外部环境做出反应的一个过程。每个神经网络都有一个激活函数y=f(x),训练过程就是通过给定的海量x数据和y数据,拟合出激活函数f。学习过程分为有导师学习和无导师学习,有导师学习是给定期望输出,通过对权值的调整使实际输出逼近期望输出;无导师学习给定表示方法质量的测量尺度,根据该尺度来优化参数。常见的有Hebb学习、纠错学习、基于记忆学习、随机学习、竞争学习。
4. 神经网络拓扑结构
常见的拓扑结构有单层前向网络、多层前向网络、反馈网络,随机神经网络、竞争神经网络。
5. 神经网络的发展
(不能贴公式不好解释啊 -_-!)sigma是误差信号,yita是学习率,net是输入之和,V是输入层到隐含层的权重矩阵,W是隐含层到输出层的权重矩阵。
之后还有几种
随着计算机硬件计算能力越来越强,用来训练的数据越来越多,神经网络变得越来越复杂。在人工智能领域常听到DNN(深度神经网络)、CNN(卷积神经网络)、RNN(递归神经网络)。其中,DNN是总称,指层数非常多的网络,通常有二十几层,具体可以是CNN或RNN等网络结构。
参考资料 :
❸ 人工智能:什么是人工神经网络
许多 人工智能 计算机系统的核心技术是人工神经网络(ANN),而这种网络的灵感来源于人类大脑中的生物结构。
通过使用连接的“神经元”结构,这些网络可以通过“学习”并在没有人类参与的情况下处理和评估某些数据。
这样的实际实例之一是使用人工神经网络(ANN)识别图像中的对象。在构建一个识别“猫“图像的一个系统中,将在包含标记为“猫”的图像的数据集上训练人工神经网络,该数据集可用作任何进行分析的参考点。正如人们可能学会根据尾巴或皮毛等独特特征来识别狗一样,人工神经网络(ANN)也可以通过将每个图像分解成不同的组成部分(如颜色和形状)进行识别。
实际上,神经网络提供了位于托管数据之上的排序和分类级别,可基于相似度来辅助数据的聚类和分组。可以使用人工神经网络(ANN)生成复杂的垃圾邮件过滤器,查找欺诈行为的算法以及可以精确了解情绪的客户关系工具。
人工神经网络如何工作
人工神经网络的灵感来自人脑的神经组织,使用类似于神经元的计算节点构造而成,这些节点沿着通道(如神经突触的工作方式)进行信息交互。这意味着一个计算节点的输出将影响另一个计算节点的处理。
神经网络标志着人工智能发展的巨大飞跃,在此之前,人工智能一直依赖于使用预定义的过程和定期的人工干预来产生所需的结果。人工神经网络可以使分析负载分布在多个互连层的网络中,每个互连层包含互连节点。在处理信息并对其进行场景处理之后,信息将传递到下一个节点,然后向下传递到各个层。这个想法是允许将其他场景信息接入网络,以通知每个阶段的处理。
单个“隐藏”层神经网络的基本结构
就像渔网的结构一样,神经网络的一个单层使用链将处理节点连接在一起。大量的连接使这些节点之间的通信得到增强,从而提高了准确性和数据处理吞吐量。
然后,人工神经网络将许多这样的层相互叠放以分析数据,从而创建从第一层到最后一层的输入和输出数据流。尽管其层数将根据人工神经网络的性质及其任务而变化,但其想法是将数据从一层传递到另一层,并随其添加附加的场景信息。
人脑是用3D矩阵连接起来的,而不是大量堆叠的图层。就像人类大脑一样,节点在接收到特定刺激时会在人工神经网络上“发射”信号,并将信号传递到另一个节点。但是,对于人工神经网络,输入信号定义为实数,输出为各种输入的总和。
这些输入的值取决于它们的权重,该权重用于增加或减少与正在执行的任务相对应的输入数据的重要性。其目标是采用任意数量的二进制数值输入并将其转换为单个二进制数值输出。
更复杂的神经网络提高了数据分析的复杂性
早期的神经网络模型使用浅层结构,其中只使用一个输入和输出层。而现代的系统由一个输入层和一个输出层组成,其中输入层首先将数据输入网络,多个“隐藏”层增加了数据分析的复杂性。
这就是“深度学习”一词的由来——“深度”部分专门指任何使用多个“隐藏”层的神经网络。
聚会的例子
为了说明人工神经网络在实际中是如何工作的,我们将其简化为一个实际示例。
想象一下你被邀请参加一个聚会,而你正在决定是否参加,这可能需要权衡利弊,并将各种因素纳入决策过程。在此示例中,只选择三个因素——“我的朋友会去吗?”、“聚会地点远吗?”、“天气会好吗?”
通过将这些考虑因素转换为二进制数值,可以使用人工神经网络对该过程进行建模。例如,我们可以为“天气”指定一个二进制数值,即‘1'代表晴天,‘0'代表恶劣天气。每个决定因素将重复相同的格式。
然而,仅仅赋值是不够的,因为这不能帮助你做出决定。为此需要定义一个阈值,即积极因素的数量超过消极因素的数量。根据二进制数值,合适的阈值可以是“2”。换句话说,在决定参加聚会之前,需要两个因素的阈值都是“1”,你才会决定去参加聚会。如果你的朋友要参加聚会(‘1'),并且天气很好(‘1'),那么这就表示你可以参加聚会。
如果天气不好(‘0'),并且聚会地点很远(‘0'),则达不到这一阈值,即使你的朋友参加(‘1'),你也不会参加聚会。
神经加权
诚然,这是神经网络基本原理的一个非常基本的例子,但希望它有助于突出二进制值和阈值的概念。然而,决策过程要比这个例子复杂得多,而且通常情况下,一个因素比另一个因素对决策过程的影响更大。
要创建这种变化,可以使用“神经加权”——-通过乘以因素的权重来确定因素的二进制值对其他因素的重要性。
尽管示例中的每个注意事项都可能使你难以决策,但你可能会更重视其中一个或两个因素。如果你不愿意在大雨中出行去聚会,那恶劣的天气将会超过其他两个考虑因素。在这一示例中,可以通过赋予更高的权重来更加重视天气因素的二进制值:
天气= w5
朋友= w2
距离= w2
如果假设阈值现在已设置为6,则恶劣的天气(值为0)将阻止其余输入达到所需的阈值,因此该节点将不会“触发”(这意味着你将决定不参加聚会)。
虽然这是一个简单的示例,但它提供了基于提供的权重做出决策的概述。如果要将其推断为图像识别系统,则是否参加聚会(输入)的各种考虑因素将是给定图像的折衷特征,即颜色、大小或形状。例如,对识别狗进行训练的系统可以对形状或颜色赋予更大的权重。
当神经网络处于训练状态时,权重和阈值将设置为随机值。然后,当训练数据通过网络传递时将不断进行调整,直到获得一致的输出为止。
神经网络的好处
神经网络可以有机地学习。也就是说,神经网络的输出结果并不受输入数据的完全限制。人工神经网络可以概括输入数据,使其在模式识别系统中具有价值。
他们还可以找到实现计算密集型答案的捷径。人工神经网络可以推断数据点之间的关系,而不是期望数据源中的记录是明确关联的。
它们也可以是容错的。当神经网络扩展到多个系统时,它们可以绕过无法通信的缺失节点。除了围绕网络中不再起作用的部分进行路由之外,人工神经网络还可以通过推理重新生成数据,并帮助确定不起作用的节点。这对于网络的自诊断和调试非常有用。
但是,深度神经网络提供的最大优势是能够处理和聚类非结构化数据,例如图片、音频文件、视频、文本、数字等数据。在分析层次结构中,每一层节点都在前一层的输出上进行训练,深层神经网络能够处理大量的这种非结构化数据,以便在人类处理分析之前找到相似之处。
神经网络的例子
神经网络应用还有许多示例,可以利用它从复杂或不精确数据中获得见解的能力。
图像识别人工神经网络可以解决诸如分析特定物体的照片等问题。这种算法可以用来区分狗和猫。更重要的是,神经网络已经被用于只使用细胞形状信息来诊断癌症。
近30年来,金融神经网络被用于汇率预测、股票表现和选择预测。神经网络也被用来确定贷款信用评分,学习正确识别良好的或糟糕的信用风险。而电信神经网络已被电信公司用于通过实时评估网络流量来优化路由和服务质量。
❹ 人工神经网络有什么特点不同模型有什么作用
人工神经网络是一种仿照人脑神经网络的模型,用于解决各种复杂的问题。它通常由输入层、隐藏层和输出层组成,并且可以通过训练来学习和改善解决问题的能力。
不同的人工神经网络模型可以用于解决不同类型的问题。例如,卷积神经网络可以用于图像识别,而循环神经网络可以用于语音识别和时间序列预测。
❺ 人工神经网络,人工神经网络是什么意思
一、 人工神经网络的概念
人工神经网络(Artificial Neural Network,ANN)简称神经网络(NN),是基于生物学中神经网络的基本原理,在理解和抽象了人脑结构和外界刺激响应机制后,以网络拓扑知识为理论基础,模拟人脑的神经系统对复杂信息的处理机制的一种数学模型。该模型以并行分布的处理能力、高容错性、智能化和自学习等能力为特征,将信息的加工和存储结合在一起,以其独特的知识表示方式和智能化的自适应学习能力,引起各学科领域的关注。它实际上是一个有大量简单元件相互连接而成的复杂网络,具有高度的非线性,能够进行复杂的逻辑操作和非线性关系实现的系统。
神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激活函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重(weight),神经网络就是通过这种方式来模拟人类的记忆。网络的输出则取决于网络的结构、网络的连接方式、权重和激活函数。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。神经网络的构筑理念是受到生物的神经网络运作启发而产生的。人工神经网络则是把对生物神经网络的认识与数学统计模型相结合,借助数学统计工具来实现。另一方面在人工智能学的人工感知领域,我们通过数学统计学的方法,使神经网络能够具备类似于人的决定能力和简单的判断能力,这种方法是对传统逻辑学演算的进一步延伸。
人工神经网络中,神经元处理单元可表示不同的对象,例如特征、字母、概念,或者一些有意义的抽象模式。网络中处理单元的类型分为三类:输入单元、输出单元和隐单元。输入单元接受外部世界的信号与数据;输出单元实现系统处理结果的输出;隐单元是处在输入和输出单元之间,不能由系统外部观察的单元。神经元间的连接权值反映了单元间的连接强度,信息的表示和处理体现在网络处理单元的连接关系中。人工神经网络是一种非程序化、适应性、大脑风格的信息处理,其本质是通过网络的变换和动力学行为得到一种并行分布式的信息处理功能,并在不同程度和层次上模仿人脑神经系统的信息处理功能。
神经网络,是一种应用类似于大脑神经突触连接结构进行信息处理的数学模型,它是在人类对自身大脑组织结合和思维机制的认识理解基础之上模拟出来的,它是根植于神经科学、数学、思维科学、人工智能、统计学、物理学、计算机科学以及工程科学的一门技术。
二、 人工神经网络的发展
神经网络的发展有悠久的历史。其发展过程大致可以概括为如下4个阶段。
1. 第一阶段----启蒙时期
(1)、M-P神经网络模型:20世纪40年代,人们就开始了对神经网络的研究。1943 年,美国心理学家麦克洛奇(Mcculloch)和数学家皮兹(Pitts)提出了M-P模型,此模型比较简单,但是意义重大。在模型中,通过把神经元看作个功能逻辑器件来实现算法,从此开创了神经网络模型的理论研究。
(2)、Hebb规则:1949 年,心理学家赫布(Hebb)出版了《The Organization of Behavior》(行为组织学),他在书中提出了突触连接强度可变的假设。这个假设认为学习过程最终发生在神经元之间的突触部位,突触的连接强度随之突触前后神经元的活动而变化。这一假设发展成为后来神经网络中非常着名的Hebb规则。这一法则告诉人们,神经元之间突触的联系强度是可变的,这种可变性是学习和记忆的基础。Hebb法则为构造有学习功能的神经网络模型奠定了基础。
(3)、感知器模型:1957 年,罗森勃拉特(Rosenblatt)以M-P 模型为基础,提出了感知器(Perceptron)模型。感知器模型具有现代神经网络的基本原则,并且它的结构非常符合神经生理学。这是一个具有连续可调权值矢量的MP神经网络模型,经过训练可以达到对一定的输入矢量模式进行分类和识别的目的,它虽然比较简单,却是第一个真正意义上的神经网络。Rosenblatt 证明了两层感知器能够对输入进行分类,他还提出了带隐层处理元件的三层感知器这一重要的研究方向。Rosenblatt 的神经网络模型包含了一些现代神经计算机的基本原理,从而形成神经网络方法和技术的重大突破。
(4)、ADALINE网络模型: 1959年,美国着名工程师威德罗(B.Widrow)和霍夫(M.Hoff)等人提出了自适应线性元件(Adaptive linear element,简称Adaline)和Widrow-Hoff学习规则(又称最小均方差算法或称δ规则)的神经网络训练方法,并将其应用于实际工程,成为第一个用于解决实际问题的人工神经网络,促进了神经网络的研究应用和发展。ADALINE网络模型是一种连续取值的自适应线性神经元网络模型,可以用于自适应系统。
2. 第二阶段----低潮时期
人工智能的创始人之一Minsky和Papert对以感知器为代表的网络系统的功能及局限性从数学上做了深入研究,于1969年发表了轰动一时《Perceptrons》一书,指出简单的线性感知器的功能是有限的,它无法解决线性不可分的两类样本的分类问题,如简单的线性感知器不可能实现“异或”的逻辑关系等。这一论断给当时人工神经元网络的研究带来沉重的打击。开始了神经网络发展史上长达10年的低潮期。
(1)、自组织神经网络SOM模型:1972年,芬兰的KohonenT.教授,提出了自组织神经网络SOM(Self-Organizing feature map)。后来的神经网络主要是根据KohonenT.的工作来实现的。SOM网络是一类无导师学习网络,主要用于模式识别﹑语音识别及分类问题。它采用一种“胜者为王”的竞争学习算法,与先前提出的感知器有很大的不同,同时它的学习训练方式是无指导训练,是一种自组织网络。这种学习训练方式往往是在不知道有哪些分类类型存在时,用作提取分类信息的一种训练。
(2)、自适应共振理论ART:1976年,美国Grossberg教授提出了着名的自适应共振理论ART(Adaptive Resonance Theory),其学习过程具有自组织和自稳定的特征。
3. 第三阶段----复兴时期
(1)、Hopfield模型:1982年,美国物理学家霍普菲尔德(Hopfield)提出了一种离散神经网络,即离散Hopfield网络,从而有力地推动了神经网络的研究。在网络中,它首次将李雅普诺夫(Lyapunov)函数引入其中,后来的研究学者也将Lyapunov函数称为能量函数。证明了网络的稳定性。1984年,Hopfield 又提出了一种连续神经网络,将网络中神经元的激活函数由离散型改为连续型。1985 年,Hopfield和Tank利用Hopfield神经网络解决了着名的旅行推销商问题(Travelling Salesman Problem)。Hopfield神经网络是一组非线性微分方程。Hopfield的模型不仅对人工神经网络信息存储和提取功能进行了非线性数学概括,提出了动力方程和学习方程,还对网络算法提供了重要公式和参数,使人工神经网络的构造和学习有了理论指导,在Hopfield模型的影响下,大量学者又激发起研究神经网络的热情,积极投身于这一学术领域中。因为Hopfield 神经网络在众多方面具有巨大潜力,所以人们对神经网络的研究十分地重视,更多的人开始了研究神经网络,极大地推动了神经网络的发展。
(2)、Boltzmann机模型:1983年,Kirkpatrick等人认识到模拟退火算法可用于NP完全组合优化问题的求解,这种模拟高温物体退火过程来找寻全局最优解的方法最早由Metropli等人1953年提出的。1984年,Hinton与年轻学者Sejnowski等合作提出了大规模并行网络学习机,并明确提出隐单元的概念,这种学习机后来被称为Boltzmann机。
Hinton和Sejnowsky利用统计物理学的感念和方法,首次提出的多层网络的学习算法,称为Boltzmann 机模型。
(3)、BP神经网络模型:1986年,儒默哈特(D.E.Ru melhart)等人在多层神经网络模型的基础上,提出了多层神经网络权值修正的反向传播学习算法----BP算法(Error Back-Propagation),解决了多层前向神经网络的学习问题,证明了多层神经网络具有很强的学习能力,它可以完成许多学习任务,解决许多实际问题。
(4)、并行分布处理理论:1986年,由Rumelhart和McCkekkand主编的《Parallel Distributed Processing:Exploration in the Microstructures of Cognition》,该书中,他们建立了并行分布处理理论,主要致力于认知的微观研究,同时对具有非线性连续转移函数的多层前馈网络的误差反向传播算法即BP算法进行了详尽的分析,解决了长期以来没有权值调整有效算法的难题。可以求解感知机所不能解决的问题,回答了《Perceptrons》一书中关于神经网络局限性的问题,从实践上证实了人工神经网络有很强的运算能力。
(5)、细胞神经网络模型:1988年,Chua和Yang提出了细胞神经网络(CNN)模型,它是一个细胞自动机特性的大规模非线性计算机仿真系统。Kosko建立了双向联想存储模型(BAM),它具有非监督学习能力。
(6)、Darwinism模型:Edelman提出的Darwinism模型在90年代初产生了很大的影响,他建立了一种神经网络系统理论。
(7)、1988年,Linsker对感知机网络提出了新的自组织理论,并在Shanon信息论的基础上形成了最大互信息理论,从而点燃了基于NN的信息应用理论的光芒。
(8)、1988年,Broomhead和Lowe用径向基函数(Radialbasis function, RBF)提出分层网络的设计方法,从而将NN的设计与数值分析和线性适应滤波相挂钩。
(9)、1991年,Haken把协同引入神经网络,在他的理论框架中,他认为,认知过程是自发的,并断言模式识别过程即是模式形成过程。
(10)、1994年,廖晓昕关于细胞神经网络的数学理论与基础的提出,带来了这个领域新的进展。通过拓广神经网络的激活函数类,给出了更一般的时滞细胞神经网络(DCNN)、Hopfield神经网络(HNN)、双向联想记忆网络(BAM)模型。
(11)、90年代初,Vapnik等提出了支持向量机(Supportvector machines, SVM)和VC(Vapnik-Chervonenkis)维数的概念。
经过多年的发展,已有上百种的神经网络模型被提出。
❻ 深度学习又称之为什么
深度学习又称之为人工神经网络训练。
深度学习是指多层的人工神经网络和训练它的方法。一层神经网络会把大量矩阵数字作为输入,通过非线性激活方法取权重,再产生另一个数据集合作为输出。
这就像生物神经大脑的工作机理一样,通过合适的矩阵数量,多层组织链接一起,形成神经网络“大脑”进行精准复杂的处理。
深度学习定义
深度学习的提出,在于实现立德树人的根本目的,培养和发展学生核心素养根本促进学生的全面发展。鼓励教师深入探讨教学规律,研究学生的学习规律,从而真正去帮助学生学习与成长。苏霍姆林斯基曾说,学习如果具有思想、感情、创造、美和游戏的鲜艳色彩,那它就能成为孩子们深感兴趣和富有吸引力的事情。
深度学习是师生共同经历的一场智慧之旅,是让师生能够积极、充分、灵活的运用这些知识去理解世界、解决问题、学以致用,并获得人格的健全和精神的成长,成为新时代的社会主义建设者和接班人。
❼ bp算法在人工神经网络中的作用是什么
BP(Back Propagation)算法是一种常用的人工神经网络训练算法,是通过反向传播来调整神经网络权值的算法。在人工神经网络中,BP算法的作用是帮助神经网络对输入的数据进行学习,并通过学习来调整神经网络的权值,以使得神经网络能够较好地对未知数据进行预测。
❽ 什么是人工神经网络
工神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。在工程与学术界也常直接简称为“神经网络”或类神经网路。神经网络是一种运算模型[1],由大量的节点(或称“神经元”,或“单元”)和之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activation function)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重(weight),这相当于人工神经网路的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。
它的构筑理念是受到生物(人或其他动物)神经网络功能的运作启发而产生的。人工神经网络通常是通过一个基于数学统计学类型的学习方法(Learning Method)得以优化,所以人工神经网络也是数学统计学方法的一种实际应用,通过统计学的标准数学方法我们能够得到大量的可以用函数来表达的局部结构空间,另一方面在人工智能学的人工感知领域,我们通过数学统计学的应用可以来做人工感知方面的决定问题(也就是说通过统计学的方法,人工神经网络能够类似人一样具有简单的决定能力和简单的判断能力),这种方法比起正式的逻辑学推理演算更具有优势。
❾ 人工神经网络概念梳理与实例演示
人工神经网络概念梳理与实例演示
神经网络是一种模仿生物神经元的机器学习模型,数据从输入层进入并流经激活阈值的多个节点。
递归性神经网络一种能够对之前输入数据进行内部存储记忆的神经网络,所以他们能够学习到数据流中的时间依赖结构。
如今机器学习已经被应用到很多的产品中去了,例如,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给我们一个让误差更小的方向,这个学习效率就决定了我们该在这个方向上迈多大的梯度。如果学习效率太高,你可能是超过了误差最小值;如果太低,你的训练可能将会永远进行。这是一个你需要调整的超参数。