神经网络参数如何确定

神经网络参数如何确定,第1张

神经网络各个网络参数设定原则:

①、网络节点  网络输入层神经元节点数就是系统的特征因子(自变量)个数,输出层神经元节点数就是系统目标个数。隐层节点选按经验选取,一般设为输入层节点数的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系统中,允许对输入层各个节点的数据进行转换,提供转换的方法有取对数、平方根转换和数据标准化转换。

扩展资料:

神经网络的研究内容相当广泛,反映了多学科交叉技术领域的特点。主要的研究工作集中在以下几个方面:

1.生物原型

从生理学、心理学、解剖学、脑科学、病理学等方面研究神经细胞、神经网络、神经系统的生物原型结构及其功能机理。

2.建立模型

根据生物原型的研究,建立神经元、神经网络的理论模型。其中包括概念模型、知识模型、物理化学模型、数学模型等。

3.算法

在理论模型研究的基础上构作具体的神经网络模型,以实现计算机模拟或准备制作硬件,包括网络学习算法的研究。这方面的工作也称为技术模型研究。

神经网络用到的算法就是向量乘法,并且广泛采用符号函数及其各种逼近。并行、容错、可以硬件实现以及自我学习特性,是神经网络的几个基本优点,也是神经网络计算方法与传统方法的区别所在。

参考资料:百度百科-神经网络(通信定义)

神经网络的参数( Parameters ),是指神经网络模型内部的配置变量,比如W、b,可以用训练的方式获得

神经网络的超参数( Hyper Parameters) ,是神经网络模型外部的配置参数,比如学习率a、隐藏层数L、隐藏层单元数、激活函数的选择、momentum、mini batch size、regularization parameters等等,这些参数不能从训练中得到, 必须手动设置, 并且影响最后的参数W和b的值 。

训练神经网络的过程,也是系统性调整神经网络超参数的过程;Andrew Ng说:“经常试试不同的超参数,勤于检查结果,看看有没有更好的超参数取值,你将会得到设定超参数的直觉”

我们到目前为止在神经网络中使用了好几个参数, 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的好坏,目前神经网络还有很多方面理论基础需要研究,为什么学习能力强,现在的一些实验表明结果比较好,但发展底层理论基础还有很长的路要走。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7844833.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-10
下一篇 2023-04-10

发表评论

登录后才能评论

评论列表(0条)

保存