导航:首页 > 网络营销 > 神经网络可以在哪些地方改进

神经网络可以在哪些地方改进

发布时间:2022-12-08 03:29:17

❶ 神经网络可以用于对系统结构进行改进吗

人工神经网络由于其独特的模型结构和固有的非线性模拟能力,以及高度的自适应和容错特性等突出特征,在控制系统中获得了广泛的应用。其在各类控制器框架结构的基础上,加入了非线性自适应学习机制,从而使控制器具有更好的性能。
基本的控制结构有监督控制、直接逆模控制、模型参考控制、内模控制、预测控制、最优决策控制等。

❷ AlphaGo的神奇全靠它,详解人工神经网络!

❸ BP神经网络的应用不足

神经网络可以用作分类、聚类、预测等。神经网络需要有一定量的历史数据,通过历史数据的训练,网络可以学习到数据中隐含的知识。在你的问题中,首先要找到某些问题的一些特征,以及对应的评价数据,用这些数据来训练神经网络。
虽然BP网络得到了广泛的应用,但自身也存在一些缺陷和不足,主要包括以下几个方面的问题。
首先,由于学习速率是固定的,因此网络的收敛速度慢,需要较长的训练时间。对于一些复杂问题,BP算法需要的训练时间可能非常长,这主要是由于学习速率太小造成的,可采用变化的学习速率或自适应的学习速率加以改进。
其次,BP算法可以使权值收敛到某个值,但并不保证其为误差平面的全局最小值,这是因为采用梯度下降法可能产生一个局部最小值。对于这个问题,可以采用附加动量法来解决。
再次,网络隐含层的层数和单元数的选择尚无理论上的指导,一般是根据经验或者通过反复实验确定。因此,网络往往存在很大的冗余性,在一定程度上也增加了网络学习的负担。
最后,网络的学习和记忆具有不稳定性。也就是说,如果增加了学习样本,训练好的网络就需要从头开始训练,对于以前的权值和阈值是没有记忆的。但是可以将预测、分类或聚类做的比较好的权值保存。

❹ 神经网络的优化

上节回顾:
介绍了神经元、神经网络
介绍了激活函数
提到了前向传播概念
留下问题:用到的参数w和b是怎么来的,是自己随便设定的吗

本节介绍:
神经网络、反向传播的例子
损失函数和梯度下降法、学习率介绍

最重要的用途是分类

这种能自动对输入的东西进行分类的机器,就叫做 分类器 。分类器的输入是一个数值向量,叫做特征(向量)。
第一个例子里,分类器的输入是一堆0、1值,表示字典里的每一个词是否在邮件中出现,比如向量(1,1,0,0,0......)就表示这封邮件里只出现了两个词abandon和abnormal;
第二个例子里,分类器的输入是照片,假如每一张照片都是320x240像素的红绿蓝三通道彩色照片,那么分类器的输入就是一个长度为320x240x3=230400的向量。

分类器的输出也是数值。
第一个例子中,输出1表示邮件是垃圾邮件,输出0则说明邮件是正常邮件;
第二个例子中,输出0表示图片中是狗,输出1表示是猫。

分类器的目标就是让正确分类的比例尽可能高。一般我们需要首先收集一些样本, 人为标记上正确分类结果 ,然后用这些标记好的数据 训练分类器 ,训练好的分类器就可以 在新来的特征向量上工作 了。

这就是BP神经网络(back propagation)。

旨在得到最优的全局参数矩阵,进而将多层神经网络应用到分类或者回归任务中去。

前向传播 输入信号直至 输出产生误差 反向传播 误差信息 更新权重 矩阵。

这个地方提到的误差这个概念,其实就是对应了损失函数,损失函数说白了就是计算误差的函数。

举例:线性回归:寻找一条拟合图中数据点最好的直线

把每条小竖线的长度加起来就等于我们现在通过这条直线预测出的值与实际值之间的差距

缺点:采用梯度下降法学习时,模型一开始训练学习速率非常慢

对一个多元函数求偏导,会得到多个偏导函数.这些导函数组成的向量,就是梯度;一元函数的梯度是什么?它的梯度可以理解为就是它的导数。
求解多元函数和一元函数的道理是一样的,只不过函数是一元的时候,梯度中只有一个导函数,函数是多元的时候,梯度中有多个导函数.
当我们把梯度中的所有偏导函数都变为0的时候,就可以找到每个未知数的对应解。

梯度下降中求偏导数的未知数不是x和y,而是x的参数W。

梯度下降的方向:把这一点带入到梯度函数中,结果为正,那我们就把这一点的值变小一些,同时就是让梯度变小些;当这一点带入梯度函数中的结果为负的时候,就给这一点的值增大一些。

在这个下降的过程中.因为我们并不知道哪一个点才是最低点,也没有办法来预测下降多少次才能到最低点.这里梯度下降给出的办法是:
先随便蒙一个点出来,然后根据这个点每次下降以丢丢.什么时候下降得到的值(点带入偏导函数得到的)和上一次的值基本一样,也就是相差特别特别小的时候,我们认为就到了最低点。

让点沿着梯度方向下降慢慢求得最优解的过程我们叫做 学习 ,学习率就是用来限制他每次学习别太过"用功"的。下左图是我们所期望的,一个点按照梯度方向下降,慢慢逼近最低点,右图中展示的这个梯度值过大的时候,点下降的step就过大了,一次性迈过了最低点,导致函数无法找到最优解。学习率就是用来限制这种情况的。

