導航:首頁 > 網路設置 > 神經網路超參數是多少

神經網路超參數是多少

發布時間:2023-07-01 05:04:14

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

訓練集  ( 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個樣本的數據集,其輸入歸一化的過程主要分為兩步:

① 零均值化

                                                             

                                                            

② 歸一化方差

                                                           

                                                              

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

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

B. 卷積神經網路(CNN)基礎

在七月初七情人節,牛郎織女相見的一天,我終於學習了CNN(來自CS231n),感覺感觸良多,所以趕快記下來,別忘了,最後祝大家情人節快樂5555555.正題開始!

CNN一共有卷積層(CONV)、ReLU層(ReLU)、池化層(Pooling)、全連接層(FC(Full Connection))下面是各個層的詳細解釋。

卷積,尤其是圖像的卷積,需要一個濾波器,用濾波器對整個圖像進行遍歷,我們假設有一個32*32*3的原始圖像A,濾波器的尺寸為5*5*3,用w表示,濾波器中的數據就是CNN的參數的一部分,那麼在使用濾波器w對A進行濾波的話,可以用下面的式子表示:

其中x為原始圖像的5*5*3的一部分,b是偏置項置為1。在對A進行濾波之後,產生的是一個28*28*1的數據。那麼假設我們存在6個濾波器,這六個濾波器之間彼此是獨立的,也就是他們內部的數據是不同的且沒有相關性的。可以理解為一個濾波器查找整幅圖像的垂直邊緣,一個查找水平邊緣,一個查找紅色,一個查找黑色這樣。那麼我就可以產生6個28*28*1的數據,將它們組合到一起就可以產生28*28*6的數據,這就是卷積層主要做的工作。

CNN可以看作一系列的卷積層和ReLU層對原始數據結構進行處理的神經網路,處理的過程可以用下面這幅圖表示

特別要注意的是濾波器的深度一定要與上一層傳來的數據的深度相同,就像上圖的第二個卷積層在處理傳來的28*28*6的數據時要使用5*5*6的濾波器.

濾波器在圖像上不斷移動對圖像濾波,自然存在步長的問題,在上面我們舉的例子都是步長為1的情況,如果步長為3的話,32*32*3的圖像經過5*5*3的濾波器卷積得到的大小是(32-5)/3+1=10, 註:步長不能為2因為(32-5)/2+1=14.5是小數。

所以當圖像大小是N,濾波器尺寸為F時,步長S,那麼卷積後大小為(N-F)/S+1

我們從上面的圖中可以看到圖像的長和寬在逐漸的減小,在經過超過5層之後極可能只剩下1*1的空間尺度,這樣是十分不好的,而且也不利於我們接下來的計算,所以我們想讓卷積層處理完之後圖像在空間尺度上大小不變,所以我們引入了pad the border的操作。pad其實就是在圖像周圍補0,擴大圖像的尺寸,使得卷積後圖像大小不變。在CNN中,主要存在4個超參數,濾波器個數K,濾波器大小F,pad大小P和步長S,其中P是整數,當P=1時,對原始數據的操作如圖所示:

那麼在pad操作後卷積後的圖像大小為:(N-F+2*P)/S+1
而要想讓卷積層處理後圖像空間尺度不變,P的值可以設為P=(F-1)/2

卷積層輸入W 1 *H 1 *D 1 大小的數據,輸出W 2 *H 2 *D 2 的數據,此時的卷積層共有4個超參數:
K:濾波器個數
P:pad屬性值
S:濾波器每次移動的步長
F:濾波器尺寸
此時輸出的大小可以用輸入和超參計算得到:
W 2 =(W 1 -F+2P)/S+1
H 2 =(H 1 -F+2P)/S+1
D 2 =D 1

1*1的濾波器也是有意義的,它在深度方向做卷積,例如1*1*64的濾波器對56*56*64的數據卷積得到56*56的數據

F通常是奇數,這樣可以綜合考慮上下左右四個方向的數據。

卷積層從神經元的角度看待可以有兩個性質: 參數共享和局域連接 。對待一個濾波器,例如5*5*3的一個濾波器,對32*32*3的數據卷積得到28*28的數據,可以看作存在28*28個神經元,每個對原圖像5*5*3的區域進行計算,這28*28個神經元由於使用同一個濾波器,所以參數相同,我們稱這一特性為 參數共享

針對不同的濾波器,我們可以看到他們會看到同一區域的圖像,相當於在深度方向存在多個神經元,他們看著相同區域叫做 局域連接

參數共享減少了參數的數量,防止了過擬合
局域連接為查找不同特徵更豐富的表現圖像提供了可能。
卷積就像是對原圖像的另一種表達。

激活函數,對於每一個維度經過ReLU函數輸出即可。不改變數據的空間尺度。

通過pad操作,輸出圖像在控制項上並沒有變化,但是深度發生了變化,越來越龐大的數據給計算帶來了困難,也出現了冗餘的特徵,所以需要進行池化操作,池化不改變深度,只改變長寬,主要有最大值和均值兩種方法,一般的池化濾波器大小F為2步長為2,對於最大值池化可以用下面的圖像清晰的表示:

卷積層輸入W 1 *H 1 *D 1 大小的數據,輸出W 2 *H 2 *D 2 的數據,此時的卷積層共有2個超參數:
S:濾波器每次移動的步長
F:濾波器尺寸
此時輸出的大小可以用輸入和超參計算得到:
W 2 =(W 1 -F)/S+1
H 2 =(H 1 -F)/S+1
D 2 =D 1

將最後一層(CONV、ReLU或Pool)處理後的數據輸入全連接層,對於W 2 *H 2 *D 2 數據,我們將其展成1*1*W 2 *H 2 *D 2 大小的數據,輸入層共有W 2 *H 2 *D 2 個神經元,最後根據問題確定輸出層的規模,輸出層可以用softmax表示。也就是說,全連接層就是一個常見的BP神經網路。而這個網路也是參數最多的部分,是接下來想要去掉的部分。完整的神經網路可以用下面的圖表示:

[(CONV-ReLU)*N-POOL?]*M-(FC-RELU)*K,SoftMax

1.更小的濾波器與更深的網路
2.只有CONV層而去掉池化與全鏈接

最早的CNN,用於識別郵編,結構為:
CONV-POOL-CONV-POOL-CONV-FC
濾波器大小5*5,步長為1,池化層2*2,步長為2

2012年由於GPU技術所限,原始AlexNet為兩個GPU分開計算,這里介紹合起來的結構。

輸入圖像為227*227*3

1.首次使用ReLU
2.使用Norm layers,現在已經拋棄,因為效果不大
3.數據經過預處理(例如大小變化,顏色變化等)
4.失活比率0.5
5.batch size 128
6.SGD Momentum 參數0.9(SGD和Momentum見我的其他文章)
7.學習速率 0.01,准確率不在提升時減少10倍,1-2次後達到收斂
8.L2權重減少0.0005
9.錯誤率15.4%

改進自AlexNet,主要改變:
1.CONV1的濾波器從11*11步長S=4改為7*7步長為2.
2.CONV3,4,5濾波器數量有384,384,256改為512,1024,512(濾波器數量為2的n次冪有利於計算機計算可以提高效率)
錯誤率:14.8%後繼續改進至11.2%

當前最好的最易用的CNN網路,所有卷積層濾波器的大小均為3*3,步長為1,pad=1,池化層為2*2的最大值池化,S=2。

主要參數來自全連接層,這也是想要去掉FC的原因。

具有高度的統一性和線性的組合,易於理解,十分方便有VGG-16,VGG-19等多種結構。
錯誤率7.3%

完全移除FC層,參數只有500萬,使用Inception模塊(不太理解,有時間繼續看)
准確率6.67%

准確率3.6%
擁有極深的網路結構,且越深准確率越高。是傳統CNN不具備的特點,傳統CNN並非越深越准確。需要訓練時間較長但是快於VGG

1.每個卷積層使用Batch Normalization
2.Xavier/2初始化
3.SGD+Momentum(0.9)
4.Learning rate:0.1,准確率不變減小10倍(因為Batch Normalization所以比AlexNet大)
5.mini-batch size 256
6.Weight decay of 0.00001
7.不適用失活(因為Batch Normalization)

具體的梯度過程學完ResNet再說吧。

C. 機器學習的超參數是什麼

機器學習的超參數是什麼
自從接觸了機器學習後,在很多地方如書籍和文獻中經常會看到有一類參數叫超參數(hyperparameter),其中提超參數最多的地方是在支持向量機(SVM)和深度學習(Deep Learning)中,比如支持向量機中的鬆弛因子:

上式中的C就是鬆弛因子,這個參數在支持向量機中不像參數W那樣,可以通過優化學習得到。還有深度學習中的超參數,如學習率(Learning Rate),在訓練深度網路時,這個學習率參數需要提前指定,比如最近設為0.09等。
那麼問題來了,到底什麼是超參數(hyperparameter)?在很多教材和文獻中都是默認你理解超參數的定義的。如果不知道超參數的定義的話,有些文獻中的話可能不好理解,比如在機器學習中,尤其是在支持向量機中,為什麼有些文獻要把數據集分割成訓練集,驗證集和測試集,而不是直接分割為訓練集和測試集?只有理解了何謂超參數,才會明白某些文獻中這樣分割的道理。
什麼是超參數呢?先來看一下超參數的學院風定義:在機器學習的上下文中,超參數是在開始學習過程之前設置值的參數,而不是通過訓練得到的參數數據。通常情況下,需要對超參數進行優化,給學習機選擇一組最優超參數,以提高學習的性能和效果。
超參數的通俗定義:超參數也是一種參數,它具有參數的特性,比如未知,也就是它不是一個已知常量。一種手工可配置的設置,需要為它根據已有或現有的經驗指定「正確」的值,也就是人為為它設定一個值,它不是通過系統學習得到的。
下面主要看看超參數在機器學習中的定義及示例:
在機器學習的上下文中,超參數是在開始學習過程之前設置值的參數。 相反,其他參數的值通過訓練得出。
超參數:
1. 定義關於模型的更高層次的概念,如復雜性或學習能力。
2. 不能直接從標准模型培訓過程中的數據中學習,需要預先定義。
3. 可以通過設置不同的值,訓練不同的模型和選擇更好的測試值來決定
超參數的一些示例:
1. 樹的數量或樹的深度
2. 矩陣分解中潛在因素的數量
3. 學習率(多種模式)
4. 深層神經網路隱藏層數
5. k均值聚類中的簇數

D. 深層神經網路

如上圖所示,邏輯回歸是一個淺層模型,可以理解為是單層神經網路。深層或淺層是一個程度的問題。如果將邏輯回歸模型加入一個隱藏層就變了一個雙層神經網路,但還是比較淺的。如果加入 5 個隱藏層,則可以說是一個深層模型。通常可以把隱藏層數當作超參數,然後在交叉驗證數據集上進行評估,從而選擇合適的深度。

上圖是一個 4 層的神經網路,包括三個隱藏層和一個輸出層,隱藏層的單元數分別是 5 5 3,輸出層只有一個單元。通常用 L 表示神經網路的層數,用 表示第 層的單元數,可以把輸入層當作第 0 層孫雹。那麼圖中 L = 4, , , , , 。可以用 表示第 層的激活值,即 ,用 和 表示在 公式中計算 值的權重,即 。輸入用 X 表示,X 也是第 0 層,所以 ,最後一層 ,也就是說 即為神經網路的預測值(輸出值)。

假設有一個樣本 x,那麼:

第一層計算: ,其中 x 也可以表示為 , w 和 b 是會影響第 1 層的激活單元的參數,接下來計算: ,後面幾層的計算也是如此。

第二層計算: ,

第三層計算: ,

第四層計算: ,

可以總結出,計算規律為:

前向傳播的向量化計算:

輸入 X 即 ,是將 m 個樣本橫向堆疊構成的矩陣,前向傳播需要一層一層來迭代計算,所以需要用 for 循環從第 1 層迭代計算到第 L 層,深層神經網路只是比淺層神經網路有更多層的迭代計算。

在上圖的神經網路中,除去輸入層一共有 5 層,其中 4 個隱藏層,一個輸出層。第 1 個隱藏層有 3 個隱藏單元,可以表示為 , 是第 1 個隱藏層的激活函數向量,是一個 3 x 1 的列向量,x 有兩個輸入特徵,所以 x 是 2 x 1 的列向量。在第一層的計算中: ,如果忽略偏置項 , 。 乘以一個 2 x 1 的列向量 x,需要等於一個 3 x 1 的列向量,那麼 必須是一個 3 x 2 的矩陣,即 的矩陣。 的結果是一個 3 x 1 的向量, 也搜殲是一個 3 x1 的向量,所以結果 也是一個 3 x 1 的向量。可以發現, 必須是 維的矩陣, 必須是 維的列向量,所以 的維數是 5 x 3,即 , 的維數是 5 x 1,即 x 1,所以在第二層的計算中: ,5 x 3 的矩陣 乘以 3 x 1 的列向量 等於一個 5 x 1 的列向量,再加上一個 5 x 1 的偏置項 ,結果 是一個 5 x 1 的列向量。以此類推, 的維數是 4 x 5, 的維數是 2 x 4, 的維數是 1 x 2。

前面證實了, 必須是 維的矩陣, 必須是 維的列向量。而且,在反向傳播中, 和 的維度相同, 和 的維度相同。又因為 ,所以 和 的維度也相同,都是 。

以上是神經網路中單個樣本的計算,其中 x 表示單個樣本,通常為了加速運算,需要將 m 個樣本進行向量化計算,可以用 X 表示 m 個樣本,第一個隱藏層的向量化計算公式即為: ,其中 還是 維, X 變為 維, 的結果是 的矩陣, 的維度還是 ,但當一個 的矩陣和 相加時,Python會通過廣播將 復製成為 的矩陣,然後兩個矩陣逐個元素相加。所以 的維度變為 ,即 3 x m。 表示每一個單獨的 橫向疊加構成的行向量,即 。

單個樣本時, 和 的維世凱沖度相同,都是 ,m 個樣本時, 和 的維度相同,都是 ,當 等於 0 時, 等於 ,其中 是 x 的輸入特徵數。反向傳播時,dZ、dA 和 Z、A 的維度相同。

從直覺上可以把深度神經網路的前幾層當做探測簡單的函數,也就是學習一些低層次的簡單特徵,之後把它們和後幾層結合在一起,也就是把簡單的特徵結合起來,那麼總體上就能學習更多復雜的函數,也就是去探測更復雜的東西。可以把深度學習神經網路和人類大腦做類比,人的大腦也是先探測簡單的東西,然後組合起來才能探測復雜的物體。

神經網路為何有效的理論來源於電路理論,它和能夠用電路元件計算哪些函數有著分不開的聯系,根據不同的基本邏輯門(與,或,非),在非正式情況下,這些函數都可以用相對較小(指隱藏單元數量)但很深的神經網路來計算 ,如果用淺層神經網路則需要指數增長的隱藏單元數量才能達到同樣的效果。

上圖是一個 4 層的神經網路,梯度下降的一個迭代過程即為前向傳播和反向傳播的計算過程,如下圖所示:

在前向傳播計算中,從第 1 層開始,第 層的輸入為上一層(第 層)的激活函數計算結果 和當前層的參數 ,輸出為當前層激活函數計算結果 ,還要緩存 和 以供反向傳播使用, 則輸入到下一層(第 層),計算過程如下:

向量化計算為:

當計算完所有層的前向傳播後,第 L 層的激活函數計算結果 即當前樣本的預測值。接下來將進行反向傳播計算,從第 L 層開始,第 層的輸入為當前層激活函數計算結果的導數值 和當前層的參數 ,輸出為上一層(第 層)激活函數計算結果的導數值 ,以及當前層參數的導數值 ,計算過程如下:

首先

由 可知 ,將 da 帶入可求得:

向量化計算為:
首先

在每一層中根據梯度下降公式,更新參數:

這就是神經網路中梯度下降一個迭代的計算過程。

神經網路中的參數包括: W 和 b。超參數包括:學習率 ,梯度下降迭代次數(iterations),隱層數(L),隱藏單元數(units),激活函數(activefunction),因為這些參數是在某種程度上決定了參數 W 和 b 的參數,所以叫做超參數。其他超參數包括:momentum,batch size,正則化參數等

可以通過嘗試不同的超參數,觀察代價函數曲線變化,從而選擇表現最好的超參數。

沒有。

https://mooc.study.163.com/smartSpec/detail/1001319001.htm

E. 神經網路超參數選擇

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

F. 神經網路中自適應的梯度下降優化演算法(二)

Adagrad演算法可以針對不同的參數自適應的採用不同的更新頻率,對低頻出現的特徵採用低的更新率,對高頻出現的特徵採用高的更新率,因此,對於稀疏的數據它表現的很好,很好的提升了SGD的魯棒性,在Google的通過Youtube視頻識別貓的神經網路訓練中有很好的表現。

梯度更新規則:

g(t,i)表示在t時刻目標函數對θ(i)的偏導數。SGD的每個參數的更新過程如下:

Adagrad的每個參數更新過程如下:

G(t)是一個對角矩陣,對角線上的每個元素是t時刻前所有θ(i)的梯度的平方和。ε通常取值在1e-8量級,它的存在是為了避免除數為0。一個有趣的現象是,如果沒有平方根操作,演算法的表現就非常糟糕。

Adagrad的主要缺點是,它的分母是平方梯度的累積,它的值會一直增加,最終導致學習率衰減到非常小,從而使得學習演算法無法進行下去。

TensorFlow實現:

tf.train.AdagradOptimizer(learning_rate, initial_accumulator_value=0.1, use_locking=False, name='Adagrad')

Adadelta演算法主要解決Adagrad的缺陷,它不再累加過去所有的梯度,而是僅累積過去固定個數的梯度。

Adadelta不是採用平方梯度的簡單累加,而是採用 歷史 平方梯度的衰減的平均。

γ通常等於0.9

分母相當於梯度的均方根(root mean squared, RMS),即將所有值平方求和,求其均值,再開平方,就得到均方根值。

梯度更新規則:

將學習率η設置為

,我們就不需要提前設定學習率。

RMSprop是Geoff Hinton提出的一種自適應學習率的方法,它與Adadelta方法都是為了解決Adagrad學習率急劇下降問題的。它與Adadelta方法是一致的。

梯度更新規則

超參數設定值:

Hinton建議設定γ=0.9, 學習率η=0.001。

TensorFlow實現:

tf.train.RMSPropOptimizer.__init__(learning_rate, decay, momentum=0.0, epsilon=1e-10, use_locking=False, name='RMSProp')

Adam也是對不同的參數自適應設置不同的學習率。它對 歷史 梯度和 歷史 平方梯度同時採用指數梯度衰減(exponentially decaying average)。

梯度更新規則

Adam作者觀察到,如果m(t)和v(t)初始化為零向量,並且衰減率很小時(比如β1和β2都非常接近於1時),在開始的迭代中,m(t)和v(t)總是向零偏移,所以需要做偏移校正。

然後用校正後的值進行梯度更新:

Adam作者建議β1=0.9,β2=0.999,ε=10^{-8}

,在實踐中,Adam比其它演算法的效果要好。

TensorFlow實現:

tf.train.AdamOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name='Adam')

