㈠ BP神经网络模型各个参数的选取问题
样本变量不需要那么多,因为神经网络的信息存储能力有限,过多的样本会造成一些有用的信息被丢弃。如果样本数量过多,应增加隐层节点数或隐层数目,才能增强学习能力。
一、隐层数
一般认为,增加隐层数可以降低网络误差(也有文献认为不一定能有效降低),提高精度,但也使网络复杂化,从而增加了网络的训练时间和出现“过拟合”的倾向。一般来讲应设计神经网络应优先考虑3层网络(即有1个隐层)。一般地,靠增加隐层节点数来获得较低的误差,其训练效果要比增加隐层数更容易实现。对于没有隐层的神经网络模型,实际上就是一个线性或非线性(取决于输出层采用线性或非线性转换函数型式)回归模型。因此,一般认为,应将不含隐层的网络模型归入回归分析中,技术已很成熟,没有必要在神经网络理论中再讨论之。
二、隐层节点数
在BP 网络中,隐层节点数的选择非常重要,它不仅对建立的神经网络模型的性能影响很大,而且是训练时出现“过拟合”的直接原因,但是目前理论上还没有一种科学的和普遍的确定方法。 目前多数文献中提出的确定隐层节点数的计算公式都是针对训练样本任意多的情况,而且多数是针对最不利的情况,一般工程实践中很难满足,不宜采用。事实上,各种计算公式得到的隐层节点数有时相差几倍甚至上百倍。为尽可能避免训练时出现“过拟合”现象,保证足够高的网络性能和泛化能力,确定隐层节点数的最基本原则是:在满足精度要求的前提下取尽可能紧凑的结构,即取尽可能少的隐层节点数。研究表明,隐层节点数不仅与输入/输出层的节点数有关,更与需解决的问题的复杂程度和转换函数的型式以及样本数据的特性等因素有关。
㈡ 神经网络中阈值和权值的初值怎么调整为什么我的老是误差特别大呢
将训练目标改小一些,你先首枣塌不设权值和阈值,让其训练,挑出一组训练效果最好的,在命令窗口上显示出者圆初始权值和阈值,再将权值和阈值设置成那组权值和阈值即可,你岩亩试试吧,我也是初学,也不敢保证能行
㈢ 神经网络参数hyper-parameters选择
我们到目前为止在神经网络中使用了好几个参数, hyper-parameters包括:
学习率(learning rate):η
Regularization parameter:λ
之前只是设置了一些合适的值, 如何来选择合适的hyper-parameters呢?
例如:
我们设置如下参数:
隐藏层: 30个神经元, mini-batch size: 10, 训练30个薯正epochs
η=10.0, λ=1000.0
>>>importmnist_loader>>>
training_data,validation_data,test_data=\...mnist_loader.load_data_wrapper()
>>>importnetwork2>>>net=network2.Network([784,30,10]) >>数氏悔>net.SGD(training_data,30,10,10.0,lmbda=1000.0,...evaluation_data=validation_data,monitor_evaluation_accuracy=True)
结果:
结果: Epoch 0 training complete Accuracy on evaluation data: 1030 / 10000
Epoch 1 training complete Accuracy on evaluation data: 990 / 10000
Epoch 2 training complete Accuracy on evaluation data: 1009 / 10000
差到跟随机猜测一样!
神经网络中可变化调整的因素很多:
神经网络结构::层数、每层神经元个数多少
初始化w和b的方法
Cost函数(目标定义的cost函数最小)
Regularization: L1、L2(减少overfitting的方式)
Sigmoid输出还是Softmax?
使用Droput?
训练集大小
mini-batch size()
学习率(learning rate):η
Regularization parameter:λ
总体策略:
从简单的出发:开始实验,循环的个数减小
如:MNIST数据集, 开始不知如何设置, 可以先简化使用0,1两类图, 减少80%数据量, 用两层神经网络[784, 2] (比[784, 30, 2]快),取得设置是否合理?核困
更快的获取反馈: 之前每个epoch来检测准确率, 可以替换为每1000个图之后,或者减少validation set的量, 比如用100代替10000
重复实验:
>>> net = network2.Network([784, 10])
>>> net.SGD(training_data[:1000], 30, 10, 10.0, lmbda = 1000.0, \ ... evaluation_data=validation_data[:100], \ ... monitor_evaluation_accuracy=True)
Epoch 0 training complete Accuracy on evaluation data: 10 / 100
Epoch 1 training complete Accuracy on evaluation data: 10 / 100
Epoch 2 training complete Accuracy on evaluation data: 10 / 100
更快得到反馈, 之前可能每轮要等10秒,现在不到1秒: λ之前设置为1000, 因为减少了训练集的数量, λ为了保证weight decay一样,对应的减少λ = 20.0
>>> net = network2.Network([784, 10])
>>> net.SGD(training_data[:1000], 30, 10, 10.0, lmbda = 20.0, \ ... evaluation_data=validation_data[:100], \ ... monitor_evaluation_accuracy=True)
结果:
Epoch0 training complete Accuracy one valuationdata:12/100
Epoch1 training complete Accuracy one valuationdata:14/100
Epoch2 training complete Accuracy one valuationdata:25/100
Epoch3 training complete Accuracy one valuationdata:18/100
也许学习率η=10.0太低? 应该更高?增大到100:
>>>net=network2.Network([784,10])
>>>net.SGD(training_data[:1000],30,10,100.0,lmbda=20.0,\...evaluation_data=validation_data[:100],\...monitor_evaluation_accuracy=True)
结果:
Epoch0 training complete Accuracy one valuationdata:10/100
Epoch1 training complete Accuracy one valuationdata:10/100
Epoch2 training complete Accuracy one valuationdata:10/100
Epoch3 training complete Accuracy one valuationdata:10/100
结果非常差, 也许结果学习率应该更低? =10
>>>net=network2.Network([784,10])
>>>net.SGD(training_data[:1000],30,10,1.0,lmbda=20.0,\...evaluation_data=validation_data[:100],\...monitor_evaluation_accuracy=True)
结果好很多:
Epoch0 training complete Accuracy one valuationdata:62/100
Epoch1 training complete Accuracy one valuationdata:42/100
Epoch2 training complete Accuracy one valuationdata:43/100
Epoch3 training complete Accuracy one valuationdata:61/100
假设保持其他参数不变: 30 epochs, mini-batch size: 10,λ=5.0
实验学习率=0.025, 0.25, 2.5
如果学习率太大,可能造成越走越高,跳过局部最低点 太小,学习可能太慢
对于学习率, 可以从0.001, 0.01, 0.1, 1, 10 开始尝试, 如果发现cost开始增大, 停止, 实验更小的微调 。
对于MNIST, 先找到0.1, 然后0.5, 然后0.25。
对于提前停止学习的条件设置, 如果accuracy在一段时间内变化很小 (不是一两次,5到10次变化很小)。
之前一直使用学习率是常数, 可以开始设置大一下, 后面逐渐减少: 比如开始设定常数, 直到在验证集上准确率开始下降, 减少学习率 (/2, /3)。
对于regularization parameterλ:
先不设定regularization, 把学习率调整好, 然后再开始实验λ, 1.0, 10, 100..., 找到合适的, 再微调。
对于mini-batch size:
太小: 没有充分利用矩阵计算的library和硬件的整合的快速计算。
太大: 更新权重和偏向不够频繁。
好在mini-batch size和其他参数变化相对独立, 所以不用重新尝试, 一旦选定。
自动搜索: 网格状搜索各种参数组合
(grid search) 2012**Random search for hyper-parameter optimization, by James Bergstra and Yoshua Bengio (2012). by James Bergstra and Yoshua Bengio 1998
paper**Efficient BackProp, by Yann LeCun, Léon Bottou, Genevieve Orr and Klaus-Robert Müller (1998) by Yann LeCun, Léon Bottou, Genevieve Orr and Klaus-Robert Müller.
参数之前会互相影响 如何选择合适的hyper-parameters仍是一个正在研究的课题,
随机梯度下降有没有其他变种: Hessian 优化, Momentum-based gradient descent
除了sigmoid,其他人工神经网络的模型?
tanh
tanh(w⋅x+b)
要靠实验比较rectified、linear和sigmoid,tanh的好坏,目前神经网络还有很多方面理论基础需要研究,为什么学习能力强,现在的一些实验表明结果比较好,但发展底层理论基础还有很长的路要走。
㈣ BP神经网络的阀值调节怎么弄的
不是说把W改成B就可以,而是在调节权值的时候就会不断更肢亏码新阈值(阀值是空耐错别字)
因此阈值只会出现 1。预设历哪 2。已经在权值调整过程中一起调整了
㈤ matlab训练BP神经网络,nntool中如何设置,权值,激活函数的修改等问题
net1=newff(minmax(pX),[16,1],{'tansig','purelin'},'trainlm');
这个是激活函数的语句,但是唤枝一般不需要修改。
BP神经网络是计算机自主学习的一个过程,程序员要做的就是确定隐含层神经元的数量以及训练精度,训练步数以及学习速率等参数。
隐含层神经元数桥基量的公式:敏链谨
㈥ BP神经网络中初始权值和阈值的设定
1、首先需要了解BP神经网络是一种多层前馈网络。
㈦ BP神经网络中初始权值和阈值的设定
1、首先需要了解BP神经网络是一种多层前馈网络。
㈧ 神经网络参数如何确定
神经网络各个网络参数设定原则:
①、网络节点 网络输入层神经元节点数就是系统的特征因子(自变量)个数,输出层神经元节点数就是系统目标个数。隐层节点选按经验选取,一般设为输入层节点数的75%。如果输入层有7个节点,输出层1个节点,那么隐含层可暂设为5个节点,即构成一个7-5-1 BP神经网络模型。在系统训练时,实际还要对不同的隐层节点数4、5、6个分别进行比较,最后确定出最合理的网络结构。
②、初始权值的确定 初始权值是不应完全相等的一组值。已经证明,即便确定 存在一组互不相等的使系统误差更小的权值,如果所设Wji的的初始值彼此相等,它们将在学习过程中始终保持相等。故而,在程序中,我们设计了一个随机发生器程序,产生一组一0.5~+0.5的随机数,作为网络的初始权值。
③、最小训练速率 在经典的BP算法中,训练速率是由经验确定,训练速率越大,权重变化越大,收敛越快;但训练速率过大,会引起系统的振荡,因此,训练速率在不导致振荡前提下,越大越好。因此,在DPS中,训练速率会自动调整,并尽可能取大一些的值,但用户可规定一个最小训练速率。该值一般取0.9。
④、动态参数 动态系数的选择也是经验性的,一般取0.6 ~0.8。
⑤、允许误差 一般取0.001~0.00001,当2次迭代结果的误差小于该值时,系统结束迭代计算,给出结果。
⑥、迭代次数 一般取1000次。由于神经网络计算并不能保证在各种参数配置下迭代结果收敛,当迭代结果不收敛时,允许最大的迭代次数。
⑦、Sigmoid参数 该参数调整神经元激励函数形式,一般取0.9~1.0之间。
⑧、数据转换。在DPS系统中,允许对输入层各个节点的数据进行转换,提供转换的方法有取对数、平方根转换和数据标准化转换。
(8)神经网络理论值怎么设置扩展阅读:
神经网络的研究内容相当广泛,反映了多学科交叉技术领域的特点。主要的研究工作集中在以下几个方面:
1.生物原型
从生理学、心理学、解剖学、脑科学、病理学等方面研究神经细胞、神经网络、神经系统的生物原型结构及其功能机理。
2.建立模型
根据生物原型的研究,建立神经元、神经网络的理论模型。其中包括概念模型、知识模型、物理化学模型、数学模型等。
3.算法
在理论模型研究的基础上构作具体的神经网络模型,以实现计算机模拟或准备制作硬件,包括网络学习算法的研究。这方面的工作也称为技术模型研究。
神经网络用到的算法就是向量乘法,并且广泛采用符号函数及其各种逼近。并行、容错、可以硬件实现以及自我学习特性,是神经网络的几个基本优点,也是神经网络计算方法与传统方法的区别所在。
㈨ 神经网络权值怎么确定
神经网络的权值是通过对网络的训练得到的。如果使用MATLAB的话不要自己设定,newff之后会自动赋值。也可以手动:net.IW{}= ; net.bias{}=。一般来说输入归一化,那么w和b取0-1的随机数就行。神经网络的权值确定的目的是为了让神经网络在训练过程中学习到有用的信息,这意味着参数梯度不应该为0。
参数初始化要满足两个必要条件:
1、各个激活层不会出现饱和现象,比如对于sigmoid激活函数,初始化值不能太大或太小,导致陷入其饱和区。
2、各个激活值不为0,如果激活层输出为零,也就是下一层卷积层的输入为零,所以这个卷积层对权值求偏导为零,从而导致梯度为0。
(9)神经网络理论值怎么设置扩展阅读:
神经网络和权值的关系。
在训练智能体执行任务时,会选择一个典型的神经网络框架,并相信它有潜力为这个任务编码特定的策略。注意这里只是有潜力,还要学习权重参数,才能将这种潜力变化为能力。
受到自然界早成行为及先天能力的启发,在这项工作中,研究者构建了一个能自然执行给定任务的神经网络。也就是说,找到一个先天的神经网络架构,然后只需要随机初始化的权值就能执行任务。研究者表示,这种不用学习参数的神经网络架构在强化学习与监督学习都有很好的表现。
其实如果想象神经网络架构提供的就是一个圈,那么常规学习权值就是找到一个最优点(或最优参数解)。但是对于不用学习权重的神经网络,它就相当于引入了一个非常强的归纳偏置,以至于,整个架构偏置到能直接解决某个问题。
但是对于不用学习权重的神经网络,它相当于不停地特化架构,或者说降低模型方差。这样,当架构越来越小而只包含最优解时,随机化的权值也就能解决实际问题了。如研究者那样从小架构到大架构搜索也是可行的,只要架构能正好将最优解包围住就行了。
㈩ 神经网络权值怎么算
net.iw{1,1}=W0;net.b{1}=B0;
net.iw{1,1}=W0;输入层和隐层间的权值,net.b{1}=B0输入层和隐层间的阈值.
BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。
BP神经网络具有任码皮旦意复杂的模式分类能力和优良的多维函数映射能力,解决了简单感知器不能解决的异或(Exclusive OR,XOR)和一些其他问题。从结构上讲,BP网络迟扰具有输入层、隐藏层和输出层;
从本质上讲,BP算法就是以网络误差平方为目标函数、采用梯度下降法来计算目标函数的最小值。
(10)神经网络理论值怎么设置扩展阅读:
BP神经网络无论在网络理论还是在性能方面已比较成熟。其突出优点就是具有很强的非线性映射能力和柔性的网络结构。网络的中间握桥层数、各层的神经元个数可根据具体情况任意设定,并且随着结构的差异其性能也有所不同。但是BP神经网络也存在以下的一些主要缺陷。
①学习速度慢,即使是一个简单的问题,一般也需要几百次甚至上千次的学习才能收敛。
②容易陷入局部极小值。
③网络层数、神经元个数的选择没有相应的理论指导。
④网络推广能力有限。
对于上述问题,目前已经有了许多改进措施,研究最多的就是如何加速网络的收敛速度和尽量避免陷入局部极小值的问题。