更新权重的算法:每一个权重值都要减去它对应的导数和学习率的乘积
Lr 代表的是学习率

简单举例

❺ 卷积神经网络 有哪些改进的地方

卷积神经网络的研究的最新进展引发了人们完善立体匹配重建热情。从概念看,基于学习算法能够捕获全局的语义信息,比如基于高光和反射的先验条件,便于得到更加稳健的匹配。目前已经探求一些两视图立体匹配,用神经网络替换手工设计的相似性度量或正则化方法。这些方法展现出更好的结果,并且逐步超过立体匹配领域的传统方法。事实上,立体匹配任务完全适合使用CNN,因为图像对是已经过修正过的,因此立体匹配问题转化为水平方向上逐像素的视差估计。
与双目立体匹配不同的是,MVS的输入是任意数目的视图,这是深度学习方法需要解决的一个棘手的问题。而且只有很少的工作意识到该问题,比如SurfaceNet事先重建彩色体素立方体,将所有像素的颜色信息和相机参数构成一个3D代价体,所构成的3D代价体即为网络的输入。然而受限于3D代价体巨大的内存消耗,SurfaceNet网络的规模很难增大:SurfaceNet运用了一个启发式的“分而治之”的策略,对于大规模重建场景则需要花费很长的时间。

❻ 【阅读笔记】改进卷积神经网络的14个小技巧

原文: https://mp.weixin.qq.com/s/Lh_lJNvV9BGhc6no2ln-_g

原题目误导性太大

1)架构要遵循应用

你也许会被 Google Brain 或者 DeepMind 这些奇特的实验室所发明的那些耀眼的新模型所吸引,但是其中许多在你的用例或者业务环境中要么是不可能实现,要么是实现起来非常不现实。你应该使用对你的特定应用最有意义的模型,这种模型或许比较简单,但是仍然很强大,例如 VGG。

2)网络路径的激增

每年的 ImageNet Challenge 的冠军都会使用比上一届冠军更加深层的网络。从 AlexNet 到 Inception,再到 ResNet,Smith 注意到了“网络中路径数量倍增”的趋势,并且“ResNet 可以是不同长度的网络的指数集合”。

3)争取简单

然而,更大的并不一定是更好的。在名为“Bigger is not necessarily better”的论文中,Springenberg 等人演示了如何用更少的单元实现最先进的结果。参考:https://arxiv.org/pdf/1412.6806.pdf

4)增加对称性

无论是在建筑上,还是在生物上,对称性被认为是质量和工艺的标志。Smith 将 FractalNet 的优雅归功于网络的对称性。

5)金字塔式的形状

你也许经常在表征能力和减少冗余或者无用信息之间权衡。卷积神经网络通常会降低激活函数的采样,并会增加从输入层到最终层之间的连接通道。

6)过度训练

另一个权衡是训练准确度和泛化能力。用类似 drop-out 或者 drop-path 的方法进行正则化可以提高泛化能力,这是神经网络的重要优势。请在比你的实际用例更加苛刻的问题下训练你的网络,以提高泛化性能。

7)全面覆盖问题空间

为了扩展你的训练数据和提升泛化能力,请使用噪声和数据增强,例如随机旋转、裁剪和一些图像操作。

8)递增的特征构造

随着网络结构越来越成功,它们进一部简化了每一层的“工作”。在非常深层的神经网络中,每一层仅仅会递增的修改输入。在 ResNets 中,每一层的输出和它的输入时很相似的,这意味着将两层加起来就是递增。实践中,请在 ResNet 中使用较短的跳变长度。

9)标准化层的输入

标准化是另一个可以使计算层的工作变得更加容易的方法,在实践中被证明可以提升训练和准确率。批量标准化(batch normalization)的发明者认为原因在于处理内部的协变量,但是 Smith 认为,“标准化把所有层的输入样本放在了一个平等的基础上(类似于一种单位转换),这允许反向传播可以更有效地训练”。

10)输入变换

研究表明,在 Wide ResNets 中,性能会随着连接通道的增加而增强,但是你需要权衡训练代价与准确度。AlexNet、VGG、Inception 和 ResNets 都在第一层使用了输入变换以让输入数据能够以多种方式被检查。

11)可用的资源决指引着层的宽度

然而,可供选择的输出数量并不是显而易见的,这依赖于你的硬件能力以及期望的准确度。

12)Summation Joining

Summation 是一种常用的合并分支的方式。在 ResNets 中,使用总和作为连接的机制可以让每一个分支都能计算残差和整体近似。如果输入跳跃连接一直存在,那么 summation 会让每一层学到正确地东西(例如与输入的差别)。在任何分支都可以被丢弃的网络(例如 FractalNet)中,你应该使用这种方式类保持输出的平滑。

13)下采样变换

在池化的时候,利用级联连接(concatenation joining)来增加输出的数量。当使用大于 1 的步长时,这会同时处理连接并增加连接通道的数量。

14)用于竞争的 Maxout

Maxout 被用在你只需要选择一个激活函数的局部竞争网络中。使用求和以及平均值会包含所有的激活函数,所以不同之处在于 maxout 只选择一个“胜出者”。Maxout 的一个明显的用例是每个分支具有不同大小的内核,而 Maxout 可以包含尺度不变性。

1)使用调优过的预训练网络

“如果你的视觉数据和 ImageNet 相似,那么使用预训练网络会帮助你学习得更快”,机器学习公司 Diffbot 的 CEO Mike Tung 解释说。低水平的卷积神经网络通常可以被重复使用,因为它们大多能够检测到像线条以及边缘这些模式。将分类层用你自己的层替换,并且用你特定的数据去训练最后的几个层。