Adam更新規則中的梯度縮放與 歷史 梯度的L2范數成反比。

我們可以把這個規則泛化到Lp范數。

當p值增大的時候,Lp的值往往會變得不穩定,所以在實踐中L1和L2使用的比較普遍。但是Adamax作者發現L∞可以收斂到一個穩定值。

然後我們可以採用u(t)代替

來更新Adam中的梯度。

同時u(t)不需要做零偏校正。默認取值建議:

G. 怎麼選取訓練神經網路時的Batch size

選取訓練神經網路時先選好batch size,再調其他的超參數。並且實踐上來說,就兩個原則——batch size別太小,也別太大,其他都行。

因為合適的batch size范圍和訓練數據規模、神經網路層數、單元數都沒有顯著的關系。合適的batch size范圍主要和收斂速度、隨機梯度噪音有關。

為什麼batch size別太小。別太小的限制在於,batch size太小,會來不及收斂。

所以batch size下限主要受收斂的影響。所以在常見的setting(~100 epochs),batch size一般不會低於16。如果你要選更小的batch size,你需要給自己找到很好的理由。

為什麼batch size別太大:

batch size別太大的限制在於兩個點。

1、batch size太大,memory容易不夠用。這個很顯然,就不多說了。

2、batch size太大,深度學習的優化training loss降不下去和泛化generalization gap都會出問題。

