導航:首頁 > 網路設置 > 神經網路搭建參數設置

神經網路搭建參數設置

發布時間:2023-03-23 17:37:15

㈠ 深度學習中的神經網路參數怎麼調整

根據前一次運行的情況做調整,例如出現梯度爆炸則要調低學習速率,出現過擬合則要調高正則化參數的系數。

㈡ AI數學基礎14——神經網路的參數和超參數

神經網路的參數( Parameters ),是指神經網路模型內部的配置變數,比如W、b,可以用訓練的方式獲得

神經網路的超參數( Hyper Parameters) ,是神經網路模型外部的配置參數,比如學習率a、隱藏層數L、隱藏層單元數、激活函數的選擇、momentum、mini batch size、regularization parameters等等,這些參數不能從訓練中得到, 必須手動設置, 並且影響最後的參數W和b的值 。

訓練神經網路的過程,也是系統性調整神經網路超參數的過程;Andrew Ng說:「經常試試不同的超參數,勤於檢查結果,看看有沒有更好的超參數取值,你將會得到設定超參數的直覺」

㈢ 卷積神經網路參數解析

(1)現象:

        (1-1)一次性將batch數量個樣本feed神經網路,進行前向傳播;然後再進行權重的調整,這樣的一整個過程叫做一個回合(epoch),也即一個batch大小樣本的全過程就是一次迭代。

        (1-2)將訓練數據分塊,做成批(batch training)訓練可以將多個訓練數據元的loss function求和,使用梯度下降法,最小化 求和後的loss function ,進而對神經網路的參數進行優化更新

(2)一次迭代:包括前向傳播計算輸出向量、輸出向量與label的loss計算和後向傳播求loss對權重向量 w 導數(梯度下降法計算),並實現權重向量 w 的更新。

(3)優點:

        (a)對梯度向量(代價函數對權值向量 w 的導數)的精確估計,保證以最快的速度下降到局部極小值的收斂性;一個batch一次梯度下降;

        (b)學習過程的並行運行;

        (c)更加接近隨機梯度下降的演算法效果;

        (d)Batch Normalization 使用同批次的統計平均和偏差對數據進行正則化,加速訓練,有時可提高正確率 [7]

(4)現實工程問題:存在計算機存儲問題,一次載入的batch大小受到內存的影響;

(5)batch參數選擇:

        (5-1)從收斂速度的角度來說,小批量的樣本集合是最優的,也就是我們所說的mini-batch,這時的batch size往往從幾十到幾百不等,但一般不會超過幾千

        (5-2)GPU對2的冪次的batch可李叢核以發揮更佳的性能,因此設置成16、32、64、128...時往往要比設置為整10、整100的倍數時表現更優

    (6)4種加速批鄭槐梯度下降的方法 [8] :

        (6-1)使用動量-使用權重的 速度 而非 位置 來改變權重。

        (6-2)針對不同權重參數使用不同學習率。

        (6-3)RMSProp-這是Prop 的均方根 ( Mean Square ) 改進形式,Rprop 僅僅使用梯度的符號,RMSProp 是其針對 Mini-batches 的平均化版本

        (6-4)利用曲率信息的最優化方法。

(1)定義:運用梯度下降演算法優化loss成本函數時,權重向量的更新規則中,在梯度項前會乘以一個系數,這個系數就叫學習速率η

(2)效果:

        (2-1)學習率η越小,每次迭代權值向量變化小,學習速度慢,軌跡在權值空間中較光滑,收斂慢;

        (2-2)學習率η越大,每次迭代權值向量變化大,學習速度快,但是有可能使變化處於震盪中,無法收斂;

    (3)處理方法:

        (3-1)既要加快學習速度又要保持穩定的方法修改delta法哪掘則,即添加動量項。

    (4)選擇經驗:

        (4-1)基於經驗的手動調整。 通過嘗試不同的固定學習率,如0.1, 0.01, 0.001等,觀察迭代次數和loss的變化關系,找到loss下降最快關系對應的學習率。

        (4-2)基於策略的調整。

                (4-2-1)fixed 、exponential、polynomial

                (4-2-2)自適應動態調整。adadelta、adagrad、ftrl、momentum、rmsprop、sgd

    (5)學習率η的調整:學習速率在學習過程中實現自適應調整(一般是衰減)

        (5-1)非自適應學習速率可能不是最佳的。

        (5-2)動量是一種自適應學習速率方法的參數,允許沿淺方向使用較高的速度,同時沿陡峭方向降低速度前進

        (5-3)降低學習速率是必要的,因為在訓練過程中,較高學習速率很可能陷入局部最小值。