2)使用 freeze-drop-path

Drop-path 会在训练的迭代过程中随机地删除一些分支。Smith 测试了一种相反的方法,它被称为 freeze-path,就是一些路径的权重是固定的、不可训练的,而不是整体删除。因为下一个分支比以前的分支包含更多的层,并且正确的内容更加容易近似得到,所以网络应该会得到更好的准确度。

3)使用循环的学习率

关于学习率的实验会消耗大量的时间,并且会让你遇到错误。自适应学习率在计算上可能是非常昂贵的,但是循环学习率不会这样。使用循环学习率(CLR)时,你可以设置一组最大最小边界,在边界范围内改变学习率。Smith 甚至还在论文《Cyclical Learning Rates for Training Neural Networks》中提供了计算学习率的最大值和最小值的方法。参考:https://arxiv.org/pdf/1506.01186.pdf

4)在有噪声的标签中使用 bootstrapping 

在现实中,很多数据都是混乱的,标签都是主观性的或者是缺失的,而且预测的对象可能是训练的时候未曾遇到过的。Reed 等人在文章《TRAINING DEEP NEURAL NETWORKS ON NOISY LABELS WITH BOOTSTRAPPING》中描述了一种给网络预测目标注入一致性的方法。直观地讲,这可以奏效,通过使网络利用对环境的已知表示(隐含在参数中)来过滤可能具有不一致的训练标签的输入数据,并在训练时清理该数据。参考:https://arxiv.org/pdf/1412.6596

5)采用有 Maxout 的 ELU,而不是 ReLU

ELU 是 ReLU 的一个相对平滑的版本,它能加速收敛并提高准确度。与 ReLU 不同,ELU 拥有负值,允许它们以更低的计算复杂度将平均单位激活推向更加接近 0 的值,就像批量标准化一样参考论文《FAST AND ACCURATE DEEP NETWORK LEARNING BY EXPONENTIAL LINEAR UNITS (ELUS)》,https://arxiv.org/pdf/1511.07289.pdf。如果您使用具有全连接层的 Maxout,它们是特别有效的。

❼ 神经网络浅谈

人工智能技术是当前炙手可热的话题,而基于神经网络的深度学习技术更是热点中的热点。去年谷歌的Alpha Go 以4:1大比分的优势战胜韩国的李世石九段,展现了深度学习的强大威力,后续强化版的Alpha Master和无师自通的Alpha Zero更是在表现上完全碾压前者。不论你怎么看,以深度学习为代表的人工智能技术正在塑造未来。

下图为英伟达(NVIDIA)公司近年来的股价情况, 该公司的主要产品是“图形处理器”(GPU),而GPU被证明能大大加快神经网络的训练速度,是深度学习必不可少的计算组件。英伟达公司近年来股价的飞涨足以证明当前深度学习的井喷之势。

好,话不多说,下面简要介绍神经网络的基本原理、发展脉络和优势。

神经网络是一种人类由于受到生物神经细胞结构启发而研究出的一种算法体系,是机器学习算法大类中的一种。首先让我们来看人脑神经元细胞:

一个神经元通常具有多个树突 ,主要用来接受传入信息,而轴突只有一条,轴突尾端有许多轴突末梢,可以给其他多个神经元传递信息。轴突末梢跟其他神经元的树突产生连接,从而传递信号。

下图是一个经典的神经网络(Artificial Neural Network,ANN):

乍一看跟传统互联网的拓扑图有点类似,这也是称其为网络的原因,不同的是节点之间通过有向线段连接,并且节点被分成三层。我们称图中的圆圈为神经元,左边三个神经元组成的一列为输入层,中间神经元列为隐藏层,右边神经元列为输出层,神经元之间的箭头为权重。

神经元是计算单元,相当于神经元细胞的细胞核,利用输入的数据进行计算,然后输出,一般由一个线性计算部分和一个非线性计算部分组成;输入层和输出层实现数据的输入输出,相当于细胞的树突和轴突末梢;隐藏层指既不是输入也不是输出的神经元层,一个神经网络可以有很多个隐藏层。

神经网络的关键不是圆圈代表的神经元,而是每条连接线对应的权重。每条连接线对应一个权重,也就是一个参数。权重具体的值需要通过神经网络的训练才能获得。我们实际生活中的学习体现在大脑中就是一系列神经网络回路的建立与强化,多次重复的学习能让回路变得更加粗壮,使得信号的传递速度加快,最后对外表现为“深刻”的记忆。人工神经网络的训练也借鉴于此,如果某种映射关系出现很多次,那么在训练过程中就相应调高其权重。

1943年,心理学家McCulloch和数学家Pitts参考了生物神经元的结构,发表了抽象的神经元模型MP:

符号化后的模型如下:

Sum函数计算各权重与输入乘积的线性组合,是神经元中的线性计算部分,而sgn是取符号函数,当输入大于0时,输出1,反之输出0,是神经元中的非线性部分。向量化后的公式为z=sgn(w^T a)(w^T=(w_1,w_2,w_3),a=〖(a_1,a_2,a_3)〗^T)。

但是,MP模型中,权重的值都是预先设置的,因此不能学习。该模型虽然简单,并且作用有限,但已经建立了神经网络大厦的地基

1958年,计算科学家Rosenblatt提出了由两层神经元组成(一个输入层,一个输出层)的神经网络。他给它起了一个名字–“感知器”(Perceptron)

