①、网络节点 网络输入层神经元节点数就是系统的特征因子(自变量)个数,输出层神经元节点数就是系统目标个数。隐层节点选按经验选取,一般设为输入层节点数的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的好坏,目前神经网络还有很多方面理论基础需要研究,为什么学习能力强,现在的一些实验表明结果比较好,但发展底层理论基础还有很长的路要走。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)