參考文獻:

[1]  Simon Haykin. 神經網路與機器學習[M]. 機械工業出版社, 2011.

[2]   訓練神經網路時如何確定batch的大小?

[3]   學習筆記:Batch Size 對深度神經網路預言能力的影響  

[4]   機器學習演算法中如何選取超參數:學習速率、正則項系數、minibatch size.  http://blog.csdn.net/u012162613/article/details/44265967

[5]   深度學習如何設置學習率 . http://blog.csdn.net/mao_feng/article/details/52902666

[6]   調整學習速率以優化神經網路訓練. https://zhuanlan.hu.com/p/28893986

[7]   機器學習中用來防止過擬合的方法有哪些

[8]   Neural Networks for Machine Learning by Geoffrey Hinton .

[9]   如何確定卷積神經網路的卷積核大小、卷積層數、每層map個數

[10]   卷積神經網路的卷積核大小、卷積層數、每層map個數都是如何確定下來的呢?

㈣ 神經網路演算法中,參數的設置或者調整,有什麼方法可以採用

若果對你有幫助,請點贊。
神經網路的結構(例如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神經網路工具箱梯度下降法的簡化代碼

若果對你有幫助,請點贊。
祝學習愉快

㈤ 極簡神經網路--如何計算神經網路的參數個數

首先,我們搭建一個神經網路,然後輸出看一下參數個數

輸出如下

可以看出,keras輸出了每層的參數個前春前數,分別是2,16,18,三層總計36個參數
那麼這些參數是如何確定的呢?
我們先來總結下規律
第一層,1個輸入,1個輸出,結果為2
第二層,1個輸入,8個輸出,結果為16
第三層,8個輸入,2個森陵輸出,結果為18
規律不難找,參數個數=輸入個數*輸出個數+輸出個數
其中的原因不難分析,每個神經元其實是在進行一個y= ax+b的計算,所以他有兩個參數,一個是輸入的權重a,一個是偏置b,如果輸入有多個值,則存在多個權重a,所以一個神經元的參數個數是 輸入個數+一個偏置,如果該層有多個輸出,則整體參數個數為
輸出個數 *(輸入個數+1)=輸入個數 * 輸出個數+輸出個數。

1 查找use_bias參數,將Dense參數改為False,看看模型的參數數量慧清是否有變化?
2 增加Dense的activation參數,看看模型的參數數量是否有變化?

㈥ 神經網路超參數選擇

深度學習模型通常由隨機梯度下降演算法進行訓練。隨機梯度下降演算法有許多變形:例如 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

㈦ 神經網路weight參數怎麼初始化

不一定,也可設置為[-1,1]之間。事實上,必須要有權值為負數,不然只有激活神經元,沒有抑制的也不行。至於為什麼在[-1,1]之間就足夠了,這是因為歸一化和Sigmoid函數輸出區間限制這兩個原因。一般在編程時,設置一個矩陣為bounds=ones(S,1)*[-1,1]; %權值上下界。
在MATLAB中,可以直接使用net = init(net);來初始化。我們可以通過設定網路參數net.initFcn和net.layer{i}.initFcn這一技巧來初始化一個給定的網路。net.initFcn用來決定整個網路的初始化函數。前饋網路的預設值為initlay,它允許每一層用單獨的初始化函數。設定了net.initFcn ,那麼參數net.layer{i}.initFcn 也要設定用來決定每一層的初始化函數。對前饋網路來說,有兩種不同的初始化方式經常被用到:initwb和initnw。initwb函數根據每一層自己的初始化參數(net.inputWeights{i,j}.initFcn)初始化權重矩陣和偏置。前饋網路的初始化權重通常設為rands,它使權重在-1到1之間隨機取值。這種方式經常用在轉換函數是線性函數時。initnw通常用於轉換函數是曲線函數。它根據Nguyen和Widrow[NgWi90]為層產生初始權重和偏置值,使得每層神經元的活動區域能大致平坦的分布在輸入空間。

㈧ 深層神經網路的超參數調試、正則化及優化

訓練集  ( Training set )

       作用是用來擬合模型,通過設置分類器的參數,訓練分類模型。後續結合驗證集作用時,會選出同一參數的不同取值,擬合出多個分類器。

驗證集  ( Dev set )

       作用是當通過訓練集訓練出多個模型後,為了能找出效果最佳的模型,使用各個模型對驗證集數據進行預測,並記錄模型准確率。選出效果最佳的模型所對應的參數,即用來調整模型參數。如svm中的參數c和核函數等。

測試集 ( Test set )

       通過訓練集和驗證集得出最優模型後,使用測試集進行模型預測。用來衡量該最優模型的性能和分類能力。即可以把測試集當做從來不存在的數據集,當已經確定模型參數後,使用測試集進行模型性能評價。

一個有助於理解的形象比喻:

        訓練集 ——  課本,學生根據課本里的內容來掌握知識。

        驗證集 —— 作業,通過作業可以知道 不同學生學習情況、進步的速度快慢。

        測試集 ——  考試,考的題是平常都沒有見過,考察學生舉一反三的能力。

        訓練集  直接參與了模型調參的過程,顯然不能用來反映模型真實的能力(防止課本死記硬背的學生擁有最好的成績,即防止 過擬合 ) 。

        驗證集  參與了人工調參(超參數)的過程,也不能用來最終評判一個模型(刷題庫的學生不代表其學習能力強)。

       所以要通過最終的考試 (測試集) 來考察一個學生(模型)真正的能力。

       如何將只有一個包含m個樣例的數據集D,產生出訓練集S和測試集T(驗證集可以省略)?主要有以下三種方法:

自助法 ( bootstrapping )

       給定m個樣本的數據集D,我們對它進行采樣產生數據集D',每次隨機從D中挑選一個樣本,將其拷貝入D',然後再將樣本放回原始數據集D。顯然,該樣本在下次采樣時任然有可能被採到。這個過程重復m次後,我們就得到了含有m個樣本的數據集D',這就是自助采樣的結果。         樣本有重復采樣,也有一次也沒有被採到的。從未採到的結果是 ,取極限得到

                                           

因此,使用自助法約有1/3的數據集沒有被選中過,它們用於測試,這種方式叫「外包估計」。

       自助法在數據集小,難以劃分訓練集、測試集的時候有很大的效果,如果數據集足夠大的時候,留出法和交叉驗證是更好的選擇。

留出法 ( hold-out )

       將整個數據集D劃分為兩個互斥的集合,其中一個作為訓練集S,另一個作為測試集T。即,D=S∪T,S∩T=∅。在S上訓練出模型,T作為測試集,來評估模型效果。

       當樣本數據量較小(10000條左右及以下)時,通常取其中70%作為訓練集,30%作為測試集;或60%作為訓練集,驗證集和測試集各20%。

交叉驗證法 ( cross validation )

       如圖所示,交叉驗證法的實現流程大致如下:

       (1) 將整個數據集分成k個大小相似的子集,即D=D1∪D2∪...∪Dk,Di∩Dj=∅(故又稱k折交叉驗證法,通常取k=10 )。

       (2) 對於每一個模型Mi,演算法執行k次,每次選擇一個Sj(1≤j≤k)作為測試集,其它作為訓練集來訓練模型Mi,把訓練得到的模型在Sj上進行測試,這樣一來,每次都會得到一個誤差E,最後對k次得到的誤差求平均,就可以得到模型Mi的泛化誤差。

       (3) 演算法選擇具有最小泛化誤差的模型作為最終模型,並且在整個訓練集上再次訓練該模型,從而得到最終的模型。

       交叉驗證的主要的目的是 為了選擇不同的模型類型(比如一次線性模型、非線性模型) ,而 不是為了選擇具體模型的具體參數 。比如在BP神經網路中,其目的主要為了選擇模型的層數、神經元的激活函數、每層模型的神經元個數(即所謂的超參數),每一層網路神經元連接的最終權重是在模型選擇(即K折交叉驗證)之後,由全部的訓練數據重新訓練。

       假設這就是數據集,顯然用簡單分類器(如邏輯回歸)並不能很好地擬合上述數據。這種情況稱為  欠擬合  。

       相反地,如果採用一個非常復雜的分類器(如深度神經網路或含有隱藏單元的神經網路),擬合效果會非常好。但與此同時,模型的復雜度也會過高,這種稱為 過擬合  。

       在兩者之間,可能會存在一些復雜程度適中、數據擬合適度的分類器,擬合結果較為合理,稱為 適度擬合 。

       如上圖所示,訓練集誤差和驗證集誤差均較高時為 高偏差(欠擬合)  情況;訓練集誤差較高,驗證集誤差較高低時為  高方差(過擬合)  情況。

(1) 如何減小偏差(防止欠擬合)

       ① 增大神經網路規模。

(2) 如何減小方差(防止過擬合)

       ① 增加數據集樣本數量;

       ② 正則化。

        參數   是指神經網路中由數據驅動並進行調整的變數,如𝑊和𝑏。

        超參數   是指無需數據驅動,而是在訓練前或者訓練中人為進行調整的變數。例如演算法中的learning rate 𝑎(學習率)、iterations(梯度下降法循環的數量)、𝐿(隱藏層數目)、𝑛[𝑙](隱藏層單元數目)、choice of activation function(激活函數的選擇)等都需要人為設置,這些數字實際上控制了最後的參數𝑊和𝑏的值,所以它們被稱作超參數。

       神經網路中的超參數主要分為三類:網路參數、優化參數、正則化參數。

​網路參數

       可指網路層與層之間的交互方式(相加、相乘或者串接等)、卷積核數量和卷積核尺寸、網路層數(也稱深度)和激活函數等。

優化參數

       一般指學習率(learning rate)、批樣本數量(batch size)、不同優化器的參數以及部分損失函數的可調參數等。

正則化參數

       權重衰減系數,隨機失活比率(dropout)等。

       正則化有利於減小訓練集和驗證集准確率的方差,防止過擬合。在無法增加樣本數量或增加樣本數量的成本過高時,正則化是一種行之有效的方法。

        一般將任意 維向量  的 - 范數定義為

                                                              

       根據定義:

       當 時, 的 范數為 ,表示向量 中非0元素的個數。

       當 時, 的 范數為 ,等於向量 中所有元素的絕對值之和。

        當 時, 的 范數為 ,等於向量 中所有元素的平方和開根號。

       正則化(Regularization) 的主要目的是控制模型復雜度,減小過擬合。最基本的正則化方法是在原目標(代價)函數 中添加懲罰項,對復雜度高的模型進行「懲罰」。

       對於神經網路模型, 正則化即在其代價函數中添加 正則項:

                                  

其中, 。之後再求解優化問題 即可。

       假設某三層神經網路存在過擬合問題,採用dropout正則化會遍歷網路的每一層,並設置消除該層中每一個節點的概率(比如0.5),最後得到一個節點更少、規模更小的網路,然後再用反向傳播方法進行訓練,就能有效防止過擬合。

       最常用的方法是 inverted dropout(反向隨機失活) 。對於一個三層神經網路( ),以第三層為例,實施dropout的步驟如下:

① 定義一個三層dropout矩陣d3:

                                     d3=numpy.random.rand(a3.shape[0],a3.shape[1])

其中,a3表示神經網路第三層的激活函數矩陣。

② 設置 ( )的大小。 表示保留某個隱藏單元的概率。將第①步產生的隨機矩陣d3的每個元素與 進行比較,小於置1,大於置0,得到新的d3矩陣(1表示保留該節點,0表示刪除該節點)。

③ 將a3與新的d3矩陣相乘(矩陣對應元素相乘),得到新的激活函數矩陣:

                                                       a3 =np.multiply(a3,d3)

④ 將新的a3矩陣除以keep-prob:

                                                              a3 /= keep_prob

目的是保證a3的期望值(均值)不變,從而保證第三層的輸出不變。

① 使用dropout可以使得部分節點失活,可以起到簡化神經網路結構的作用,從而起到正則化的作用。

② 因為dropout是使得神經網路的節點隨機失活,這樣會讓神經網路在訓練的時候不會使得某一個節點權重過大。因為該節點輸入的特徵可能會被清除,所以神經網路的節點不能依賴任何輸入的特徵。dropout最終會產生收縮權重的平方范數的效果,來壓縮權重,達到類似於 正則化的效果。

① dropout在測試階段不需要使用,因為如果在測試階段使用dropout可能會導致預測值產生隨機變化(因為dropout使節點隨機失活)。而且,在訓練階段已經將權重參數除以keep-prob來保證輸出的期望值不變,所以在測試階段沒必要再使用dropout。

② 神經網路的不同層在使用dropout的時候,keep-prob可以不同。因為可能有的層參數比較多,比較復雜,keep-prob可以小一些,而對於結構比較簡單的層,keep-prob的值可以大一些甚至為1,keep-prob等於1表示不使用dropout,即該層的所有節點都保留。

      加快訓練速度。

       對於一個神經網路模型,考慮其代價函數:

                                               

       如果未歸一化輸入,其代價函數的形狀會較為細長狹窄。在這樣的代價函數的限制下,為避免陷入局部最優解,梯度下降法的學習率必須設置得非常小。

       如果歸一化輸入,代價函數便呈現球形輪廓。這種情況下,不論從哪個位置開始梯度下降法,都能使用較大的學習率,從而更快速、直接地找到全局最優解。

      對於包含n個特徵的m個樣本的數據集,其輸入歸一化的過程主要分為兩步:

① 零均值化

                                                             

                                                            

② 歸一化方差

                                                           

                                                              

其中, 代表第 個樣本的特徵矩陣。

       訓練集、驗證集、測試集特徵矩陣的平均值 和標准差 要保持一致,確保它們歸一化後符合同一分布。

㈨ 神經網路參數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的好壞,目前神經網路還有很多方面理論基礎需要研究,為什麼學習能力強,現在的一些實驗表明結果比較好,但發展底層理論基礎還有很長的路要走。

㈩ SPSS的神經網路模型參數設置疑問

1神經網路對於定量數據也能用

2因子根據具體研究面對確定
3比例3:7,也可以cross
4驗證集必須
5這些就多了,有數學公式

閱讀全文

與神經網路搭建參數設置相關的資料

熱點內容
公司網路插入360隨身wifi 瀏覽:857
連接到網路後如何查看網路密碼 瀏覽:561
平板修改不了網路設置 瀏覽:554
手機無線網路為什麼總是連不上 瀏覽:281
只有電腦沒有網路如何投屏 瀏覽:974
華為網路專家要多少錢 瀏覽:101
蘋果手機照相網路在哪呢 瀏覽:891
怎麼查看wifi的網路速率 瀏覽:185
電信網路充值在哪裡 瀏覽:96
今天手機網路怎麼用不了了 瀏覽:732
無盤網路系統哪個品牌好 瀏覽:310
新年到了沒有網路了怎麼辦 瀏覽:312
設置兩個手機網路共享 瀏覽:478
網路信號25正常99代表什麼 瀏覽:306
華為手機網路太卡了咋辦 瀏覽:650
紅米手機檢測網路差怎麼辦 瀏覽:280
廣電網路產品怎麼樣 瀏覽:363
信號滿網路特別慢 瀏覽:150
內網網路安全隱患 瀏覽:747
小米11如何通過藍牙共享網路 瀏覽:980

友情鏈接