神经网络技术的演化史!
神经网络和深度学习技术是当今大多数高级智能应用的基础。
1.神经网络的演变
首先我们先来介绍一下什么是神经网络?神经网络主要从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,这种模型使用大量的计算神经元,这些神经元通过加权连接层连接。每一层神经元都能够进行大规模的并行计算并在它们之间传递信息。
下面的时间轴显示了神经网络的演变:
神经网络的起源甚至可以追溯到计算机本身的发展,第一个神经网络出现在20世纪40年代。我们将回顾一下历史,帮助大家更好地理解神经网络的基础知识。
第一代神经网络神经元起着验证作用。这些神经元的设计者只是想确认他们可以构建用于计算的神经网络。这些网络不能用于培训或学习;它们只是作为逻辑门电路。它们的输入和输出是二进制的,权重是预定义的。
第二阶段的神经网络发展出现在20世纪50年代和60年代。这涉及到罗斯布拉特在传感器模型和赫伯特学习原理方面的开创性工作。
2.传感器模型
我们上面提到的传感器模型和神经元模型是相似的,但是有一些关键的区别。传感器模型中的激活算法可以是中断算法,也可以是sigmoid算法,其输入可以是实数向量,而不是神经元模型使用的二进制向量。与神经元模型不同,传感器模型具有学习能力。
接下来,我们将讨论传感器模型的一些特殊特性。
我们可以考虑输入值 (x1..., xn) 为N维空间中的坐标,wTx-w0 = 0为N维空间中的超平面。显然,如果wTx-w0 < 0,那么点落在超平面以下,而如果wTx-w0 > 0,则点落在超平面上。
传感器模型对应于分类器的超平面,能够在N维空间中分离不同类型的点。看下图,我们可以看到传感器模型是一个线性分类器。
传感器模型能够方便地对基本的逻辑操作进行分类,如AND、OR和NOT。
我们可以通过传感器模型对所有的逻辑操作进行分类吗?答案当然是否定的。例如,通过单一的线性传感器模型很难对Exclusive OR (异或)操作进行分类,这是神经网络在第一个峰值之后很快进入发展的低点的主要原因之一。包括Minsky在内的几位作者讨论了传感器模型的问题。然而,在这个问题上许多人误解了他们的意思。
事实上,像Minsky这样的作者指出,一个人可以通过多层传感器模型实现异或操作;然而,由于学术界当时缺乏研究多层传感器模型的有效方法,神经网络的发展陷入了第一个低谷。
下图直观地展示了多层传感器模型如何实现异或操作:
3.前馈神经网络
进入20世纪80年代,由于传感器模型神经网络的表达能力局限于线性分类任务,神经网络的发展开始进入多层传感器阶段。经典的多层神经网络是前馈神经网络。
从下图中我们可以看到,它涉及一个输入层、一个包含未定义节点数量的隐藏层和一个输出层。
我们可以用多层传感器模型来表示任何逻辑运算,但这就引入了三层之间的加权学习问题。当xk从输入层传输到隐藏层上的加权vkj,然后通过sigmoid这样的激活算法,我们可以从隐藏层中检索相应的值hj。同样,我们可以使用类似的操作,使用hj值从输出层派生yi节点值。为了学习,我们需要w和v矩阵的加权信息,这样我们才能最终得到估计值y和实际值d。
如果你对机器学习有基本的了解,你就会明白为什么我们要用梯度下降法来学习一个模型。对传感器模型应用梯度下降的原理是相当简单的,我们可以从下图中看到。首先,我们要确定模型的损失。
示例使用一个平方根损失和试图关闭之间的差距模拟值y和实际价值d。为了计算方便,在大多数情况下,我们使用根关系E = 1/2(dy)^ 2 = 1/2(d-f(x))^ 2。
根据梯度下降法原则,权重更新周期:wj←wi +α(d−f(x))f′(x),α是我们可以手动调整学习的速度。
4.反向传播(Back-Propagation)
如何在多层前馈神经网络中学习所有参数?顶层的参数很容易获得。通过比较计算模型输出的估计值与实测值的差值,利用梯度下降原理得到参数结果,可以得到参数。当我们试图从隐藏层获取参数时,问题就出现了。即使我们可以计算模型的输出,我们也无法知道期望值是多少,因此我们也无法有效地训练多层神经网络。这个问题困扰了研究人员很长一段时间,导致神经网络在20世纪60年代之后发展停滞不前。
后来,在70年代,一些科学家独立地提出了反向传播算法的想法。这种类型的算法背后的基本思想其实很简单。虽然当时没有办法根据隐藏层的期望值来更新,但是可以通过隐藏层传递的错误来更新隐藏层和其他层之间的权重。当计算梯度时,由于隐藏层中的所有节点都与输出层中的多个节点相关,所以前一层中的所有层都被聚集并一起处理。
反向传播的另一个优点是我们可以同时在同一层上执行节点的梯度和加权,因为它们是不相关的。我们可以用伪代码表示整个反向传播过程如下:
接下来,我们来讨论一下反向传播神经网络的其他特征。反向传播实际上是一个链式法则。它可以很容易地推广任何具有映射的计算。根据梯度函数,我们可以使用反向传播神经网络生成局部优化解,而不是全局优化解。然而,从一般的角度来看,反向传播算法产生的结果通常是一个令人满意的优化解决方案。
下图是反向传播算法的直观表示:
在大多数情况下,反向传播神经网络会找到范围内最小的可能值;但是,如果我们离开这个范围,我们可能会发现更好的价值。在实际应用中,有许多简单有效的方法来解决这类问题,例如,我们可以尝试不同的随机初始化方法。此外,在实践中,在现代深度学习领域中经常使用的模型中,初始化方法对最终结果有重要的影响。强迫模型离开优化范围的另一种方法是在训练过程中引入随机噪声,或者使用遗传算法防止训练模型在非理想优化位置停止。
反向传播神经网络是机器学习的一个很好的模型,当谈到机器学习时,我们不得不注意到在机器学习过程中经常遇到的一个基本问题,那就是过拟合问题。过度拟合的一个常见表现是在训练过程中,即使模型的损失不断下降,测试组的损失和误差也会增加。有两种典型的避免过度拟合的方法:
- 早期停止:我们可以提前分离一个验证组,并在培训期间对这个已经验证过的组运行它。我们可以观察模型的损失,如果验证组的损失已经停止下降,而培训组的损失仍在下降,那么我们可以提前停止培训,防止过度拟合。
- 正则化:我们可以在神经网络中增加规则。现在流行的drop方法是随机删除一些节点或边。这种方法可以作为正则化的一种形式,在防止过拟合方面非常有效。 尽管神经网络在20世纪80年代非常流行,但不幸的是,它们在20世纪90年代进入了发展的另一个低谷。许多因素促成了这一低点。例如,Support Vector Machines,在20世纪90年代是一个流行的模型,在各种大型会议上登台,并在各种领域得到应用。Support Vector Machines具有优秀的统计学习理论,易于直观理解。它们也非常有效,并产生接近理想的结果。
在这种转变中,Support Vector Machines背后的统计学习理论的兴起给神经网络的发展带来了不小的压力。另一方面,从神经网络本身的角度来看,即使你可以在理论上使用反向传播网络来训练任何神经网络,在实际应用中,我们注意到,随着神经网络中层数的增加,训练神经网络的难度也会成倍增加。例如,在20世纪90年代初,人们注意到在一个神经网络中,有相当多的层,通常会出现梯度损失或梯度爆炸。
例如,一个简单的梯度损失的例子是,神经网络中的每一层都是一个乙基结构层,因此,它在反向传播过程中的损失被链接到一个乙基结构梯度中。当一系列元素串在一起时,如果其中一个梯度非常小,那么梯度就会变得越来越小。实际上,在传播了一层或两层之后,这个梯度就消失了。梯度损失导致深层参数停止变化,很难得到有意义的结果。这就是为什么多层神经网络很难训练的原因之一。
学术界对这一问题进行了深入的研究,得出的结论是,最简单的处理方法是改变激活算法。一开始我们尝试使用修正的激活算法,因为sigmoid算法是一种很容易导致梯度损失的索引方法。另一方面,修正了sigmoid函数并替换了max (0,x)从下图我们可以看到,在0以上的估计值的梯度是1,这就避免了梯度消失的问题。但是,当估计值小于0时,我们可以看到梯度又为0,所以ReLU算法必须是不完美的。后来,一些改进的算法出现了,包括Leaky ReLU和参数整流器(PReLU)。估计x小于0时,我们可以将它转换成一个像0.01或α系数,以防止它实际上是0。
随着神经网络的发展,我们后来提出了许多方法来解决在结构层面上通过梯度的问题。例如,元模型、LSTM模型和现代图像分析使用了许多跨层链接方法来更容易地传播梯度。
接下来,我们将进一步深入学习,特别是卷积神经网络(CNN)和递归神经网络(RNN)。
5.深度学习基础知识
从20世纪90年代的第二个发展低点到2006年,神经网络再一次引起了大众的关注,这一次比以往更加有力。在神经网络兴起的过程中,有一件大事发生了,那就是Hinton在包括Salahundinov在内的许多地方提交的两篇关于多层神经网络(现在被称为“深度学习”)的论文。
其中一篇论文解决了神经网络初始化值的设置问题。简单地说,解决方案是将输入值考虑为x,输出值考虑为解码后的x,然后通过这种方法找到更好的初始化点。另一篇论文提出了一种快速训练深层神经网络的方法。实际上,神经网络的流行有很多因素,例如,计算资源的巨大增长和数据的可用性。在20世纪80年代,由于缺乏数据和计算资源,很难训练出大规模的神经网络。
神经网络的早期兴起是由三个不朽人物推动的,即 Hinton, Bengio, 和LeCun。Hinton的主要成就是在Restricted Boltzmann Machine和Deep Autoencoder(深自动编码器)。Bengio的主要贡献是在使用元模型进行深度学习方面取得了一系列突破。这也是深度学习经历重大突破的第一个领域。
2013年,基于元模型的语言建模已经能够超越当时最有效的方法——概率模型。LeCun的主要成就是与CNN相关的研究。深度学习的主要表现形式是在许多主要的高峰,如NIPS、ICML、CVPR、ACL,在那里它吸引了大量的关注。这包括谷歌大脑的出现、Deep Mind和Facebook AI,这些都是他们在深度学习领域的研究中心。
深度学习吸引大众关注后的第一个突破是语音识别领域。在我们开始使用深度学习之前,模型都是在之前定义的统计数据库上训练的。2010年,微软使用了一个深度学习神经网络进行语音识别。从下图可以看出,两个误差指标都下降了2/3,有了明显的改善。基于最新的ResNet技术,微软已经将该指标降低到6.9%,并将逐年改进。
在图像分类领域,CNN模型在2012年以ImageNet的形式取得了重大突破。在ImageNet中,使用大量的数据收集对图像分类进行测试,然后将其分类为1000种类型。在深度学习应用之前,图像分类系统的最佳错误率为25.8%(2011年),由于Hinton和他的学生在2012年使用CNN所做的工作,其错误率仅为10%。
从图中可以看出,自2012年以来,该指标每年都有重大突破,都是利用CNN模型实现的。
这些巨大的成就在很大程度上归功于现代系统的多层结构,因为它们允许独立的学习和通过分层抽象结构表达数据的能力。抽象的特性可以应用到各种任务中,这对当前深度学习的流行有很大的帮助。
接下来,我们将介绍两种经典的和常见的深度学习神经网络类型:一种是卷积神经网络(tional neural Network, CNN),另一种是递归神经网络(Recurrent Neural Network,RNN)。
卷积神经网络 Convolutional Neural Networks
卷积神经网络有两个核心概念。一个是卷积,另一个是pooling。在这一点上,有些人可能会问为什么我们不简单地使用前馈神经网络而不是CNN。以1000x1000的图像为例,一个神经网络将在隐藏层上有100万个节点。前馈神经网络,将10 ^ 12个参数。此时,系统几乎不可能学习,因为它需要大量的估计。
然而,很多图片都有这样的特点。如果我们使用CNN对图像进行分类,那么由于卷积的概念,隐藏层上的每个节点只需要连接和扫描图像的一个位置的特征。如果隐藏层上的每个节点连接到10*10的估计,则最终参数的数量为1亿,如果可以共享多个隐藏层访问的局部参数,则参数的数量显著减少。
从下面的图片来看,前馈神经网络和CNN之间的差异是巨大的。图像中的模型从左到右是完全连接的、正常的、前馈的、完全连接的前馈,CNN建模神经网络。我们可以看到,CNN神经网络的隐层节点的连接权值参数可以共享。
pooling是另一个操作。CNN将在卷积原理的基础上,在中间形成一个隐藏层,即 pooling层。最常用的 pooling化方法是Max Pooling(最大化),其中隐藏层上的节点选择最大的输出值。由于多个内核是pooling的,所以在中间有多个隐藏层节点。
好处是什么?首先,汇聚进一步减少了参数的数量,其次,它提供了一定数量的平移不变性。如图所示,如果图像中显示的九个节点中有一个是经过翻译的,那么在pooling中生成的节点将保持不变。
CNN的这两个特点使得它在图像处理领域非常流行,成为图像处理领域的标准。下面的可视化汽车示例是CNN在图像分类领域的应用的一个很好的例子。在将汽车的原始图像输入到CNN模型后,我们可以通过卷积和ReLU激活层传递一些简单粗糙的特征,如边缘和点。我们可以直观地看到,它们越接近最上面输出层的输出图像,它们就越接近汽车的轮廓。这个过程最终将检索一个隐藏层表示,并将其连接到分类层,然后它将接收图像的分类,如图像中显示的汽车、卡车、飞机、轮船和马。
下面的图片是莱昆和其他笔迹识别领域的研究人员早期使用的神经网络。这个网络在20世纪90年代被应用于美国邮政系统。有兴趣的读者可以登录LeCun的网站查看手写识别的动态过程。
虽然CNN在图像识别领域非常受欢迎,但在过去的两年里,它也在文本识别方面发挥了重要作用。例如,CNN是目前文本分类最优解的基础。在确定文本的类别时,我们真正需要做的是寻找文本中关键字的指示,这是一个非常适合CNN模型的任务。
CNN拥有广泛的现实应用,例如在调查、自动驾驶汽车、分割和神经系统。神经类型是一个迷人的应用。例如,在应用商店里有一个很受欢迎的应用程序叫Prisma,它允许用户上传一张图片并将其转换成另一种风格。例如,它可以转换成Van Goh的星空风格。这个过程很大程度上依赖于CNN。
递归神经网络 Recursive Neural Networks
至于递归神经网络背后的基本原则,从下面的图片我们可以看出这样一个网络的输出不仅依赖于输出x但隐层的状态,这是更新根据先前输入x。扩大图像显示整个过程。第一个输入的隐藏层是S(t-1),它影响下一个输入X(t)。递归神经网络模型的主要优点是,我们可以在文本、语言和语音等序列数据操作中使用它,在这些操作中,当前数据的状态受以前的数据状态的影响。使用前馈神经网络处理这类数据非常困难。
说到递归神经网络,我们不应该提及我们前面提到的LSTM模型。LSTM实际上不是一个完整的神经网络。简单地说,它是经过复杂处理的RNN节点的结果。LSTM有三个门,即输入门、遗忘门和输出门。
每个这些门用于处理单元中的数据,并确定是否应该输入、遗忘或输出单元中的数据
最后,让我们谈一谈神经网络的跨学科应用,它正在得到广泛的接受。此应用程序涉及将图像转换为图像的文本描述或描述图像的标题。我们可以先使用CNN模型来描述具体的实现过程,提取图像的相关信息并生成矢量表示。稍后,我们可以将该向量作为输入传递给已经训练好的递归神经网络,以生成图像的描述。
分享 IT 技术和行业经验,请关注-技术学派。