感知器是当时首个可以学习的人工神经网络。Rosenblatt现场演示了其学习识别简单图像的过程,在当时引起了轰动,掀起了第一波神经网络的研究热潮。

但感知器只能做简单的线性分类任务。1969年,人工智能领域的巨擘Minsky指出这点,并同时指出感知器对XOR(异或,即两个输入相同时输出0,不同时输出1)这样的简单逻辑都无法解决。所以,明斯基认为神经网络是没有价值的。

随后,神经网络的研究进入低谷,又称 AI Winter 。

Minsky说过单层神经网络无法解决异或问题,但是当增加一个计算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分类效果。

下图为两层神经网络(输入层一般不算在内):

上图中,输出层的输入是上一层的输出。

向量化后的公式为:

注意:

每个神经元节点默认都有偏置变量b,加上偏置变量后的计算公式为:

同时,两层神经网络不再使用sgn函数作为激励函数,而采用平滑的sigmoid函数:

σ(z)=1/(1+e^(-z) )

其图像如下:

理论证明: 两层及以上的神经网络可以无限逼近真实的对应函数,从而模拟数据之间的真实关系 ,这是神经网络强大预测能力的根本。但两层神经网络的计算量太大,当时的计算机的计算能力完全跟不上,直到1986年,Rumelhar和Hinton等人提出了反向传播(Backpropagation,BP)算法,解决了两层神经网络所需要的复杂计算量问题,带动了业界使用两层神经网络研究的热潮。

但好景不长,算法的改进仅使得神经网络风光了几年,然而计算能力不够,局部最优解,调参等一系列问题一直困扰研究人员。90年代中期,由Vapnik等人发明的SVM(Support Vector Machines,支持向量机)算法诞生,很快就在若干个方面体现出了对比神经网络的优势:无需调参;高效;全局最优解。

由于以上原因,SVM迅速打败了神经网络算法成为主流。神经网络的研究再一次进入低谷, AI Winter again 。

多层神经网络一般指两层或两层以上的神经网络(不包括输入层),更多情况下指两层以上的神经网络。

2006年,Hinton提出使用 预训练 ”(pre-training)和“微调”(fine-tuning)技术能优化神经网络训练,大幅度减少训练多层神经网络的时间

并且,他给多层神经网络相关的学习方法赋予了一个新名词–“ 深度学习 ”,以此为起点,“深度学习”纪元开始了:)

“深度学习”一方面指神经网络的比较“深”,也就是层数较多;另一方面也可以指神经网络能学到很多深层次的东西。研究发现,在权重参数不变的情况下,增加神经网络的层数,能增强神经网络的表达能力。

但深度学习究竟有多强大呢?没人知道。2012年,Hinton与他的学生在ImageNet竞赛中,用多层的卷积神经网络成功地对包含一千类别的一百万张图片进行了训练,取得了分类错误率15%的好成绩,这个成绩比第二名高了近11个百分点,充分证明了多层神经网络识别效果的优越性。

同时,科研人员发现GPU的大规模并行矩阵运算模式完美地契合神经网络训练的需要,在同等情况下,GPU的速度要比CPU快50-200倍,这使得神经网络的训练时间大大减少,最终再一次掀起了神经网络研究的热潮,并且一直持续到现在。

2016年基于深度学习的Alpha Go在围棋比赛中以4:1的大比分优势战胜了李世石,深度学习的威力再一次震惊了世界。

神经网络的发展历史曲折荡漾,既有被捧上神坛的高潮,也有无人问津的低谷,中间经历了数次大起大落,我们姑且称之为“三起三落”吧,其背后则是算法的改进和计算能力的持续发展。

下图展示了神经网络自发明以来的发展情况及一些重大时间节点。

当然,对于神经网络我们也要保持清醒的头脑。由上图,每次神经网络研究的兴盛期持续10年左右,从最近2012年算起,或许10年后的2022年,神经网络的发展将再次遇到瓶颈。

神经网络作为机器学习的一种,其模型训练的目的,就是使得参数尽可能的与真实的模型逼近。理论证明,两层及以上的神经网络可以无限逼近真实的映射函数。因此,给定足够的训练数据和训练时间,总能通过神经网络找到无限逼近真实关系的模型。

具体做法:首先给所有权重参数赋上随机值,然后使用这些随机生成的参数值,来预测训练数据中的样本。假设样本的预测目标为yp ,真实目标为y,定义值loss,计算公式如下:

loss = (yp -y) ^2

这个值称之为 损失 (loss),我们的目标就是使对所有训练数据的损失和尽可能的小,这就转化为求loss函数极值的问题。

一个常用方法是高等数学中的求导,但由于参数不止一个,求导后计算导数等于0的运算量很大,所以常用梯度下降算法来解决这样的优化问题。梯度是一个向量,由函数的各自变量的偏导数组成。

比如对二元函数 f =(x,y),则梯度∇f=(∂f/∂x,∂f/∂y)。梯度的方向是函数值上升最快的方向。梯度下降算法每次计算参数在当前的梯度,然后让参数向着梯度的反方向前进一段距离,不断重复,直到梯度接近零时截止。一般这个时候,所有的参数恰好达到使损失函数达到一个最低值的状态。下图为梯度下降的大致运行过程:

