Ⅰ 神經網路:欠擬合和過擬合
以我們前面講述的線性回歸為例,比如我們在訓練集上訓練出最優的模型,但是當我們將其使用到測試集時,測試的誤差很大,我們該怎麼辦?
我們一般採取的措施主要包括以下6種:
增加訓練樣本的數目(該方法適用於過擬合現象時,解決高方差。一般都是有效的,但是代價較大,如果下面的方法有效,可以優先採用下面的方式);
嘗試減少特徵的數量(該方法適用於過擬合現象時,解決高方差);
嘗試獲得更多的特徵(該方法適用於欠擬合現象時,解決高偏差);
嘗試增加多項式特徵(該方法適用於欠擬合現象時,解決高偏差);
嘗試減小正則化程度λ(該方法適用於欠擬合現象時,解決高偏差);
嘗試增加正則化程度λ(該方法適用於過擬合現象時,解決高方差);
上面的方法不是隨機選擇,是在合適的情況下(過擬合和欠擬合)選擇合適的方法,對於怎麼判斷一個模型是過擬合還是欠擬合,我們會在下面給出一些機器學習診斷法。
如何對一個假設進行評估?
我們前面在講述線性回歸和邏輯回歸時,只是注重針對訓練數據集訓練出一個最優的參數,但是我們訓練處的模型對於測試集的性能好壞我們沒有進行判斷,我們只是訓練的模型使得損失函數最小,我們前面也討論過,在訓練數據集上損失函數最小並不能代表對於給定的測試數據,測試數據的評估非常准確,比如過擬合現象發生時,那我們如何評價一個假設的好壞呢?
主要的方法包括兩種:
1.對於簡答的模型,我們可以採用將hθ(x)的圖像畫出,來判斷模型的好壞,但是這種方法對於特徵變數不是一個時,這種方法很難實現或者不可能實現。例如我們曾經看到過這樣的圖像,可以通過hθ(x)的圖像明顯可以看出,該假設存在著過擬合現象。
2.另一種評估假設的方法為:將原來的數據集分為訓練集和測試集,一般我們是從原來的數據集中隨機選取(保證訓練集和測試集中都含有各種類型的數據)70%的數據作為訓練集,剩下的30%的樣本作為測試集。同時這種將原來數據集劃分為訓練集和測試集的方法可以用於幫助特徵選擇、多項式次數的選擇以及正則化參數的選擇等。數據集劃分的過程如下:
以上面數據集為例,選取前7個為訓練集,後3個為測試集。用前7個數據集做訓練訓練出一個最優的模型,評價這個訓練出的模型的好壞可以使用測試集來進行判斷,判斷的標准可以使用測試集的損失函數來進行定量的衡量。
對於回歸問題,測試集的損失函數計算公式如下:
Jtest(θ)=12mtest∑i=1mtest(hθ(x(i)test)−y(i)test)2
而對於分類問題,測試集的損失函數計算公式如下:
這種測量方式,如果測試樣本損失函數很大,則代表訓練出的模型泛化能力不好。
對於分類問題,還有另外一種測量的方式,稱為誤分類率,它對於每一個測試樣本進行計算,計算的公式如下:
error=1mtest∑i=1mtesterr(hθ(x(i)test),y(i)))
其中,
模型的選擇和交叉驗證集:
上述我們是在模型選擇好了之後進行訓練的,也就是上述我們都是確定了假設進行訓練的,但是我們怎麼對模型進行選擇呢,這一節我們來討論一下模型的選擇,以及和交叉驗證集的關系。
模型選擇主要包括以下內容:1.怎樣選擇正確的特徵來構造學習演算法?2.怎樣選擇學習演算法中正則化參數λ?等問題。
首先我們結合一個例子來引出模型的選擇和驗證集:
例如我們有上面十個模型,我們對於給定的數據集選擇哪種模型呢?按照我們上面討論的將數據集劃分為訓練集和測試集,使用訓練集對上述模型進行訓練,然後使用測試集來進行選擇最佳的模型,比如最優的為第五個模型,但是這並不能衡量這個模型的泛化能力,因為測試集已經用於選擇最優的模型,這個模型對於其他未知數據的泛化能力還是未知的。
所以針對上述問題我們可以將數據集劃分為訓練集、交叉驗證集和測試集。一般情況下,訓練集占總樣本的60%,交叉驗證集佔20%,測試集佔20%。其中訓練集用於訓練,交叉驗證集用於選擇最優的模型,測試集用於測試模型的泛化能力。
模型選擇方法為:
1. 使用訓練集訓練10個模型;
2. 用10個模型分別對交叉驗證集計算出交叉驗證誤差(代價函數的值),其中計算公式為:
3. 選取交叉驗證誤差最小的模型作為選擇的模型;
4. 用測試集對選擇出的模型計算泛化能力(測試樣本的損失函數),計算公式如上文中討論的一樣。
假設對診斷偏差和方差(即過擬合還是欠擬合)的影響
利用上述方法學習到的演算法性能不好一般會有兩種情況:
1.會出現過擬合,也就是所謂的方差很大;
2.會出現欠擬合,也就是所謂的偏差很大;
首先應該確定演算法性能的不好,是由哪種原因造成的,然後針對不同的情況採取不同的改進策略,可以有效的改進當前的演算法。下面我們來講述一下怎麼判斷是過擬合還是欠擬合。
以下面例子為例,來進行討論:
我們可以通過繪制出訓練集的代價函數和交叉驗證驗證集的代價函數與方次d的關系來進行判斷是上述哪種情況的一種:
對於訓練集,當d較小時,模型的擬合程度不是很好,所以訓練樣本集的代價函數比較大;隨著d的增加,模型的擬合程度不斷提高,代價函數不斷的減小;
對於交叉驗證集,由於d比較小時,模型的擬合程度不是很好,對於新來的樣本預測結果會偏差很大,所以交叉驗證集的代價函數在初始階段會很大,而隨著d的增加會出現一個比較好的方次d,使得模型的擬合程度最佳,同時對於新來的樣本泛化能力很強,所以會有一個代價函數最小的點出現(該轉折點即是模型開始由欠擬合轉向過擬合的點),隨後隨著d的增加,由於過擬合,會存在對新的樣本預測結果不良的現象,所以代價函數會逐漸增大。
當我們繪制出上述曲線時,我們就可以判斷出什麼時候是過擬合什麼時候欠擬合,判斷的標准如下:
1. 當訓練誤差與交叉驗證集誤差接近時,並且都很大時,該模型高偏差(欠擬合);
2. 當訓練誤差遠小於驗證集誤差時,並且訓練誤差很小時,該模型高方差(過擬合)。
判斷出該模型是過擬合或者欠擬合之後,然後使用上述提到的過擬合和欠擬合的解決方法,對演算法進行改進。
正則化對偏差和方差的影響
我們前面講述過正則化可以有效的處理過擬合現象,但是我們上述所說的處理過擬合是在合適的λ情況下,那麼λ值的大小對模型的性能是怎樣影響的呢?我們採用上述與方次d對性能的影響相同的方式來分析λ的值對性能的影響。
我們首先選擇一系列的λ值,通常λ的選擇是0~10之間呈現二倍關系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,5.26,5.12,10)
構建方式如下:
選擇λ的方法如下:
1.使用訓練集訓練處12個不同程度正則化模型;
2.用12個模型分別對交叉驗證集計算出交叉驗證誤差;
3.選擇得出交叉驗證誤差最小的模型;
4.運用步驟3選出的模型對測試集計算得出推廣誤差
我們同樣可以將訓練集和交叉驗證集模型的代價函數與λ的值繪制在一張圖上。對於訓練集、驗證集和測試集的代價函數計算公式為:
需要注意的是,當計算訓練集、交叉驗證集和測試集誤差時,不計算正則項,然後繪制出訓練集和交叉驗證集代價函數與λ值的關系,如下圖所示:
1. 當λ較小時,訓練誤差較小(過擬合)而交叉驗證集誤差較大;
2. 隨著λ的增加(從過擬合到欠擬合的過程),訓練集誤差逐漸增大(欠擬合),而交叉驗證集誤差則是先減小後增大。
學習曲線
學習曲線也是一種可以判斷演算法是否處於過擬合還是欠擬合的情況,學習曲線是將訓練集誤差和交叉驗證集誤差作為訓練集實例數量(m)的函數繪制的圖像。學習曲先不僅可以幫助我們是不是處於過擬合或者欠擬合,它還可以幫助我們判斷是否為了提高演算法的性能需要我們收集多的數據。
假設我們有100行數據,我們從第一行數據開始,逐漸增加數據進行訓練,得到每次訓練數據的代價函數值。當數據很少時,訓練模型能夠非常完美的擬合很少的數據,但是訓練出的模型卻不能泛化其他的數據,所以當數據很少時,訓練集的代價函數很小,但是交叉驗證集的代價函數很大,隨著樣本的增加,訓練集的代價函數逐漸增大,交叉驗證集的代價函數逐漸減小。繪制的曲線如下圖所示:
1. 如何用學習曲線識別欠擬合:
假設我們的模型處於欠擬合的情況下,擬合曲線如下圖所示:
我們可以看出,無論我們怎樣增加樣本數據,誤差都不會有很大改觀。同時在欠擬合的情況下,會出現隨著樣本的增加,訓練集代價函數和交叉驗證集代價函數都很大的情況,在這種情況下,就沒有必要花費時間在收集數據上了,同時這也是一種判斷模型是過擬合還是欠擬合的方法。
2. 如何使用學習曲線識別過擬合:
假設我們有一個非常高次的多項式模型(比如最高次項達到100次),並且正則化非常小時,從下圖可以看出,當交叉驗證集誤差遠大於訓練集誤差時,往訓練集增加更多數據可以提高模型的效果。
對於過擬合現象時,會出現訓練集代價函數一直都很小(雖然是增加的趨勢),但是驗證集的損失函數會很大(雖然是減小的趨勢),同時訓練集代價函數和驗證集代價函數相差會很大,可以使用這種方法來判斷該模型處於過擬合階段。
對於神經網路我們在討論一下過擬合和欠擬合現象:
使用較小的神經網路,類似於參數較少的情況,容易導致高偏差和欠擬合,但是計算代價小;使用較大的神經網路,類似於參數較多的情況,容易導致高方差和過擬合,雖然計算代價比較大,但是可以通過正則化手段來調整而更加適應數據。
對於 神經網路的模型選擇 :我們一般選擇較大的神經網路並採用正則化處理,而不會選擇較小的神經網路。
對於 神經網路隱藏層的層數選擇 ,一般我們從一層開始逐漸增加層數,為了更好的選擇出最佳的層數,可以針對不同隱藏層層數的神經網路進行訓練,然後選擇交叉驗證集代價函數最小的神經網路。
Ⅱ 如何判斷卷積神經網路是否過擬合
原則上R Square 值越高(越接近1),擬合性越好,自變數對因變數的解釋越充分。但最重要的是看sig值,小於0.05,達到顯著水平才有意義。可以看回你spss的結果,對應regression 的sig值如果是小於0.05的,就可以了。
Ⅲ 神經網路過擬合的意思
過擬合現象一般都是因為學習的過於精確,就好比讓機器學習人臉,取了100個人的臉訓練,但是由於你學習的過精確,導致除了這個樣本100人外 其他的人臉神經網路都認為不是人臉,實際我們只需要學習人臉的基本特徵 而不是詳細到人的皮膚細膩 眼睛大小等過於細致的特徵,這樣可以保證機器還是能識別別的圖片中的人臉的
Ⅳ 深度學習為什麼不過擬合
深度學習:過擬合
為了得到一致假設而使假設變得過度復雜稱為過擬合。想像某種學習演算法產生了一個過擬合的分類器,這個分類器能夠百分之百的正確分類樣本數據(即再拿樣本中的文檔來給它,它絕對不會分錯),但也就為了能夠對樣本完全正確的分類,使得它的構造如此精細復雜,規則如此嚴格,以至於任何與樣本數據稍有不同的文檔它全都認為不屬於這個類別。
標準定義:給定一個假設空間H,一個假設h屬於H,如果存在其他的假設h』屬於H,使得在訓練樣例上h的錯誤率比h』小,但在整個實例分布上h』比h的錯誤率小,那麼就說假設h過度擬合訓練數據。 —-《Machine Learning》Tom M.Mitchell
假設我們用深度學習來判斷西瓜,過擬合會使得你判斷西瓜更加嚴厲,導致在某些西瓜數據上與你准備的數據有些出入(差別並不會太大),從而結果判定不是西瓜。。。
-----------------
深度學習防止過擬合的方法
過擬合即在訓練誤差很小,而泛化誤差很大,因為模型可能過於的復雜,使其」記住」了訓練樣本,然而其泛化誤差卻很高,在傳統的機器學習方法中有很大防止過擬合的方法,同樣這些方法很多也適合用於深度學習中,同時深度學習中又有一些獨特的防止過擬合的方法,下面對其進行簡單的梳理.
1. 參數范數懲罰
范數正則化是一種非常普遍的方法,也是最常用的方法,假如優化:
minObj(θ)=L(y,f(x))+αG(θ)
其中L為經驗風險,其為在訓練樣本上的誤差,而G為對參數的懲罰,也叫結構風險.α是平衡兩者,如果太大則對應的懲罰越大,如過太小,甚至接近與0,則沒有懲罰.
最常用的范數懲罰為L1,L2正則化,L1又被成為Lasso:
||w||1=|w1|+|w2|+...
即絕對值相加,其趨向於是一些參數為0.可以起到特徵選擇的作用.
L2正則化為:
||w||2=w12+w22+...−−−−−−−−−−−−√
其趨向與,使權重很小.其又成為ridge.
關於更多可以參考:機器學習中的范數規則化之(一)L0、L1與L2范數
2. 數據增強
讓模型泛化的能力更好的最好辦法就是使用更多的訓練數據進行訓練,但是在實踐中,我們擁有的數據是有限的,解決這一問題可以人為的創造一些假數據添加到訓練集中.
一個具體的例子:
在AlexNet中,將256*256圖像隨機的截取224*224大小,增加了許多的訓練樣本,同時可以對圖像進行左右翻轉,增加樣本的個數,實驗的結果可以可降低1%的誤差.
在神經網路中輸入雜訊也可以看做是數據增強的一種方式.
3. 提前終止
如下圖所示(圖片來源deep learning),當隨著模型的能力提升,訓練集的誤差會先減小再增大,這樣可以提前終止演算法減緩過擬合現象.關於演算法的具體流程參考deep learning.
提前終止是一種很常用的緩解過擬合的方法,如在決策樹的先剪枝的演算法,提前終止演算法,使得樹的深度降低,防止其過擬合.
4. 參數綁定與參數共享
在卷積神經網路CNN中(計算機視覺與卷積神經網路 ),卷積層就是其中權值共享的方式,一個卷積核通過在圖像上滑動從而實現共享參數,大幅度減少參數的個數,用卷積的形式是合理的,因為對於一副貓的圖片來說,右移一個像素同樣還是貓,其具有局部的特徵.這是一種很好的緩解過擬合現象的方法.
同樣在RNN中用到的參數共享,在其整條時間鏈上可以進行參數的共享,這樣才使得其能夠被訓練.
5. bagging 和其他集成方法
其實bagging的方法是可以起到正則化的作用,因為正則化就是要減少泛化誤差,而bagging的方法可以組合多個模型起到減少泛化誤差的作用.
在深度學習中同樣可以使用此方法,但是其會增加計算和存儲的成本.
6. Dropout
Dropout提供了一種廉價的Bagging集成近似,能夠訓練和評估指數級數量的神經網路。dropout可以隨機的讓一部分神經元失活,這樣彷彿是bagging的采樣過程,因此可以看做是bagging的廉價的實現.
但是它們訓練不太一樣,因為bagging,所有的模型都是獨立的,而dropout下所有模型的參數是共享的.
通常可以這樣理解dropout:假設我們要判別一隻貓,有一個神經元說看到有毛就是貓,但是如果我讓這個神經元失活,它還能判斷出來是貓的話,這樣就比較具有泛化的能力,減輕了過擬合的風險.
7. 輔助分類節點(auxiliary classifiers)
在Google Inception V1中,採用了輔助分類節點的策略,即將中間某一層的輸出用作分類,並按一個較小的權重加到最終的分類結果中,這樣相當於做了模型的融合,同時給網路增加了反向傳播的梯度信號,提供了額外的正則化的思想.
8. Batch Normalization
在Google Inception V2中所採用,是一種非常有用的正則化方法,可以讓大型的卷積網路訓練速度加快很多倍,同事收斂後分類的准確率也可以大幅度的提高.
BN在訓練某層時,會對每一個mini-batch數據進行標准化(normalization)處理,使輸出規范到N(0,1)的正太分布,減少了Internal convariate shift(內部神經元分布的改變),傳統的深度神經網路在訓練是,每一層的輸入的分布都在改變,因此訓練困難,只能選擇用一個很小的學習速率,但是每一層用了BN後,可以有效的解決這個問題,學習速率可以增大很多倍.
未完待續…
參考資料:
deep learning
tensorflow實戰
機器學習中的范數規則化之(一)L0、L1與L2范數
Ⅳ 神經網路,什麼過擬合,什麼是欠擬合
欠擬合是指模型不能在訓練集上獲得足夠低的誤差。而過擬合是指訓練誤差和測試誤差之間的差距太大。
考慮過多,超出自變數的一般含義維度,過多考慮雜訊,會造成過擬合。
可以認為預測准確率、召回率都比理論上最佳擬合函數低很多,則為欠擬合。
簡介
人工神經網路按其模型結構大體可以分為前饋型網路(也稱為多層感知機網路)和反饋型網路(也稱為Hopfield網路)兩大類,前者在數學上可以看作是一類大規模的非線性映射系統,後者則是一類大規模的非線性動力學系統。
按照學習方式,人工神經網路又可分為有監督學習、非監督和半監督學習三類;按工作方式則可分為確定性和隨機性兩類;按時間特性還可分為連續型或離散型兩類,等等。
Ⅵ 深度學習之卷積神經網路經典模型
LeNet-5模型 在CNN的應用中,文字識別系統所用的LeNet-5模型是非常經典的模型。LeNet-5模型是1998年,Yann LeCun教授提出的,它是第一個成功大規模應用在手寫數字識別問題的卷積神經網路,在MNIST數據集中的正確率可以高達99.2%。
下面詳細介紹一下LeNet-5模型工作的原理。
LeNet-5模型一共有7層,每層包含眾多參數,也就是卷積神經網路中的參數。雖然層數只有7層,這在如今龐大的神經網路中可是說是非常少的了,但是包含了卷積層,池化層,全連接層,可謂麻雀雖小五臟俱全了。為了方便,我們把卷積層稱為C層,下采樣層叫做下采樣層。
首先,輸入層輸入原始圖像,原始圖像被處理成32×32個像素點的值。然後,後面的隱層計在卷積和子抽樣之間交替進行。C1層是卷積層,包含了六個特徵圖。每個映射也就是28x28個神經元。卷積核可以是5x5的十字形,這28×28個神經元共享卷積核權值參數,通過卷積運算,原始信號特徵增強,同時也降低了雜訊,當卷積核不同時,提取到圖像中的特徵不同;C2層是一個池化層,池化層的功能在上文已經介紹過了,它將局部像素值平均化來實現子抽樣。
池化層包含了六個特徵映射,每個映射的像素值為14x14,這樣的池化層非常重要,可以在一定程度上保證網路的特徵被提取,同時運算量也大大降低,減少了網路結構過擬合的風險。因為卷積層與池化層是交替出現的,所以隱藏層的第三層又是一個卷積層,第二個卷積層由16個特徵映射構成,每個特徵映射用於加權和計算的卷積核為10x10的。第四個隱藏層,也就是第二個池化層同樣包含16個特徵映射,每個特徵映射中所用的卷積核是5x5的。第五個隱藏層是用5x5的卷積核進行運算,包含了120個神經元,也是這個網路中卷積運算的最後一層。
之後的第六層便是全連接層,包含了84個特徵圖。全連接層中對輸入進行點積之後加入偏置,然後經過一個激活函數傳輸給輸出層的神經元。最後一層,也就是第七層,為了得到輸出向量,設置了十個神經元來進行分類,相當於輸出一個包含十個元素的一維數組,向量中的十個元素即0到9。
AlexNet模型
AlexNet簡介
2012年Imagenet圖像識別大賽中,Alext提出的alexnet網路模型一鳴驚人,引爆了神經網路的應用熱潮,並且贏得了2012屆圖像識別大賽的冠軍,這也使得卷積神經網路真正意義上成為圖像處理上的核心演算法。上文介紹的LeNet-5出現在上個世紀,雖然是經典,但是迫於種種復雜的現實場景限制,只能在一些領域應用。不過,隨著SVM等手工設計的特徵的飛速發展,LeNet-5並沒有形成很大的應用狀況。隨著ReLU與dropout的提出,以及GPU帶來算力突破和互聯網時代大數據的爆發,卷積神經網路帶來歷史的突破,AlexNet的提出讓深度學習走上人工智慧的最前端。
圖像預處理
AlexNet的訓練數據採用ImageNet的子集中的ILSVRC2010數據集,包含了1000類,共1.2百萬的訓練圖像,50000張驗證集,150000張測試集。在進行網路訓練之前我們要對數據集圖片進行預處理。首先我們要將不同解析度的圖片全部變成256x256規格的圖像,變換方法是將圖片的短邊縮放到 256像素值,然後截取長邊的中間位置的256個像素值,得到256x256大小的圖像。除了對圖片大小進行預處理,還需要對圖片減均值,一般圖像均是由RGB三原色構成,均值按RGB三分量分別求得,由此可以更加突出圖片的特徵,更方便後面的計算。
此外,對了保證訓練的效果,我們仍需對訓練數據進行更為嚴苛的處理。在256x256大小的圖像中,截取227x227大小的圖像,在此之後對圖片取鏡像,這樣就使得原始數據增加了(256-224)x(256-224)x2= 2048倍。最後對RGB空間做PCA,然後對主成分做(0,0.1)的高斯擾動,結果使錯誤率下降1%。對測試數據而言,抽取以圖像4個角落的大小為224224的圖像,中心的224224大小的圖像以及它們的鏡像翻轉圖像,這樣便可以獲得10張圖像,我們便可以利用softmax進行預測,對所有預測取平均作為最終的分類結果。
ReLU激活函數
之前我們提到常用的非線性的激活函數是sigmoid,它能夠把輸入的連續實值全部確定在0和1之間。但是這帶來一個問題,當一個負數的絕對值很大時,那麼輸出就是0;如果是絕對值非常大的正數,輸出就是1。這就會出現飽和的現象,飽和現象中神經元的梯度會變得特別小,這樣必然會使得網路的學習更加困難。此外,sigmoid的output的值並不是0為均值,因為這會導致上一層輸出的非0均值信號會直接輸入到後一層的神經元上。所以AlexNet模型提出了ReLU函數,公式:f(x)=max(0,x)f(x)=max(0,x)。
用ReLU代替了Sigmoid,發現使用 ReLU 得到的SGD的收斂速度會比 sigmoid快很多,這成了AlexNet模型的優勢之一。
Dropout
AlexNet模型提出了一個有效的模型組合方式,相比於單模型,只需要多花費一倍的時間,這種方式就做Dropout。在整個神經網路中,隨機選取一半的神經元將它們的輸出變成0。這種方式使得網路關閉了部分神經元,減少了過擬合現象。同時訓練的迭代次數也得以增加。當時一個GTX580 GPU只有3GB內存,這使得大規模的運算成為不可能。但是,隨著硬體水平的發展,當時的GPU已經可以實現並行計算了,並行計算之後兩塊GPU可以互相通信傳輸數據,這樣的方式充分利用了GPU資源,所以模型設計利用兩個GPU並行運算,大大提高了運算效率。
模型分析
AlexNet模型共有8層結構,其中前5層為卷積層,其中前兩個卷積層和第五個卷積層有池化層,其他卷積層沒有。後面3層為全連接層,神經元約有六十五萬個,所需要訓練的參數約六千萬個。
圖片預處理過後,進過第一個卷積層C1之後,原始的圖像也就變成了55x55的像素大小,此時一共有96個通道。模型分為上下兩塊是為了方便GPU運算,48作為通道數目更加適合GPU的並行運算。上圖的模型里把48層直接變成了一個面,這使得模型看上去更像一個立方體,大小為55x55x48。在後面的第二個卷積層C2中,卷積核的尺寸為5x5x48,由此再次進行卷積運算。在C1,C2卷積層的卷積運算之後,都會有一個池化層,使得提取特徵之後的特徵圖像素值大大減小,方便了運算,也使得特徵更加明顯。而第三層的卷積層C3又是更加特殊了。第三層卷積層做了通道的合並,將之前兩個通道的數據再次合並起來,這是一種串接操作。第三層後,由於串接,通道數變成256。全卷積的卷積核尺寸也就變成了13×13×25613×13×256。一個有4096個這樣尺寸的卷積核分別對輸入圖像做4096次的全卷積操作,最後的結果就是一個列向量,一共有4096個數。這也就是最後的輸出,但是AlexNet最終是要分1000個類,所以通過第八層,也就是全連接的第三層,由此得到1000個類輸出。
Alexnet網路中各個層發揮了不同的作用,ReLU,多個CPU是為了提高訓練速度,重疊pool池化是為了提高精度,且不容易產生過擬合,局部歸一化響應是為了提高精度,而數據增益與dropout是為了減少過擬合。
VGG net
在ILSVRC-2014中,牛津大學的視覺幾何組提出的VGGNet模型在定位任務第一名和分類任務第一名[[i]]。如今在計算機視覺領域,卷積神經網路的良好效果深得廣大開發者的喜歡,並且上文提到的AlexNet模型擁有更好的效果,所以廣大從業者學習者試圖將其改進以獲得更好地效果。而後來很多人經過驗證認為,AlexNet模型中所謂的局部歸一化響應浪費了計算資源,但是對性能卻沒有很大的提升。VGG的實質是AlexNet結構的增強版,它側重強調卷積神經網路設計中的深度。將卷積層的深度提升到了19層,並且在當年的ImageNet大賽中的定位問題中獲得了第一名的好成績。整個網路向人們證明了我們是可以用很小的卷積核取得很好地效果,前提是我們要把網路的層數加深,這也論證了我們要想提高整個神經網路的模型效果,一個較為有效的方法便是將它的深度加深,雖然計算量會大大提高,但是整個復雜度也上升了,更能解決復雜的問題。雖然VGG網路已經誕生好幾年了,但是很多其他網路上效果並不是很好地情況下,VGG有時候還能夠發揮它的優勢,讓人有意想不到的收獲。
與AlexNet網路非常類似,VGG共有五個卷積層,並且每個卷積層之後都有一個池化層。當時在ImageNet大賽中,作者分別嘗試了六種網路結構。這六種結構大致相同,只是層數不同,少則11層,多達19層。網路結構的輸入是大小為224*224的RGB圖像,最終將分類結果輸出。當然,在輸入網路時,圖片要進行預處理。
VGG網路相比AlexNet網路,在網路的深度以及寬度上做了一定的拓展,具體的卷積運算還是與AlexNet網路類似。我們主要說明一下VGG網路所做的改進。第一點,由於很多研究者發現歸一化層的效果並不是很好,而且佔用了大量的計算資源,所以在VGG網路中作者取消了歸一化層;第二點,VGG網路用了更小的3x3的卷積核,而兩個連續的3x3的卷積核相當於5x5的感受野,由此類推,三個3x3的連續的卷積核也就相當於7x7的感受野。這樣的變化使得參數量更小,節省了計算資源,將資源留給後面的更深層次的網路。第三點是VGG網路中的池化層特徵池化核改為了2x2,而在AlexNet網路中池化核為3x3。這三點改進無疑是使得整個參數運算量下降,這樣我們在有限的計算平台上能夠獲得更多的資源留給更深層的網路。由於層數較多,卷積核比較小,這樣使得整個網路的特徵提取效果很好。其實由於VGG的層數較多,所以計算量還是相當大的,卷積層比較多成了它最顯著的特點。另外,VGG網路的拓展性能比較突出,結構比較簡潔,所以它的遷移性能比較好,遷移到其他數據集的時候泛化性能好。到現在為止,VGG網路還經常被用來提出特徵。所以當現在很多較新的模型效果不好時,使用VGG可能會解決這些問題。
GoogleNet
谷歌於2014年Imagenet挑戰賽(ILSVRC14)憑借GoogleNet再次斬獲第一名。這個通過增加了神經網路的深度和寬度獲得了更好地效果,在此過程中保證了計算資源的不變。這個網路論證了加大深度,寬度以及訓練數據的增加是現有深度學習獲得更好效果的主要方式。但是增加尺寸可能會帶來過擬合的問題,因為深度與寬度的加深必然會帶來過量的參數。此外,增加網路尺寸也帶來了對計算資源侵佔過多的缺點。為了保證計算資源充分利用的前提下去提高整個模型的性能,作者使用了Inception模型,這個模型在下圖中有展示,可以看出這個有點像金字塔的模型在寬度上使用並聯的不同大小的卷積核,增加了卷積核的輸出寬度。因為使用了較大尺度的卷積核增加了參數。使用了1*1的卷積核就是為了使得參數的數量最少。
Inception模塊
上圖表格為網路分析圖,第一行為卷積層,輸入為224×224×3 ,卷積核為7x7,步長為2,padding為3,輸出的維度為112×112×64,這裡面的7x7卷積使用了 7×1 然後 1×7 的方式,這樣便有(7+7)×64×3=2,688個參數。第二行為池化層,卷積核為3×33×3,滑動步長為2,padding為 1 ,輸出維度:56×56×64,計算方式:1/2×(112+2×1?3+1)=56。第三行,第四行與第一行,第二行類似。第 5 行 Inception mole中分為4條支線,輸入均為上層產生的 28×28×192 結果:第 1 部分,1×1 卷積層,輸出大小為28×28×64;第 2 部分,先1×1卷積層,輸出大小為28×28×96,作為輸入進行3×3卷積層,輸出大小為28×28×128;第 3部分,先1×1卷積層,輸出大小為28×28×32,作為輸入進行3×3卷積層,輸出大小為28×28×32;而第3 部分3×3的池化層,輸出大小為輸出大小為28×28×32。第5行的Inception mole會對上面是個結果的輸出結果並聯,由此增加網路寬度。
ResNet
2015年ImageNet大賽中,MSRA何凱明團隊的ResialNetworks力壓群雄,在ImageNet的諸多領域的比賽中上均獲得了第一名的好成績,而且這篇關於ResNet的論文Deep Resial Learning for Image Recognition也獲得了CVPR2016的最佳論文,實至而名歸。
上文介紹了的VGG以及GoogleNet都是增加了卷積神經網路的深度來獲得更好效果,也讓人們明白了網路的深度與廣度決定了訓練的效果。但是,與此同時,寬度與深度加深的同時,效果實際會慢慢變差。也就是說模型的層次加深,錯誤率提高了。模型的深度加深,以一定的錯誤率來換取學習能力的增強。但是深層的神經網路模型犧牲了大量的計算資源,學習能力提高的同時不應當產生比淺層神經網路更高的錯誤率。這個現象的產生主要是因為隨著神經網路的層數增加,梯度消失的現象就越來越明顯。所以為了解決這個問題,作者提出了一個深度殘差網路的結構Resial:
上圖就是殘差網路的基本結構,可以看出其實是增加了一個恆等映射,將原本的變換函數H(x)轉換成了F(x)+x。示意圖中可以很明顯看出來整個網路的變化,這樣網路不再是簡單的堆疊結構,這樣的話便很好地解決了由於網路層數增加而帶來的梯度原來越不明顯的問題。所以這時候網路可以做得很深,到目前為止,網路的層數都可以上千層,而能夠保證很好地效果。並且,這樣的簡單疊加並沒有給網路增加額外的參數跟計算量,同時也提高了網路訓練的效果與效率。
在比賽中,為了證明自己觀點是正確的,作者控制變數地設計幾個實驗。首先作者構建了兩個plain網路,這兩個網路分別為18層跟34層,隨後作者又設計了兩個殘差網路,層數也是分別為18層和34層。然後對這四個模型進行控制變數的實驗觀察數據量的變化。下圖便是實驗結果。實驗中,在plain網路上觀測到明顯的退化現象。實驗結果也表明,在殘差網路上,34層的效果明顯要好於18層的效果,足以證明殘差網路隨著層數增加性能也是增加的。不僅如此,殘差網路的在更深層的結構上收斂性能也有明顯的提升,整個實驗大為成功。
除此之外,作者還做了關於shortcut方式的實驗,如果殘差網路模塊的輸入輸出維度不一致,我們如果要使維度統一,必須要對維數較少的進行増維。而增維的最好效果是用0來填充。不過實驗數據顯示三者差距很小,所以線性投影並不是特別需要。使用0來填充維度同時也保證了模型的復雜度控制在比較低的情況下。
隨著實驗的深入,作者又提出了更深的殘差模塊。這種模型減少了各個層的參數量,將資源留給更深層數的模型,在保證復雜度很低的情況下,模型也沒有出現梯度消失很明顯的情況,因此目前模型最高可達1202層,錯誤率仍然控製得很低。但是層數如此之多也帶來了過擬合的現象,不過諸多研究者仍在改進之中,畢竟此時的ResNet已經相對於其他模型在性能上遙遙領先了。
殘差網路的精髓便是shortcut。從一個角度來看,也可以解讀為多種路徑組合的一個網路。如下圖:
ResNet可以做到很深,但是從上圖中可以體會到,當網路很深,也就是層數很多時,數據傳輸的路徑其實相對比較固定。我們似乎也可以將其理解為一個多人投票系統,大多數梯度都分布在論文中所謂的effective path上。
DenseNet
在Resnet模型之後,有人試圖對ResNet模型進行改進,由此便誕生了ResNeXt模型。
這是對上面介紹的ResNet模型結合了GoogleNet中的inception模塊思想,相比於Resnet來說更加有效。隨後,誕生了DenseNet模型,它直接將所有的模塊連接起來,整個模型更加簡單粗暴。稠密相連成了它的主要特點。
我們將DenseNet與ResNet相比較:
從上圖中可以看出,相比於ResNet,DenseNet參數量明顯減少很多,效果也更加優越,只是DenseNet需要消耗更多的內存。
總結
上面介紹了卷積神經網路發展史上比較著名的一些模型,這些模型非常經典,也各有優勢。在算力不斷增強的現在,各種新的網路訓練的效率以及效果也在逐漸提高。從收斂速度上看,VGG>Inception>DenseNet>ResNet,從泛化能力來看,Inception>DenseNet=ResNet>VGG,從運算量看來,Inception<DenseNet< ResNet<VGG,從內存開銷來看,Inception<ResNet< DenseNet<VGG。在本次研究中,我們對各個模型均進行了分析,但從效果來看,ResNet效果是最好的,優於Inception,優於VGG,所以我們第四章實驗中主要採用谷歌的Inception模型,也就是GoogleNet。
Ⅶ 什麼是「過擬合」,如何判斷,常見的原因是什麼
從標準定義來說,過擬合是指,給定一個假設空間H,一個假設h屬於H,如果存在其他的假設h』屬於H,使得在訓練樣例上h的錯誤率比h』小,但在整個實例分布上h』比h的錯誤率小,那麼就說假設h過度擬合訓練數據。判斷方法是,模型在驗證集合上和訓練集合上表現都很好,而在測試集合上變現很差。
常見原因主要是學習過度和樣本特徵不均衡,如果細分,還可以包括(並未能列舉全部原因)。
1、建模樣本選取有誤,樣本標簽錯誤等,導致選取的樣本數據不足以代表預定的分類規則。
2、樣本噪音干擾過大,使得機器將學習了噪音,還認為是特徵,從而擾亂了預設的分類規則。
3、假設的模型無法合理存在,或者說是假設成立的條件實際並不成立。
4、參數太多,模型復雜度過高。
5、對於tree-based模型,如果我們對於其深度與split沒有合理的限制,有可能使節點只包含單純的事件數據(event)或非事件數據(no event),使其雖然可以完美匹配(擬合)訓練數據,但是無法適應其他數據集。
6、對於神經網路模型,權值學習迭代次數太多(Overtraining),BP演算法使權值可能收斂過於復雜的決策面。
解決方法,模型上,神經網路加dropout,batch normalization,基於樹的模型限制深度,加入正則化項等,設置提前終止條件。數據上,增加數據集,對數據集進行增強處理(augmentation)。