㈠ 怎么选取训练神经网络时的Batch size
选取训练神经网络时先选好batch size,再调其他的超参数。并且实践上来说,就两个原则——batch size别太小,也别太大,其他都行。
因为合适的batch size范围和训练数据规模、神经网络层数、单元数都没有显着的关系。合适的batch size范围主要和收敛速度、随机梯度噪音有关。
为什么batch size别太小。别太小的限制在于,batch size太小,会来不及收敛。
所以batch size下限主要受收敛的影响。所以在常见的setting(~100 epochs),batch size一般不会低于16。如果你要选更小的batch size,你需要给自己找到很好的理由。
为什么batch size别太大:
batch size别太大的限制在于两个点。
1、batch size太大,memory容易不够用。这个很显然,就不多说了。
2、batch size太大,深度学习的优化training loss降不下去和泛化generalization gap都会出问题。
随机梯度噪音的magnitude在深度学习的continuous-time dynamics里是正比于learning rate/batch size。batch size太大,噪音就太小了。
而大家已经知道,随机梯度噪音对于逃离saddle points[2]和sharp minima [3]都必不可少的作用。前者可以解释为什么优化出问题,后者则可以解释为什么泛化出问题。
㈡ 运用MATLAB 中的 BP 神经网络 如何判断 哪些是影响结果的主要因素
主要是训练数据,还有神经网络的层数,每层权值数,还有训练时的修正因子都会影响的!
㈢ 神经网络算法原理
4.2.1 概述
人工神经网络的研究与计算机的研究几乎是同步发展的。1943年心理学家McCulloch和数学家Pitts合作提出了形式神经元的数学模型,20世纪50年代末,Rosenblatt提出了感知器模型,1982年,Hopfiled引入了能量函数的概念提出了神经网络的一种数学模型,1986年,Rumelhart及LeCun等学者提出了多层感知器的反向传播算法等。
神经网络技术在众多研究者的努力下,理论上日趋完善,算法种类不断增加。目前,有关神经网络的理论研究成果很多,出版了不少有关基础理论的着作,并且现在仍是全球非线性科学研究的热点之一。
神经网络是一种通过模拟人的大脑神经结构去实现人脑智能活动功能的信息处理系统,它具有人脑的基本功能,但又不是人脑的真实写照。它是人脑的一种抽象、简化和模拟模型,故称之为人工神经网络(边肇祺,2000)。
人工神经元是神经网络的节点,是神经网络的最重要组成部分之一。目前,有关神经元的模型种类繁多,最常用最简单的模型是由阈值函数、Sigmoid 函数构成的模型(图 4-3)。
储层特征研究与预测
以上算法是对每个样本作权值修正,也可以对各个样本计算δj后求和,按总误差修正权值。
㈣ 数据挖掘跟神经网络有什么关系
神经网络是属于人工智能范畴的,但可以用于数据挖掘,比如通过一批样本数据,训练出神经网络模型,然后再去测试新数据。就是对数据挖掘中分类技术的一个应用。
数据挖掘就是从大量数据中挖掘有用的知识,神经网络就是一种有学习能力的类似人脑活动的技术,其实也是在提炼知识。数据挖掘和许多学科都有交叉,概率统计、数据库、机器学习等等。
㈤ 神经网络浅谈
人工智能技术是当前炙手可热的话题,而基于神经网络的深度学习技术更是热点中的热点。去年谷歌的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》也是不错的入门书籍。
㈥ 请问神经网络中标准数据集怎样理解,有什么作用,怎样得到的。谢谢
标准数据集是神经网络的训练基础。训练就相当于条件反射中的条件,是已知的条件。来源是“经验”,是已知的映射组,当在神经网络中载入标准数据集后,神经网络随机生成一组矩阵,用矩阵处理标准集中的输入集后,用所得结果与标准输出集比较,将误差提出后根据误差,向减少误差的方向修改矩阵组,然后重复多次以后,误差减小到一定程度,标准输入集输入网络后能得到标准输出集,训练完成。这个矩阵组就是神经网络模型。神经网络就是用电脑在标准数据集上总结经验,来对新的输入进行映射
㈦ bp神经网络对输入数据和输出数据有什么要求
p神经网络的输入数据越多越好,输出数据需要反映网络的联想记忆和预测能力。
BP网络能学习和存贮大量的输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断调整网络的权值和阈值,使网络的误差平方和最小。
BP神经网络模型拓扑结构包括输入层(input)、隐层(hide layer)和输出层(output layer)。BP网络具有高度非线性和较强的泛化能力,但也存在收敛速度慢、迭代步数多、易于陷入局部极小和全局搜索能力差等缺点。
(7)神经网络的训练数据与什么有关扩展阅读:
BP算法主要思想是:输入学习样本,使用反向传播算法对网络的权值和偏差进行反复的调整训练,使输出的向量与期望向量尽可能地接近,当网络输出层的误差平方和小于指定的误差时训练完成,保存网络的权值和偏差。
1、初始化,随机给定各连接权及阀值。
2、由给定的输入输出模式对计算隐层、输出层各单元输出
3、计算新的连接权及阀值,计算公式如下:
4、选取下一个输入模式对返回第2步反复训练直到网络设输出误差达到要求结束训练。
㈧ 深度学习中测试数据跟验证数据的区别是什么我不太理解验证数据是干什么的
通常在深度学习中将数据集划分为训练集、验证集和测试集。训练数据是用来训练神经网络模型的数据,验证数据的作用是:在神经网络训练的过程中不断测试模型的误差,验证数据的误差随着神经网络模型训练的次数增加会呈现先减小后增加的数据,所以验证数据的误差会存在一个拐点,当达到这个拐点时停止神经网络的训练,这时得到的神经网络的误差最小。而测试数据就是用来在神经网络训练完毕的时候测试模型的误差的数据。
再通俗易懂的举例形容如下
训练集:相当于教材或例题,训练集在我们的模型过程中起的作用就是更新模型的参数,用以获得更好的性能,其行为表现就是让我们以为模型掌握了相关的知识(规律)。
验证集:相当于模拟考试,只是你调整自己状态的指示器,这种调整的结果(从模拟考到高考),有可能更好,也有可能更糟糕。验证集的存在是为了从一堆可能的模型中,帮我们选出表现最好的那个,可用来选超参数。
测试集:相当于高考,其特点是一考定终身,不给改的机会。训练集用来评估模型最终的性能;当多个模型进行对比试验验证模型性能时,多个模型应该在相同的测试集上面进行对比,这样才有效。就好比甲做A地区的卷子考了600分,乙做B地区的卷子考了590分,能不能说甲比乙成绩高,答案是不能。此外,请勿对测试数据进行训练。 如果评估指标取得了意外的好结果,则可能表明不小心对测试集进行了训练。例如,高准确率可能表明测试数据泄露到了训练集。
另:常见的划分原则有交叉验证法、留出法。
㈨ 基于日期的神经网络怎么设置训练数据啊
具体案例是什么样的?
日期的回归确实是可以,但是必须有这样一个原则才是有意义的:输出是日期的某个函数。比如一株小树,它在相同成长环境下的长度/周长/重量等,也就是说神经网络训练数据选择遵循的是输出必须和输入存在客观的关系,并且输入是输出的主要决定因素。
实际上网络本身对于效果的好坏影响并不大,只要网络参数选取合理,效果就不会相差太多,关键是特征的提取。