㈠ 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神經網路也存在以下的一些主要缺陷。
①學習速度慢,即使是一個簡單的問題,一般也需要幾百次甚至上千次的學習才能收斂。
②容易陷入局部極小值。
③網路層數、神經元個數的選擇沒有相應的理論指導。
④網路推廣能力有限。
對於上述問題,目前已經有了許多改進措施,研究最多的就是如何加速網路的收斂速度和盡量避免陷入局部極小值的問題。