在神经网络模型中,由于结构复杂,每次计算梯度的代价很大。因此还需要使用 反向传播 (Back Propagation)算法。反向传播算法利用了神经网络的结构进行计算,不一次计算所有参数的梯度,而是从后往前。首先计算输出层的梯度,然后是第二个参数矩阵的梯度,接着是中间层的梯度,再然后是第一个参数矩阵的梯度,最后是输入层的梯度。计算结束以后,所要的两个参数矩阵的梯度就都有了。当然,梯度下降只是其中一个优化算法,其他的还有牛顿法、RMSprop等。

确定loss函数的最小值后,我们就确定了整个神经网络的权重,完成神经网络的训练。

在神经网络中一样的参数数量,可以用更深的层次去表达。

由上图,不算上偏置参数的话,共有三层神经元,33个权重参数。

由下图,保持权重参数不变,但增加了两层神经元。

在多层神经网络中,每一层的输入是前一层的输出,相当于在前一层的基础上学习,更深层次的神经网络意味着更深入的表示特征,以及更强的函数模拟能力。更深入的表示特征可以这样理解,随着网络的层数增加,每一层对于前一层次的抽象表示更深入。

如上图,第一个隐藏层学习到“边缘”的特征,第二个隐藏层学习到“边缘”组成的“形状”的特征,第三个隐藏层学习到由“形状”组成的“图案”的特征,最后的隐藏层学习到由“图案”组成的“目标”的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。

前面提到, 明斯基认为Rosenblatt提出的感知器模型不能处理最简单的“异或”(XOR)非线性问题,所以神经网络的研究没有前途,但当增加一层神经元后,异或问题得到了很好地解决,原因何在?原来从输入层到隐藏层,数据发生了空间变换,坐标系发生了改变,因为矩阵运算本质上就是一种空间变换。

如下图,红色和蓝色的分界线是最终的分类结果,可以看到,该分界线是一条非常平滑的曲线。

但是,改变坐标系后,分界线却表现为直线,如下图:

同时,非线性激励函数的引入使得神经网络对非线性问题的表达能力大大加强。

对于传统的朴素贝叶斯、决策树、支持向量机SVM等分类器,提取特征是一个非常重要的前置工作。在正式训练之前,需要花费大量的时间在数据的清洗上,这样分类器才能清楚地知道数据的维度,要不然基于概率和空间距离的线性分类器是没办法进行工作的。然而在神经网络中,由于巨量的线性分类器的堆叠(并行和串行)以及卷积神经网络的使用,它对噪声的忍耐能力、对多通道数据上投射出来的不同特征偏向的敏感程度会自动重视或忽略,这样我们在处理的时候,就不需要使用太多的技巧用于数据的清洗了。有趣的是,业内大佬常感叹,“你可能知道SVM等机器学习的所有细节,但是效果并不好,而神经网络更像是一个黑盒,很难知道它究竟在做什么,但工作效果却很好”。

人类对机器学习的环节干预越少,就意味着距离人工智能的方向越近。神经网络的这个特性非常有吸引力。

1) 谷歌的TensorFlow开发了一个非常有意思的神经网络 入门教程 ,用户可以非常方便地在网页上更改神经网络的参数,并且能看到实时的学习效率和结果,非常适合初学者掌握神经网络的基本概念及神经网络的原理。网页截图如下:

2) 深度学习领域大佬吴恩达不久前发布的《 神经网络和深度学习 》MOOC,现在可以在网易云课堂上免费观看了,并且还有中文字幕。

3) 《神经网络于深度学习》(Michael Nielsen着)、《白话深度学习与TensorFlow》也是不错的入门书籍。

❽ 循环神经网络

花书中关于RNN的内容记录于 https://www.jianshu.com/p/206090600f13 。

在前馈神经网络中,信息的传递是单向的,这种限制虽然使得网络变得更容易学习,但在一定程度上也减弱了神经网络模型的能力。在生物神经网络中,神经元之间的连接关系要复杂的多。 前馈神经网络可以看作是一个复杂的函数,每次输入都是独立的,即网络的输出只依赖于当前的输入。但是在很多现实任务中,网络的输入不仅和当前时刻的输入相关,也和其过去一段时间的输出相关 。因此,前馈网络难以处理时序数据,比如视频、语音、文本等。时序数据的长度一般是不固定的,而前馈神经网络要求输入和输出的维数都是固定的,不能任意改变。因此,当处理这一类和时序相关的问题时,就需要一种能力更强的模型。