隨機梯度噪音的magnitude在深度學習的continuous-time dynamics里是正比於learning rate/batch size。batch size太大,噪音就太小了。

而大家已經知道,隨機梯度噪音對於逃離saddle points[2]和sharp minima [3]都必不可少的作用。前者可以解釋為什麼優化出問題,後者則可以解釋為什麼泛化出問題。



閱讀全文

與神經網路超參數是多少相關的資料

熱點內容
網路電視盒無信號 瀏覽:709
如何寫通知斷網維修網路設備 瀏覽:572
每個房間有網路要什麼路由器 瀏覽:194
網路類型4g可以用wifi嗎 瀏覽:644
網路推廣和程序員哪個前景好 瀏覽:645
網路設置域英文g 瀏覽:527
手機網路接入lms是什麼意思 瀏覽:535
wifi電視還需要網路機頂盒嗎 瀏覽:962
wifi顯示網路故障 瀏覽:649
寵物網路營銷策略手段 瀏覽:654
網路是怎樣連接pdf 瀏覽:725
rcv計算機網路 瀏覽:143
注重網路安全加強防護能力 瀏覽:111
他的手機網路 瀏覽:169
移動網路優化是優化問題嗎 瀏覽:424
手機無法網路登錄另一台電腦 瀏覽:524
網路用語流量不好是什麼意思 瀏覽:228
招生網路平台一登錄錯誤怎麼辦 瀏覽:847
怎麼給無線網路連接設置ip 瀏覽:255
網路語為什麼受歡迎 瀏覽:806

友情鏈接