『壹』 Matlab神經網路原理中可以用於尋找最優解的演算法有哪些
若果對你有幫助,請點贊。
神經網路的結構(例如2輸入3隱節點1輸出)建好後,一般就要求神經網路里的權值和閾值。現在一般求解權值和閾值,都是採用梯度下降之類的搜索演算法(梯度下降法、牛頓法、列文伯格-馬跨特法、狗腿法等等),這些演算法會先初始化一個解,在這個解的基礎上,確定一個搜索方向和一個移動步長(各種法算確定方向和步長的方法不同,也就使各種演算法適用於解決不同的問題),使初始解根據這個方向和步長移動後,能使目標函數的輸出(在神經網路中就是預測誤差)下降。 然後將它更新為新的解,再繼續尋找下一步的移動方向的步長,這樣不斷的迭代下去,目標函數(神經網路中的預測誤差)也不斷下降,最終就能找到一個解,使得目標函數(預測誤差)比較小。
而在尋解過程中,步長太大,就會搜索得不仔細,可能跨過了優秀的解,而步長太小,又會使尋解過程進行得太慢。因此,步長設置適當非常重要。
學習率對原步長(在梯度下降法中就是梯度的長度)作調整,如果學習率lr = 0.1,那麼梯度下降法中每次調整的步長就是0.1*梯度,
而在matlab神經網路工具箱里的lr,代表的是初始學習率。因為matlab工具箱為了在尋解不同階段更智能的選擇合適的步長,使用的是可變學習率,它會根據上一次解的調整對目標函數帶來的效果來對學習率作調整,再根據學習率決定步長。
機制如下:
if newE2/E2 > maxE_inc %若果誤差上升大於閾值
lr = lr * lr_dec; %則降低學習率
else
if newE2 < E2 %若果誤差減少
lr = lr * lr_inc;%則增加學習率
end
詳細的可以看《神經網路之家》nnetinfo里的《[重要]寫自己的BP神經網路(traingd)》一文,裡面是matlab神經網路工具箱梯度下降法的簡化代碼
『貳』 神經網路遺傳演算法函數極值尋優
對於未知的非線性函數,僅通過函數的輸入輸出數據難以准確尋找函數極值。這類問題可以通過神經網路結合遺傳演算法求解,利用神經網路的非線性擬合能力和遺傳演算法的非線性尋優能力尋找函數極值。本文用神經網路遺傳演算法尋優如下非線性函數極值,函數表達式為
函數圖形如下圖1所示。
從函數方程和圖形可以看出,該函數的全局最小值為0,對應的坐標為(0,0)。雖然從函數方程和圖形中很容易找出函數極值及極值對應坐標,但是在函數方程未知的情況下函數極值及極值對應坐標就很難找到。
神經網路遺傳演算法函數極值尋優主要分為BP神經網路訓練擬合和遺傳演算法極值尋優兩步,演算法流程如下圖2所示。
神經網路訓練擬合根據尋優函數的特點構建合適的BP神經網路,用非線性函數的輸出數據訓練BP網路,訓練後的BP神經網路就可以預測函數輸出。遺傳演算法極值尋優把訓練後的BP神經網路預測結果作為個體適應度值,通過選擇、交叉和變異操作尋找函數的全局最優值及對應輸入值。
本文根據非線性函數有2個輸入參數、1個輸出參數,確定BP神經網路結構為2-5-1.取函數的4 000組輸入輸出數據,從中隨機選取3 900組數據訓練網路,100組數據測試網路性能,網路訓練好後用於預測非線性函數輸出。
遺傳演算法中個體採用實數編碼,由於尋優函數只有2個輸入參數,所以個體長度為2。個體適應度值為BP神經網路預測值,適應度值越小。交叉概率為0.4,變異概率為0.2。
用函數輸入輸出數據訓練BP神經網路,使訓練後的網路能夠擬合非線性函數輸出,保存訓練好的網路用語計算個體適應度值。根據非線性函數方程隨機得到該函數的4 000組輸入輸出數據,存儲於data.mat中,其中input為函數輸入數據,output為函數對應輸出數據,從中隨機抽取3 900組訓練數據訓練網路,100組測試數據測試網路擬合性能。最後保存訓練好的網路。
把訓練好的BP神經網路預測輸出作為個體適應度值。
BP神經網路擬合結果分析
本文中個體的適應度值為BP神經網路預測值,因此BP神經網路預測精度對於最優位置的尋找具有非常重要的意義。由於尋優非線性函數有2個輸入參數、1個輸出參數,所以構建的BP神經網路的結構為2-5-1。共取非線性函數4 000組輸入輸出數據,從中隨機選擇3 900組數據訓練BP神經網路,100組數據作為測試數據測試BP神經網路擬合性能,BP神經網路預測輸出和期望輸出對比如下圖3所示。
從BP神經網路預測結果可以看出,BP神經網路可以准確預測非線性函數輸出,可以把網路預測近似看成函數實際輸出。
遺傳演算法尋優結果分析 BP神經網路訓練結束後,可以利用遺傳演算法尋找該非線性函數的最小值。遺傳演算法的迭代次數是100次,種群規模是20,交叉概率為0.4,變異概率為0.2,採用浮點數編碼,個體長度為21,優化過程中最優個體適應度值變化曲線如下圖4所示。
本文所使用的方法有比較重要的工程應用價值,比如對於某項試驗來說,試驗目的是獲取到最大試驗結果對應的實驗條件,但是由於時間和經費限制,該試驗只能進行有限次,可能單靠試驗結果找不到最優的試驗條件。這時可以在已知試驗數據的基礎上,通過本文介紹的神經網路遺傳演算法尋找最優試驗條件。
思路就是先根據試驗條件數和試驗結果數確定BP神經網路結構;然後把試驗條件作為輸入數據,試驗結果作為輸出數據訓練BP網路,使得訓練後的網路可以預測一定試驗條件下的試驗結果;最後把試驗條件作為遺傳演算法中的種群個體,把網路預測的試驗結果作為個體適應度值,通過遺傳演算法推導最優試驗結果及其對應試驗條件。
『叄』 如何用神經網路遺傳演算法求極值
===============學習神經網路可以到<神經網路之家>================
可以先用matlab神經網路工具箱訓練網路,當網路訓練好之後,把網路存起來.
然後編寫遺傳演算法,你知道,遺傳演算法是每代不斷迭代的,然後每代會根據適應度決定是否進入下一代,這里的適應度你就用sim(net,x)得到的值的倒數(或者類似的)作為適應度,然後其它就和遺傳演算法沒什麼兩樣了.最後得到的最優解, 就是網路的最優解. 也就是你要的結果了.
不過兄弟,這想法很牛B,很值得鼓勵這樣的想法.但我不得不說兩句,從實際角度來說,這樣的實現沒有太大的意義. 你的目的就是想從數據中找到Y最小的時候,X的什麼值, 但數據上畢竟只是數據,不管你怎麼繞,透露出來的信息還是有限的,不管怎麼繞,其實數據能提供最大限度的信息就是:在Y=10.88時,即X1=25,X2=24....X6=1.5時,Y是最小值的, 這是數據能提供的最大限度的信息,你再怎麼繞, 其實當你懂得神經網路的深層原理時,你會發現,你的方案並沒能挖掘出更優的解(因為數據的信息是有限的),這只是把自己繞暈了
不過能有這樣的想法,兄弟肯定是個學習的好材料,加油.
===============學習神經網路可以到<神經網路之家>================
『肆』 svm怎樣找最優參數
默認的就是 -t 2參數。 就是給RBF參數尋優的~沒有給其他核函數尋優。
Chinese:
Options:可用的選項即表示的涵義如下
-s svm類型:SVM設置類型(默認0)
0 -- C-SVC
1 --v-SVC
2 – 一類SVM
3 -- e -SVR
4 -- v-SVR
-t 核函數類型:核函數設置類型(默認2)
0 – 線性:u'v
1 – 多項式:(r*u'v + coef0)^degree
2 – RBF函數:exp(-r|u-v|^2)
3 –sigmoid:tanh(r*u'v + coef0)
-d degree:核函數中的degree設置(針對多項式核函數)(默認3)
-g r(gama):核函數中的gamma函數設置(針對多項式/rbf/sigmoid核函數)(默認1/ k)
-r coef0:核函數中的coef0設置(針對多項式/sigmoid核函數)((默認0)
-c cost:設置C-SVC,e -SVR和v-SVR的參數(損失函數)(默認1)
-n nu:設置v-SVC,一類SVM和v- SVR的參數(默認0.5)
-p p:設置e -SVR 中損失函數p的值(默認0.1)
-m cachesize:設置cache內存大小,以MB為單位(默認40)
-e eps:設置允許的終止判據(默認0.001)
-h shrinking:是否使用啟發式,0或1(默認1)
-wi weight:設置第幾類的參數C為weight*C(C-SVC中的C)(默認1)
-v n: n-fold交互檢驗模式,n為fold的個數,必須大於等於2
其中-g選項中的k是指輸入數據中的屬性數。option -v 隨機地將數據剖分為n部分並計算交互檢驗准確度和均方根誤差。以上這些參數設置可以按照SVM的類型和核函數所支持的參數進行任意組合,如果設置的參數在函數或SVM類型中沒有也不會產生影響,程序不會接受該參數;如果應有的參數設置不正確,參數將採用默認值。
『伍』 神經網路超參數選擇
深度學習模型通常由隨機梯度下降演算法進行訓練。隨機梯度下降演算法有許多變形:例如 Adam、RMSProp、Adagrad 等等。這些演算法都需要你設置學習率。學習率決定了在一個小批量(mini-batch)中權重在梯度方向要移動多遠。
如果學習率很低,訓練會變得更加可靠,但是優化會耗費較長的時間,因為朝向損失函數最小值的每個步長很小。
如果學習率很高,訓練可能根本不會收斂,損失函數一直處於波動中,甚至會發散。權重的改變數可能非常大,使得優化越過最小值,使得損失函數變得更糟。
訓練應當從相對較大的學習率開始。這是因為在開始時,初始的隨機權重遠離最優值。在訓練過程中,學習率應當下降,以允許細粒度的權重更新。
參考: https://www.jiqixin.com/articles/2017-11-17-2
批次大小是每一次訓練神經網路送入模型的樣本數。在 合理的范圍之內 ,越大的 batch size 使下降方向越准確,震盪越小,通常取值為[16,32,64,128]。
Batch_Size=全部數據集 缺點:
1) 隨著數據集的海量增長和內存限制,一次性載入所有的數據進來變得越來越不可行。
2) 以 Rprop 的方式迭代,會由於各個 Batch 之間的采樣差異性,各次梯度修正值相互抵消,無法修正。
Batch_Size = 1 缺點:
使用在線學習,每次修正方向以各自樣本的梯度方向修正,橫沖直撞各自為政,難以達到收斂。
在合理范圍內,增大 Batch_Size 有何好處?
1) 內存利用率提高了,大矩陣乘法的並行化效率提高。
2) 跑完一次 epoch(全數據集)所需的迭代次數減少,對於相同數據量的處理速度進一步加快。
3) 在一定范圍內,一般來說 Batch_Size 越大,其確定的下降方向越准,引起訓練震盪越小。
盲目增大 Batch_Size 有何壞處?
1) 內存利用率提高了,但是內存容量可能撐不住了。
2) 跑完一次 epoch(全數據集)所需的迭代次數減少,要想達到相同的精度,其所花費的時間大大增加了,從而對參數的修正也就顯得更加緩慢。
3) Batch_Size 增大到一定程度,其確定的下降方向已經基本不再變化。
參考: https://blog.csdn.net/juronghui/article/details/78612653
迭代次數是指整個訓練集輸入到神經網路進行訓練的次數,當測試錯誤率和訓練錯誤率相差較小,且測試准確率趨於穩定時(達到最優),可認為當前迭代次數合適;當測試錯誤率先變小後變大時則說明迭代次數過大了,需要減小迭代次數,否則容易出現過擬合。
用激活函數給神經網路加入一些非線性因素,使得網路可以更好地解決較為復雜的問題。參考: https://blog.csdn.net/tyhj_sf/article/details/79932893
它能夠把輸入的連續實值變換為0和1之間的輸出。
缺點:
1) 在深度神經網路中梯度反向傳遞時導致梯度爆炸和梯度消失,其中梯度爆炸發生的概率非常小,而梯度消失發生的概率比較大。
2) Sigmoid 的 output 不是0均值,使得收斂緩慢。batch的輸入能緩解這個問題。
它解決了Sigmoid函數的不是zero-centered輸出問題,然而梯度消失的問題和冪運算的問題仍然存在。
tanh函數具有中心對稱性,適合於有對稱性的二分類
雖然簡單,但卻是近幾年的重要成果,有以下幾大優點:
1) 解決了梯度消散問題 (在正區間)
2)計算速度非常快,只需要判斷輸入是否大於0
3)收斂速度遠快於sigmoid和tanh
ReLU也有幾個需要特別注意的問題:
1)ReLU的輸出不是zero-centered
2)Dead ReLU Problem,指的是某些神經元可能永遠不會被激活,導致相應的參數永遠不能被更新。有兩個主要原因可能導致這種情況產生: (1) 非常不幸的參數初始化,這種情況比較少見 (2) learning rate太高導致在訓練過程中參數更新太大,不幸使網路進入這種狀態。解決方法是可以採用Xavier初始化方法,以及避免將learning rate設置太大或使用adagrad等自動調節learning rate的演算法。
為了解決Dead ReLU Problem,提出了將ReLU的前半段設為 αx 而非 0 ,如 PReLU 。
1)深度學習往往需要大量時間來處理大量數據,模型的收斂速度是尤為重要的。所以,總體上來講,訓練深度學習網路盡量使用zero-centered數據 (可以經過數據預處理實現) 和zero-centered輸出。所以要盡量選擇輸出具有zero-centered特點的激活函數以加快模型的收斂速度。
2)如果使用 ReLU,那麼一定要小心設置 learning rate,而且要注意不要讓網路出現很多 「dead」 神經元,如果這個問題不好解決,那麼可以試試 Leaky ReLU、PReLU 或者 Maxout.
3)最好不要用 sigmoid,你可以試試 tanh,不過可以預期它的效果會比不上 ReLU 和 Maxout.
公式: https://www.cnblogs.com/xiaobingqianrui/p/10756046.html
優化器比較: https://blog.csdn.net/weixin_40170902/article/details/80092628
『陸』 用粒子群群演算法優化BP神經網路的參數,進行極值尋優
這四個都屬於人工智慧演算法的范疇。其中BP演算法、BP神經網路和神經網路
屬於神經網路這個大類。遺傳演算法為進化演算法這個大類。
神經網路模擬人類大腦神經計算過程,可以實現高度非線性的預測和計算,主要用於非線性擬合,識別,特點是需要「訓練」,給一些輸入,告訴他正確的輸出。若干次後,再給新的輸入,神經網路就能正確的預測對於的輸出。神經網路廣泛的運用在模式識別,故障診斷中。BP演算法和BP神經網路是神經網路的改進版,修正了一些神經網路的缺點。
遺傳演算法屬於進化演算法,模擬大自然生物進化的過程:優勝略汰。個體不斷進化,只有高質量的個體(目標函數最小(大))才能進入下一代的繁殖。如此往復,最終找到全局最優值。遺傳演算法能夠很好的解決常規優化演算法無法解決的高度非線性優化問題,廣泛應用在各行各業中。差分進化,蟻群演算法,粒子群演算法等都屬於進化演算法,只是模擬的生物群體對象不一樣而已。
『柒』 如何選擇神經網路的超參數
1、神經網路演算法隱含層的選取
1.1 構造法
首先運用三種確定隱含層層數的方法得到三個隱含層層數,找到最小值和最大值,然後從最小值開始逐個驗證模型預測誤差,直到達到最大值。最後選取模型誤差最小的那個隱含層層數。該方法適用於雙隱含層網路。
1.2 刪除法
單隱含層網路非線性映射能力較弱,相同問題,為達到預定映射關系,隱層節點要多一些,以增加網路的可調參數,故適合運用刪除法。
1.3黃金分割法
演算法的主要思想:首先在[a,b]內尋找理想的隱含層節點數,這樣就充分保證了網路的逼近能力和泛化能力。為滿足高精度逼近的要求,再按照黃金分割原理拓展搜索區間,即得到區間[b,c](其中b=0.619*(c-a)+a),在區間[b,c]中搜索最優,則得到逼近能力更強的隱含層節點數,在實際應用根據要求,從中選取其一即可。
『捌』 神經網路參數如何確定
神經網路各個網路參數設定原則:
①、網路節點 網路輸入層神經元節點數就是系統的特徵因子(自變數)個數,輸出層神經元節點數就是系統目標個數。隱層節點選按經驗選取,一般設為輸入層節點數的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.演算法
在理論模型研究的基礎上構作具體的神經網路模型,以實現計算機模擬或准備製作硬體,包括網路學習演算法的研究。這方面的工作也稱為技術模型研究。
神經網路用到的演算法就是向量乘法,並且廣泛採用符號函數及其各種逼近。並行、容錯、可以硬體實現以及自我學習特性,是神經網路的幾個基本優點,也是神經網路計算方法與傳統方法的區別所在。
『玖』 求人工神經網路的具體演算法,數學模型,比如求一個函數最優值之類的,不要各種亂七八糟的介紹,謝謝
神經網路就像多項式或者線性模型一樣,是個看不見表達式的模型,它的表達式就是網路,它比一般模型具有更高的自由度和彈性;同時它是一個典型的黑箱模型方法;比多項式等模型還黑。優化演算法,就是尋優的演算法,所謂尋優過程,就是尋找使目標函數最小時(都是統一表示成尋找使函數具有最小值)的自變數的值。回歸或者擬合一個模型,例如用一個多項式模型去擬合一組數據,其本質就是尋找使殘差平方和最小的參數值,這就是一個尋優的過程,其實就是尋找使函數F(x)值最小時的x的值;對於這個具體的尋找過程就涉及到演算法問題,就是如何計算。所謂演算法,是數值分析的一個范疇,就是解這問題的方法;例如一個一元二次方程 x^2-3x+1=0的解法,因為簡單可以直接求解,也可以用牛頓逐個靠近的方法求解,也即是迭代,慢慢接近真實解,如此下去不斷接近真值,要注意迭代演算法是涉及演算法精度的,這些迭代演算法是基於計算機的,演算法的初衷也是用近似的演算法用一定的精度來接近真實值。 比如上面的方程也可以用遺傳演算法來解,可以從一些初始值最終迭代到最佳解。神經網路在尋找網路的參數即權值的時候,也有尋找使訓練效果最好的過程,這也是尋優的過程,這里涉及到了演算法就是所謂的神經網路演算法,這和最小二乘演算法是一樣的道理;例如做響應面的時候,其實就是二次回歸,用最小二乘得到二次模型的參數,得到一個函數,求最大產物量就是求函數模型的最大值,怎麼算呢?頂點處如果導數為0,這個地方對應的x值就是最優的,二次模型簡單可以用偏導數=0來直接解決,這過程也可以遺傳演算法等來解決。說到底所謂尋優的本質就是,尋找函數極值處對應的自變數的值。