循环神经网络(Recurrent Neural Network,RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。 和前馈神经网络相比,循环神经网络更加符合生物神经网络的结构。循环神经网络已经被广泛应用在语音识别、语言模型以及自然语言生成等任务上。循环神经网络的参数学习可以通过 随时间反向传播算法 来学习。

为了处理这些时序数据并利用其历史信息,我们需要让网络具有短期记忆能力。而前馈网络是一个静态网络,不具备这种记忆能力。

一种简单的利用历史信息的方法是建立一个额外的延时单元,用来存储网络的历史信息(可以包括输入、输出、隐状态等)。比较有代表性的模型是延时神经网络。

延时神经网络是在前馈网络中的非输出层都添加一个延时器,记录最近几次神经元的输出。在第 个时刻,第 层神经元和第 层神经元的最近 次输出相关,即:

延时神经网络在时间维度上共享权值,以降低参数数量。因此对于序列输入来讲,延时神经网络就相当于卷积神经网络

自回归模型(Autoregressive Model,AR) 是统计学上常用的一类时间序列模型,用一个变量 的历史信息来预测自己:

其中 为超参数, 为参数, 为第 个时刻的噪声,方差 和时间无关。

有外部输入的非线性自回归模型(Nonlinear Autoregressive with ExogenousInputs Model,NARX) 是自回归模型的扩展,在每个时刻 都有一个外部输入 ,产生一个输出 。NARX通过一个延时器记录最近几次的外部输入和输出,第 个时刻的输出 为:

其中 表示非线性函数,可以是一个前馈网络, 和 为超参数。

循环神经网络通过使用带自反馈的神经元,能够处理任意长度的时序数据。

给定一个输入序列 ,循环神经网络通过下面
公式更新带反馈边的隐藏层的活性值 :

其中 , 为一个非线性函数,也可以是一个前馈网络。

从数学上讲,上式可以看成一个动力系统。动力系统(Dynamical System)是一个数学上的概念,指 系统状态按照一定的规律随时间变化的系统 。具体地讲,动力系统是使用一个函数来描述一个给定空间(如某个物理系统的状态空间)中所有点随时间的变化情况。因此, 隐藏层的活性值 在很多文献上也称为状态(State)或隐状态(Hidden States) 。理论上,循环神经网络可以近似任意的非线性动力系统。

简单循环网络(Simple Recurrent Network,SRN)是一个非常简单的循环神经网络,只有一个隐藏层的神经网络。

在一个两层的前馈神经网络中,连接存在相邻的层与层之间,隐藏层的节点之间是无连接的。而 简单循环网络增加了从隐藏层到隐藏层的反馈连接

假设在时刻 时,网络的输入为 ,隐藏层状态(即隐藏层神经元活性值) 不仅和当前时刻的输入 相关,也和上一个时刻的隐藏层状态 相关:

其中 为隐藏层的净输入, 是非线性激活函数,通常为Logistic函数或Tanh函数, 为状态-状态权重矩阵, 为状态-输入权重矩阵, 为偏置。上面两式也经常直接写为:

如果我们把每个时刻的状态都看作是前馈神经网络的一层的话,循环神经网络可以看作是在时间维度上权值共享的神经网络 。下图给出了按时间展开的循环神经网络。

由于循环神经网络具有短期记忆能力,相当于存储装置,因此其计算能力十分强大。 前馈神经网络可以模拟任何连续函数,而循环神经网络可以模拟任何程序。

定义一个完全连接的循环神经网络,其输入为 ,输出为 :

其中 为隐状态, 为非线性激活函数, 和 为网络参数。

这样一个完全连接的循环神经网络可以近似解决所有的可计算问题

循环神经网络可以应用到很多不同类型的机器学习任务。根据这些任务的特点可以分为以下几种模式: 序列到类别模式、同步的序列到序列模式、异步的序列到序列模式

序列到类别模式主要用于序列数据的分类问题:输入为序列,输出为类别。比如在文本分类中,输入数据为单词的序列,输出为该文本的类别。

假设一个样本 为一个长度为 的序列,输出为一个类别 。我们可以将样本 按不同时刻输入到循环神经网络中,并得到不同时刻的隐藏状态 。我们可以将 看作整个序列的最终表示(或特征),并输入给分类器 进行分类:

其中 可以是简单的线性分类器(比如Logistic 回归)或复杂的分类器(比如多层前馈神经网络)

除了将最后时刻的状态作为序列表示之外,我们还可以对整个序列的所有状态进行平均,并用这个平均状态来作为整个序列的表示:

同步的序列到序列模式 主要用于序列标注(Sequence Labeling)任务,即每一时刻都有输入和输出,输入序列和输出序列的长度相同 。比如词性标注(Partof-Speech Tagging)中,每一个单词都需要标注其对应的词性标签。

输入为序列 ,输出为序列 。样本 按不同时刻输入到循环神经网络中,并得到不同时刻的隐状态 。每个时刻的隐状态 代表当前和历史的信息,并输入给分类器 得到当前时刻的标签 。

异步的序列到序列模式也称为 编码器-解码器(Encoder-Decoder)模型,即输入序列和输出序列不需要有严格的对应关系,也不需要保持相同的长度。 比如在机器翻译中,输入为源语言的单词序列,输出为目标语言的单词序列。

在异步的序列到序列模式中,输入为长度为 的序列 ,输出为长度为 的序列 。经常通过 先编码后解码 的方式来实现。先将样本 按不同时刻输入到一个循环神经网络(编码器)中,并得到其编码 。然后再使用另一个循环神经网络(解码器)中,得到输出序列 。为了建立输出序列之间的依赖关系,在解码器中通常使用非线性的自回归模型。

其中 分别为用作编码器和解码器的循环神经网络, 为分类器, 为预测输出 的向量表示。

循环神经网络的参数可以通过梯度下降方法来进行学习。给定一个训练样本 ,其中 为长度是 的输入序列, 是长度为 的标签序列。即在每个时刻 ,都有一个监督信息 ,我们定义时刻 的损失函数为:

其中 为第 时刻的输出, 为可微分的损失函数,比如交叉熵。那么整个序列上损失函数为:

整个序列的损失函数 关于参数 的梯度为:

即每个时刻损失 对参数 的偏导数之和。

循环神经网络中存在一个递归调用的函数 ,因此其计算参数梯度的方式和前馈神经网络不太相同。在循环神经网络中主要有两种计算梯度的方式: 随时间反向传播(BPTT)和实时循环学习(RTRL)算法。

随时间反向传播(Backpropagation Through Time,BPTT) 算法的主要思想是通过类似前馈神经网络的错误反向传播算法来进行计算梯度。

BPTT算法将循环神经网络看作是一个展开的多层前馈网络,其中“每一层”对应循环网络中的“每个时刻”。在“展开”的前馈网络中,所有层的参数是共享的,因此参数的真实梯度是将所有“展开层”的参数梯度之和

因为参数 和隐藏层在每个时刻 的净输入 有关,因此第 时刻的损失函数 关于参数 的梯度为:

其中 表示“直接”偏导数,即公式 中保持 不变,对 求偏导数,得到:

其中 为第 时刻隐状态的第 维; 除了第 个值为 外,其余都为 的行向量。

定义误差项 为第 时刻的损失对第 时刻隐藏神经层的净输入 的导数,则:

从而:

写成矩阵形式为:

由此得到整个序列的损失函数 关于参数 的梯度:

同理可得, 关于权重 和偏置 的梯度为:

在BPTT算法中,参数的梯度需要在一个完整的“前向”计算和“反向”计算后才能得到并进行参数更新。如下图所示。

与反向传播的BPTT算法不同的是,实时循环学习(Real-Time Recurrent Learning)是通过前向传播的方式来计算梯度。

假设循环神经网络中第 时刻的状态 为:

其关于参数 的偏导数为:

RTRL算法从第1 个时刻开始,除了计算循环神经网络的隐状态之外,还依次前向计算偏导数 。

两种学习算法比较:

RTRL算法和BPTT算法都是基于梯度下降的算法,分别通过前向模式和反向模式应用链式法则来计算梯度。 在循环神经网络中,一般网络输出维度远低于输入维度,因此BPTT算法的计算量会更小,但BPTT算法需要保存所有时刻的中间梯度,空间复杂度较高。RTRL算法不需要梯度回传,因此非常适合于需要在线学习或无限序列的任务中

循环神经网络在学习过程中的主要问题是由于 梯度消失或爆炸问题 ,很难建模长时间间隔(Long Range)的状态之间的依赖关系。

在BPTT算法中,我们有:

如果定义 ,则:

若 ,当 时, ,会造成系统不稳定,称为梯度爆炸问题;相反,若 ,当 时, ,会出现和深度前馈神经网络类似的梯度消失问题。

虽然简单循环网络理论上可以建立长时间间隔的状态之间的依赖关系,但是由于梯度爆炸或消失问题,实际上只能学习到短期的依赖关系。这样,如果t时刻的输出 依赖于 时刻的输入 ,当间隔 比较大时,简单神经网络很难建模这种长距离的依赖关系,称为 长程依赖问题(Long-Term dependencies Problem)

一般而言,循环网络的梯度爆炸问题比较容易解决,一般 通过权重衰减或梯度截断来避免。 权重衰减是通过给参数增加 或 范数的正则化项来限制参数的取值范围,从而使得 。梯度截断是另一种有效的启发式方法,当梯度的模大于一定阈值时,就将它截断成为一个较小的数。

梯度消失是循环网络的主要问题。除了使用一些优化技巧外,更有效的方式就是改变模型,比如让 ,同时使用 ,即:

其中 是一个非线性函数, 为参数。

上式中, 和 之间为线性依赖关系,且权重系数为1,这样就不存在梯度爆炸或消失问题。但是,这种改变也丢失了神经元在反馈边上的非线性激活的性质,因此也降低了模型的表示能力。

为了避免这个缺点,我们可以采用一种更加有效的改进策略:

这样 和 之间为既有线性关系,也有非线性关系,并且可以缓解梯度消失问题。但这种改进依然存在两个问题:

为了解决这两个问题,可以通过引入 门控机制 来进一步改进模型。

为了改善循环神经网络的长程依赖问题,一种非常好的解决方案是引入门控机制来控制信息的累积速度,包括 有选择地加入新的信息,并有选择地遗忘之前累积的信息 。这一类网络可以称为基于门控的循环神经网络(Gated RNN)。本节中,主要介绍两种基于门控的循环神经网络: 长短期记忆网络和门控循环单元网络。

长短期记忆(Long Short-Term Memory,LSTM)网络 是循环神经网络的一个变体,可以有效地解决简单循环神经网络的梯度爆炸或消失问题。

在 基础上,LSTM网络主要改进在以下两个方面:

其中 和 三个门(gate)来控制信息传递的路径; 为向量元素乘积; 为上一时刻的记忆单元; 是通过非线性函数得到的候选状态:

在每个时刻 ,LSTM网络的内部状态 记录了到当前时刻为止的历史信息。

在数字电路中,门(Gate)为一个二值变量{0, 1},0代表关闭状态,不许任何信息通过;1代表开放状态,允许所有信息通过。LSTM网络中的“门”是一种“软”门,取值在(0, 1) 之间,表示 以一定的比例运行信息通过 。LSTM网络中三个门的作用为:

(1)遗忘门 控制上一个时刻的内部状态 需要遗忘多少信息。
(2)输入门 控制当前时刻的候选状态 有多少信息需要保存。
(3)输出门

❾ 采用什么手段使神经网络预测更加准确

  1. 优化神经网络结构。如BP神经网络改变隐层神经元数量、训练算法等;

  2. 使用其他神经网络。如Elman神经网络考虑了前一时刻的输出,比较适合用于预测,预测效果往往更好。RBF神经网络的训练速度很快,训练效果也很好。

  3. 改进的神经网络算法。例如BP神经网络增加动量项、自适应学习率等措施,防止陷入局部极小影响预测效果。

  4. 组合神经网络。取长补短,将全局搜索能力强的算法与局部逼近快的算法组合起来,如遗传算法优化初始权值,再训练。这种方法比较灵活,可以和许多算法融合。

  5. 全面考虑影响因素。未来的预测值受许多因素影响,所以应该在基于历史数据的基础上,充分考虑各种因素,考虑得越周全,预知信息越多,预测效果一般更好。

❿ 深度卷积神经网络各种改进结构块汇总

这个网络主要源自于Resnet网络,其作用是:
将靠前若干层的某一层数据输出直接跳过多层引入到后面数据层的输入部分。
意味着后面的特征层的内容会有一部分由其前面的某一层线性贡献。
实验表明,残差网络更容易优化,并且能够通过增加相当的深度来提高准确率。

最终可以使得网络越来越深,Resnet152就是一个很深很深的网络。

残差网络的典型结构如下:

这个结构主要是在Inception网络结构中出现。
Inception网络采用不同大小的卷积核,使得存在不同大小的感受野,最后实现拼接达到不同尺度特征的融合。

不同大小卷积核并行卷积的典型结构如下:

这种结构主要利用在InceptionV3中。
利用1x7的卷积和7x1的卷积代替7x7的卷积,这样可以只使用约(1x7 + 7x1) / (7x7) = 28.6%的计算开销;利用1x3的卷积和3x1的卷积代替3x3的卷积,这样可以只使用约(1x3 + 3x1) / (3x3) = 67%的计算开销。
下图利用1x7的卷积和7x1的卷积代替7x7的卷积。

下图利用1x3的卷积和3x1的卷积代替3x3的卷积。

这个结构在Resnet里非常常见,其它网络也有用到。
所谓Bottleneck结构就是首先利用1x1卷积层进行特征压缩,再利用3x3卷积网络进行特征提取,再利用1x1卷积层进行特征扩张。

该结构相比于直接对输入进行3x3卷积减少了许多参数量。

当输入为26,26,512时,直接使用3x3、filter为512的卷积网络的参数量为512x3x3x512=2,359,296。

采用Bottleneck结构的话,假设其首先利用1x1、filter为128卷积层进行特征压缩,再利用3x3、filter为128的卷积网络进行特征提取,再利用1x1、filter为512的卷积层进行特征扩张,则参数量为 512×1×1×128 + 128×3×3×128 + 128×1×1×512 = 278,528。

深度可分离卷积主要在MobileNet模型上应用。
其特点是3x3的卷积核厚度只有一层,然后在输入张量上一层一层地滑动,每一次卷积完生成一个输出通道,当卷积完成后,在利用1x1的卷积调整厚度。

假设有一个3×3大小的卷积层,其输入通道为16、输出通道为32。具体为,32个3×3大小的卷积核会遍历16个通道中的每个数据,最后可得到所需的32个输出通道,所需参数为16×32×3×3=4608个。

应用深度可分离卷积,用16个3×3大小的卷积核分别遍历16通道的数据,得到了16个特征图谱。在融合操作之前,接着用32个1×1大小的卷积核遍历这16个特征图谱,所需参数为16×3×3+16×32×1×1=656个。

这种结构主要存在在Xception网络中。
改进版深度可分离卷积就是调换了一下深度可分离的顺序,先进行1x1卷积调整通道,再利用3x3卷积提取特征。
和普通的深度可分离卷积相比,参数量也会有一定的变化。

改进版深度可分离卷积加上残差网络的结构其实和它的名字是一样的,很好理解。
如下图所示:

在ResNet50里我们认识到一个结构,bottleneck design结构,在3x3网络结构前利用1x1卷积降维,在3x3网络结构后,利用1x1卷积升维,相比直接使用3x3网络卷积效果更好,参数更少,先进行压缩,再进行扩张。

而Inverted resials结构,在3x3网络结构前利用1x1卷积升维,在3x3网络结构后,利用1x1卷积降维,先进行扩张,再进行压缩。
这种结构主要用在MobilenetV2中。
其主要结构如下:

这个结构出现在Deeplabv3语义分割中。

其经过并行的空洞卷积,分别用不同rate的空洞卷积进行特征提取,再进行合并,再进行1x1卷积压缩特征。

空洞卷积可以在不损失信息的情况下,加大了感受野,让每个卷积输出都包含较大范围的信息。如下就是空洞卷积的一个示意图,所谓空洞就是特征点提取的时候会跨像素。

原文链接: https://blog.csdn.net/weixin_44791964/article/details/103042733

阅读全文

与神经网络可以在哪些地方改进相关的资料

热点内容
为什么后台总是断开网络 浏览:986
中国第三网络在哪里 浏览:833
网络稳定器哪个比较好 浏览:563
小米手机没网络时怎么关提示 浏览:262
学网络技术在哪个城市比较好 浏览:497
联想平板wifi已连接无法访问网络 浏览:115
网络连接需要多少宽带 浏览:319
蓝牙耳机怎么打开网络 浏览:300
手机哪种网络最稳定 浏览:441
合肥无线网络分析 浏览:707
电信网络信号说退回1m 浏览:568
网络要素主要为什么 浏览:611
网络强国作为党员应该如何做 浏览:20
领购时间和网络分发以哪个为准 浏览:276
无线网络显示连接但上不了 浏览:991
怎么修改网络wifi网速 浏览:743
网络的络是怎么写 浏览:480
什么是网络酒店 浏览:23
网络涉案多少判多少年 浏览:492
铁塔怎么连接网络 浏览:550

友情链接