大家好,今天我要講的內容是在深度學習的卷積神經網絡中,如何減弱過擬合問題的相關研究,最近剛好在修改論文,就把相關的方法和技術整理出來,對于怎樣選擇和設計網絡模型具有一定的指導性,希望對大家有幫助。
內容主要分為三個模塊,首先對過擬合問題的產生原因、以及解決方向進行簡單的介紹,然后會就不同的解決方案,講解一些解決方法;最后是簡單說一下自己的一些研究工作(最后一部分略)。
在講過擬合問題前,先簡單介紹一下偏差和方差權衡的問題,假設存在一組觀測數據 x, y,如果存在一組理想的映射,使得每個觀測值經過該映射后,能夠與它對應的預測值一一對應,這就是識別、分類以及回歸問題的本質,這里我們先不管怎么去優化這個理想的映射中的未知參數,我們也意識到對于觀測數據,本身其實也是有噪聲的,我們假設觀測數據滿足這樣一個分布模式,也就是觀測值經過理想的映射后還含有一個隨機的高斯噪聲項epsilon,這樣就構成了采樣數據的分布模式,經過學習后,我們得到了一個模型,滿足學習模型的預測值與采樣數據的預測值的差的平方的期望值最小化,一般滿足這樣的條件,得到的模型就是我們想要的了。把這個約束項展開,我們最后就能得到這個結果,也就是采樣數據的噪聲的方差,學習模型的方差,學習模型與采樣模型之間的偏差期望的平方之和。
為什么說很多時候學習算法就是學習模型在偏差和方差上的權衡呢,原因很簡單,我們看下面的公式,統計方差項是針對學習模型的,如果我們想要這一項較小,那么我們的學習模型應該是線性的或者說接近線性的,但是對于非線性問題,這一項滿足最小化原則的話,那很容易就造成高偏差問題,也就是欠擬合問題,比如使用線性函數擬合非線性函數,可以保證線性函數的預測值符合方差最小分布,但是預測值與真實值之間卻有較大偏差;而偏差項可以看到,是預測值與采樣值之間的差異的期望的平方,如果這一項滿足最小化原則,那么就要求預測模型的分布模式盡可能符合采樣數據的分布模式,同樣如果是針對非線性問題,這樣很容易導致高方差,也就是過擬合問題。因為,偏差和方差會存在此消彼長的現象,我們的目的就是解決這一一個tradeoff問題。
這里給出一個簡單的例子,深藍色的圓點,就是采樣數據,綠色曲線是這組數據樣本的真實分布函數,我們分布用1次,4次,15次多項式曲線擬合,對于1次線性函數,這樣的擬合結果,符合預測值方差最小,但效果顯然并不好,因為很多預測值與采樣數據之間的偏差過大;而15次多項式曲線擬合的結果,雖然達到了預測值與所有的采樣數據之間偏差最小,但是如果再引入新的采樣數據,那么效果就會明顯變差;4次多項式擬合結果,雖然方差大于1次,偏差大于15次,但是很明顯卻是擬合最好的。
一般來講,欠擬合的結果表現為,在訓練數據和新的測試數據上都表現不佳,通常使用過于簡單的模型或者方法擬合非線性問題,就會產生這種問題,學習到的模型,具有高偏差低方差的性質;而過擬合的結果表現為在訓練數據上表現良好,但是在新的數據上泛化能力一般,通常使用過于復雜的模型或者方法擬合非線性問題,就有可能遭遇這種問題,學習到的模型,具有低偏差高方差的性質。深度學習中的卷積神經網絡,引入了以往機器學習前所未有的參數規模,雖然能夠適用和解決很多非線性問題,但是過擬合問題也經常出現,這也就是為什么一直以來大家對這個問題比較關注的主要原因。
造成模型過擬合的主要原因,簡單來講有三個方面,首先是數據不足,如果采樣數據不足,很有可能不能反映出數據的真實分布,這也就限制了學習模型的預測能力;其次是使用的模型和學習算法,尤其是學習算法參數規模較大,比如CNN,參數規模可以達到幾十兆甚至上百兆,理論上能夠擬合大多數非線性問題,但是也非常容易造成過擬合問題;最后是正則化方法,所謂正則化,就是一種限制學習算法的復雜度的方法,比如這張圖里的藍色曲線,在采樣數據上的偏差都為0,但是經過正則化限制后,復雜度衰減成為綠色的曲線,對于未知的數據分布具有更好的泛化能力。
這里,根據卷積神經網絡的操作過程,分為5個方面講述,一些減弱過擬合的方法。首先是數據量不足時,對數據進行重采樣或者數據擴充;然后是網絡模型以及一些特殊結構本身能降低過擬合;激活函數是使卷積神經網絡具有非線性能力的基礎,不同的激活函數不單在訓練過程中表現出不同的收斂狀態,在某種程度上,也對過擬合有所影響;卷積神經網絡使用大量的隱含參數,在訓練優化過程中,通過梯度傳導調整隱含參數,調整過程往往表現為不可知、不可控,這就很容易導致隱含參數之間具有較強的相關性,這對于學習、強化多種有效特征是不利的,很容易對訓練數據過好地表達,但是泛化能力一般;最后,就是使用一些正則化的方法,降低模型的復雜度,提高泛化能力。
數據擴充,以前講深度學習的例會中也提到過,比如AlexNet論文里,為了避免由于數據樣本不足的問題造成過擬合,進行數據拓充(Data Augmentation),使用了兩種方法:第一種是隨機Crop,訓練的時候,將輸入的256x256的圖像,隨機裁剪成為224x224+水平翻轉拓展了2048倍;第二種是對RGB空間做PCA,即主成分分析,然后對主成分做一個輕微的高斯擾動;其實都是數據重采樣過程,但是這種方法產生的效果很有限,在AlexNet的識別分類應用中,僅僅把測試階段的錯誤率降低了1個百分點。
數據重采樣中,有一個很有價值的研究點,那就是當我們的數據存在不均衡的類分布時,也就是屬于某一類別的觀測樣本的數量顯著少于其它類別,這種現象很多情形下都存在,尤其是在異常檢測是至關重要的的場景中很明顯。根據長尾理論,在機器學習中,學習算法學習到的特征將會被那些具有大量采樣數據的樣本類別所主導,以至于對于那些只有少量采樣數據的類別不利。也就是說,采樣數據少的類別的特征很有可能淹沒在其他大量采樣數據類別的特征中,因為特征沒有得到足夠的學習或者強化,在這些學習算法在這些類別上的預測能力會大打折扣。前面講偏差方差權衡的時候,提到我們的學習算法其實就是在優化二者之和,不難理解,對于一個學習算法來說,如果對于大多數采樣數據都滿足了損失代價最小,按照優化的原則,就有理由認為已經達到了理想的狀態,但是這樣的理想狀態顯然不是我們想要的,我們真正追求的并不是整體的大多數準確,而是每個類別的大多數準確,這兩者還是有區別的。
這里給出幾個語義分割的數據集,每個數據集都存在這樣的不均衡的類分布問題。數量占優的類別與不占優的類別之間的差異往往可能很大,比如我之前做的裂縫檢測,采樣數據中絕大多數的像素都是非裂縫像素,如果一個分類器把全部的像素都分為非裂縫,那整體上的精度仍然是超過90%,顯然這樣的分類器對我們沒什么用。
這是SegNet中使用的一份街景分割的數據集,同樣也存在這樣的問題。
目前來講,這種情形下主要有兩種解決方案,首先很容易想到,調整損失函數,把數量多的類別的單個訓練樣本的損失代價降低,相反地把類別數量少的單個訓練樣本的損失代價提高;另一個經常用到的方法就是對數據集進行重采樣。
這里列出兩個class reweighting的代表,其實本質上是一樣的,都是根據采樣數據的統計結果,重新賦予每個類別相應的類別損失權值。HED 網絡是進行contour detection,所以每個訓練的batch中的非contour像素數與全部像素數的比值作為contour類別的損失代價,類似得把contour像素與全部像素的比值作為非contour類別的損失代價。MSCNN是針對多類別的語義分割的網絡,他同樣先統計每個類別的像素數,與其分布的圖像上的像素總和的比值,作為每個類別的頻率,再對統計的頻率進行排序,得到中值頻率,然后使用中值頻率逐一處以每個類別的頻率,就得到每個類別對應的損失權重。
再來看另一個方向,數據重采樣,關于這方面的研究內容相對比較多,這里列出一部分
先來看兩種比較粗暴的方法,隨機降采樣和過采樣,對于前者,不重復地從類別1中抽取10%,這樣減少了類別1 的實例數,從而間接地提高了類別2在數據中的比例。優點:它可以提升運行時間;并且當訓練數據集很大時,可以通過減少樣本數量來解決存儲問題;缺點:它會丟棄對構建分類器很重要的有價值的潛在信息,被隨機欠采樣選取的樣本可能具有偏差,它不能準確代表大多數。從而在實際的測試數據集上得到不精確的結果。隨機過采樣,把類別2的數據復制20次,這樣就增加了少數派的比例,相比于欠采樣,這種方法不會帶來信息損失,表現應該是比欠采樣好一些的,但是由于復制少數類事件,它加大了過擬合的可能性。
然后是基于聚類的過采樣,比如采用K均值聚類算法獨立地被用于兩個類的實例,隨后,每一個聚類都被過采樣以至于相同類的所有聚類有著同樣的實例數量,這樣做有助于克服由不同子聚類組成的類之間的不平衡,但是還是有可能會造成過擬合訓練。
然后是合成少數類過采樣技術,這種方法,是把少數類中的部分數據抽取出來,進行合成新數據的操作,合成的方法是多樣的,可以像AlexNet那樣crop + 顏色擾動,然后再把新生產的數據添加到原有數據中,這樣做的好處是,不會損失有價值的信息,而且通過隨機采樣生成的合成樣本而非實例的副本,可以緩解過擬合的問題;當然缺點也是有的,受限于合成技術,一般不會把來自其他類的相鄰實例考慮進來,這樣就有可能導致類間的重疊增加,也有可能引入額外的噪聲;另外,這種方式對于高維數據不是很有效,像AlexNet,對數據擴充了幾千倍,但是最終的精度也僅僅是微微提升了一個百分點。
從原始數據集中,隨機可重復采樣,生成n個數據集,然后分別使用n個分類器去擬合每個數據集,再把每個分類器的結果組合在一起,得到最終的擬合結果。這種方式是一種機器學習中的經典方法之一,可以提高及其學習算法的穩定性和準確性,不過這種策略的有效前提條件是基本分類器效果還不錯,不然很有可能會使效果更差。后來CNN里很出名的,Dropout方法的思路其實就是bagging的思路。
還有一些機器學習的重采樣方法,但是在CNN中很少用到,這里就不再提。總體上來講,常見的數據擴充這種重采樣方式,往往都是針對整個數據集,并不會針對性的對那些少數類進行特殊處理,所以單純的數據擴充并不能起到強化少數類特征學習的效果,在這種前提下,權衡類別損失代價就顯得更為有效,但是這樣過擬合的問題其實還是存在。對于需要標注的監督學習,這其實是件很麻煩的事情,目前的做法能夠緩解過擬合的程度還是有限,想要真正避免,還是要從數據本身入手。成本和精度也是個tradeoff的問題,最終還是取決于應用需求。
再來看CNN的網絡結構,這方面的研究相對而言比較多,我們經常見到最新的方法將基礎網絡換一下,性能就會得到很大的提升,這也就意味著,好的網絡結構本身就有能夠減弱過擬合的能力。因此,研究并設計一個更好的網絡模型變得至關重要。經典的神經網絡模型主要在“寬度”與“深度”方面進行不同程度的擴增。借助于大規模數據的訓練,AlexNet、VGG經典網絡通過深度增加可以有效地提升其模型的表達能力。但是很快就遇到了瓶頸,也就是當我們這樣一味地追求深度時候,有個難以回避的問題,梯度消失,一些弱的但是有效的特征會在經歷了深層卷積和多層池化后消失,反而導致性能下降,而且受限于顯卡顯存,我們也不可能無限制增加網絡深度。之后網絡框架的探索主要集中在如何合理地增加網絡寬度,提升網絡性能。比如GoogLeNet和inception網絡,把同一層的單一卷積擴展成多種卷積操作并聯的結構,以及殘差網絡的shortcut結構,這兩種結構成為了后來很多網絡探索的基礎,比如ResNeXt, inception-v4.
這里的幾個同樣也都是以殘差網絡和Inception的框架為基礎
這里簡單介紹幾個比較有影響力的網絡結構
Inception 模塊,不同于Lenet,Alexnet,VGG那些串行的單路網絡,inception的結構通過類似于并聯的方式,在同一層的卷積過程中,引入不同感受野大小的卷積操作,從而在訓練過程中,挖掘更多潛在網絡隱含單元,Inception v1-v4四篇論文,都是谷歌的同一個大神研究員發表。
在GoogLeNet中,關于inception的進一步探索比較少,但是隨后的Inception v3的探索中,提出一些設計理論,首先,特征圖的降采樣,應該遵循漸進式地,而不要很突兀地一下把特征圖縮小很多,這樣容易造成特征的過度壓縮,特征維度增加的過程也要避免表征瓶頸的問題,作者也意識到適當地增加卷積網絡的深度和寬度,可以提升網絡性能,但是會導致計算量的增加,因此這個過程中要考慮怎么減少不必要的計算;然后是關于卷積核的一些思路,接著關于不同卷積階段的監督在網絡里起著什么作用以及是否有必要,還有關于更好的降采樣方式等。因為其中的一些探索還是很有價值的,我們細看一下。
第一代版本中,同一層的卷積操作,分別使用了1x1,3x3,5x5大小的卷積核,后續的論文里作者分析認為,5x5大小的卷積核首先在計算消耗上是3x3卷積核的差不多3倍左右,這么做不劃算
從效果上來看,一個5x5大小的卷積核實現的效果,跟左邊這個1x1,3x3,3x3的過程是一樣的,分解后參數的規模還可以縮減很多
基于前面卷積核分解的思考,我們是不是可以繼續假設,那些大于3x3的卷積核,因為都可以分解成一系列的3x3大小的卷積核,因此就顯得沒那么有必要。那是不是又可以把3x3的卷積核再分解成更小的卷積核呢,作者首先去測試了分解成2x2,發現使用這種對稱結構的卷積效果比非對稱的卷積效果更好,所謂非對稱的卷積,就是不再是nxn標準的窗口,而是nx1或者1xn的窗口,這么做同樣也可以縮減參數規模,但是遺憾的是,作者在測試的時候發現,這種結構對于網絡的早期階段,特征圖plane size 較大的時候并不起作用,而在特征圖大小在12x12到20x20范圍內時,才有效,而且設置成1x7和7x1的卷積核最好。但是后來在inception-v4 和 Inception-resnet-v2中,作者在feature map較大的情況下仍然使用了這種非對稱分解,說白了,其實并沒有嚴格的標準,還是怎么效果好,就怎么改。
這里輔助分類器,是指網絡早期卷積階段學習到的特征進行預測,從而通過監督各個階段的卷積特征學習,這個DSN(深度監督網絡)是一樣的思路, 測試的發現,其實有沒有這樣的輔助分類器,對于網絡早期的訓練結果影響不大,但是在訓練的后期,確實可以是的網絡的精度提升。另外,在網絡的早期階段引入輔助分類器,還有助于強化那些容易出問題的 low-level 的特征。因此,也可以把這些輔助分類器看做一種正則化方法。
在減小特征圖plane size 或者叫grid size時, 如果我們先擴充特征的維度,再進行pooling操作,或者先后完成了plane size 降采樣再進行特征維度增長,這兩種做法在串行的單路網絡中很常見,但是兩種操作都不是好的做法,因為這兩種做法都面臨著,輸入特征維度到輸出特征維度,驟降的過程,也就是有表征瓶頸的風險,作者就想出一種新的方法,融合卷積和pooling的結果的方式,這里卷積步長不再是1,而是2,在實現特征圖plane size 減小的同時還可以增加特征維度,是的表征瓶頸的問題得以減弱,而且計算量上比前兩種都還小一些。
殘差網絡非常簡單,想左圖那樣,通過設置一些shortcut,把卷積操作之前的特征和映射后的特征進行求和,這樣可以在一定程度上補償那些卷積過程損失掉的有效特征,后面一些論文分析,這么做之所以有利于學習,最主要的可能是因為shortcut增加了潛在的組成網絡是數量。
Inception-resnet v2還是inception 系列的,這里保持了以往inception的基本結構和優點,另外也把resnet的結構引入其中,效果還不錯。
分型網絡,由于包含不同深度的子網絡,分形網絡對總體深度的選取不敏感;在訓練階段,會找出有用的子網絡集合。它是第一個在極深卷積神經網絡領域對于 ResNet 的替代品,這也表明了殘差學習對于極深網絡不是必需的,最重要的還是前面講的,要增加潛在的組成網絡的數目。網絡結構其實很簡單,像這樣包含多條路徑。
分型網絡中存在多條連接路徑,在訓練的階段,假設即使一些路徑拋棄掉,仍至少存在一條路徑是有效的,這就是它的路徑舍棄原則,在訓練階段,Drop-path 有兩種模式,local 和 global ,前者使用固定的概率值,拋棄一些path, 但是保證至少有一條path是通的,Global 是全局唯一一條選中的path是通的,其他都拋棄掉,這就跟Bagging的思路相似,在多個分類器都比較有效的情形下,對自舉樣本集進行訓練,并組合訓練結果,這種方式在不進行數據擴充的情況下,仍然取得能和ResNet相比的結果。
DFN,跟FractalNet一樣,都是多路徑的網絡結構,這類網絡都可以理解為一種組合網絡,組合網絡可以分解成為一系列不同深度的網絡,他們在實驗整對這些網絡進行單獨訓練,得到的結果是,融合網絡里較深的網絡組合能夠使網絡性能提升,較淺的組合網絡反而使網絡性能下降,但是由于淺層的網絡容易收斂,它們能夠幫助深層的網絡進行優化。既然我們認為最終的表現是一種集成的近似,那么我們是否可以著手尋找更優的組合網絡以達到整體性能的提升?通過這里的組合網絡之間相互影響的啟發,我們認為極深的網絡會產生“拖后腿”的效果,反而較深但又不是特別深的“中間”網絡會對結果影響比較大。這是我看到的第一篇把從組成網絡的角度去思考網絡性能的論文,之前的很多網絡更多的通過實驗證明可行,卻沒有一篇說明,為什么一些增加寬度的網絡可以使效果更好。
我們現在已經知道,需要淺層網絡來幫助訓練較深網絡,而且實際設計神經網絡的時候很難做到只保留中間深度的網絡結構。那么一個折中的方案是把這里面最深的組成網絡去掉,去除極深的組成網絡不會對整體性能產生太大影響,有時候反而會提高最終結果,尤其是隨著網絡深度不斷增大的時候。
因此作者認為一個好的網絡結構應該包含如下兩個特性:足夠多的潛在網絡數目,以及足夠好的組成網絡。最簡單的策略是去掉“拖后腿”的極深網絡,將其變成“中間”深的組成網絡。為此,提出的Inception-Like結構與Merge-and-Run結構都去除了極深的那一條線路,但是Inception-Like的組合數目比相同參數下的ResNet要少,最終Merge-and-Run形式比較符合前面的分析與觀察。
這篇方法是MSRA最近剛剛發布的,突破了傳統標準卷積窗口的限制,使用可變形的卷積窗口和池化窗口。受啟發于Spatial Transformer Networks,那個方法里是對特征圖進行形變,這里是對卷積核池化窗口進行形變。其中關于雙線性插值的方法,基本沿用了STN。在傳統的卷積特征圖一般都是稀疏矩陣,固定卷積窗口,相當于對圖像的潛在特征等間距采樣表達,但是如果稀疏特征甚至沒有意義的特征占圖像面積較大,這樣等間距采樣表達對于學習算法是不利的,很容易想到,好的方式應該是對于感興趣的區域投以更多的關注,學習更多特征,這也就是作者在論文中的論述:并非所有的 pixel 位置感受野內的特征對最后的相應結果具有相同的價值。
這是在卷積和池化過程中學習
簡單總結一下,網絡結構上的一些特點,首先寬度和深度都很重要,尤其是深度;后來的很多拓展寬度的方法,其實都是為了減弱深度擴展的負面影響,從而提升網絡性能;在寬度擴展的問題上,基本都是在保證計算更高效,同時減少模型參數的前提下進行,而擴展寬度的核心似乎是,增加潛在的組成網絡的數目,整個訓練過程就轉化成了尋找一組最優網絡組合的問題。另外,我也發現一個有趣的問題,像單路、多路的網絡現在在圖像識別分類的問題上都已經比較成熟,相關的探索非常多,但是對于那些非圖像級的應用,而是像素級的語義問題,似乎現在只有單路的網絡,包括語義分割,GAN等,都是單路串行的網絡,我也有嘗試把inception,resnet的結構應用在像素級的問題上,發現網絡訓練的結果表現為不收斂,原因目前我還不清楚,我還在摸索中。
非線性激活單元,一般都很簡單,但是卻是CNN能夠描述非線性問題的根本。在研究過擬合問題的時候,激活單元按照原理來講,并不會直接影響模型過擬合,但是對模型的訓練收斂影響較大,同樣的網絡結構,使用不同的激活函數,最終的預測精度可能會差異很大,這就間接反映出激活單元對過擬合問題其實也有一定的影響。目前激活函數,已經有一個家族,按照函數本身的平滑性,可以分為3類,首先是平滑的非線性函數,其次是連續但是并非處處可導的,還有就是部分離散的。
平滑非線性函數里面,最早被使用的是Tanh 和 Sigmoid, 但是后來在AlexNet 網絡中對這兩個激活函數進行了分析,由于他們的兩端處于飽和狀態,容易產生梯度消失,對于網絡的收斂不利,被ReLU 取代,之后使用就較少,Softplus 和 Softsign 也存在同樣的問題,被使用的更少,而ELU是比較新的一種激活函數,現在不少網絡里都能看到它,大于0 的部分跟ReLU一樣,小與0的部分改成了指數函數的形式,可以略微提升網絡的性能。
連續非處處可導的非線性激活單元,全都是ReLU的變體,ReLU激活函數有很多優點,相比于它之前的激活函數,它足夠簡單,計算量很小,能夠使模型快速收斂,非飽和的性質也緩解了梯度消失的問題,提供了神經網絡的稀疏表達能力等,缺點也有,可能會出現神經元死亡,權重無法更新的情況。如果發生這種情況,那么流經神經元的梯度從這一點開始將永遠是0。也就是說,ReLU神經元在訓練中不可逆地死亡了。
部分離散是指,在激活過程中引入高斯噪聲,使得網絡在接近飽和狀態時,仍然存在梯度,網絡仍然可以繼續進行優化,比如NAF,使用退火機制控制噪聲的程度,在訓練的早期階段,投入大量的噪聲,使得網絡能夠在優化空間內進行更多的探索,隨著收斂過程,逐漸減少噪聲。不過這種引入噪聲的機制對性能的提升其實比較有限,而且增大了激活函數的復雜度,目前來看,使用的很少,還有待開發吧
激活函數源自于神經網絡中的閘門機制,或者說是疼痛的閘門控制理論,這個理論簡單來講,就是非疼痛的輸入可以阻止疼痛的感覺傳遞到中樞神經系統中。因此,通過無害的刺激輸入是可以抑制疼痛的。這也是麻醉劑的基本原理
我們可以把那些傳輸痛感的神經纖維,稱為傳入疼痛感受神經,人體內的這種神經纖維并不是單一的,而是多種的,簡單可以分為兩種,一種是AB纖維,傳遞劇烈疼痛,C纖維傳遞絞痛、慢性痛,而且彼此之間還會相互影響,而回顧CNN的激活單元,一個網絡結構都是單一的激活單元,更不存在激活單元之間的相互影響,因此,未來有可能這方面還會有更多的探索。
去相關這類的整體思路認為,CNN中的隱含單元,在學習特征的過程中,存在一定的相關性,換種說法就是,存在相互重疊冗余的特征表征,從而使得潛在性能不能完全發揮出來,因此想尋求一種方法,約束隱含單元,使他們盡可能學到不相關的有效特征
這是早一些的學習算法,玻爾茲曼機,基于生理神經的一些研究模型,認為大腦視覺神經皮層的細胞,可以看成由一對半調制線性濾波器,像這樣濾波輸出的平方的和再開方,對于隱含層的優化函數使用的有兩個部分,前一部分,是相關系數,就是約束隱含單元盡可能學到多樣的,不相關特征,后面的一項主要是約束迭代過程中收斂的,在收斂后,前后兩次迭代結果的差異應該足夠小。
到深度學習后,其實還是延續著這個領域還是延續著這個思路,不過,目前來看,這種對隱含單元相關性限制主要是利用最后的輸出層的結果,中間隱含層隱含單元的相關性依賴于梯度下降優化過程的間接調整,這也不難理解,一般我們認為隱含單元之間的相關性過強會弱化網絡的能力,但是有些隱單元之間的相關性對于部分特征的學習和增強也不能忽略,這樣一來,我們并不知道優化過程中哪些隱單元之間會形成這樣的相關性,也就很難去建立約束規則,另一方面,全部進行約束,需要耗費很多計算在計算方差,協方差等上面,所以大型網絡還沒見到隱含層使用去相關操作的。DCCA公式很簡單,不多說。
相關性神經網絡,跟前面講述的DCCA方法,研究的問題相似,對于每個sample數據含有two views,比如把圖像拆分成左右兩半,輸入到兩個網絡中獨立調整參數,重點是,得到兩組輸出后,假設對于同一個sample的兩個視圖,他們應該是強相關的,因為是強相關的,那就有希望利用其中一個重建另一個,這應該算是一種生成模型,但是不像GAN,沒有生成器和判別器的 tradeoff 過程。
DeCov的設計思路很有趣,改變了以往單個sample訓練的方式,把兩張sample組合成一張圖,這沿用了前面的two views的思想,同時約束隱含層的相關性,統計相關性損失代價,這里其實隱含一個重要的信息,相關性約束其實可以再細分,對于卷積階段的隱含單元,為了學習特征的多樣和有效,應該盡量使他們相關性較小,然而并不能做到完全去相關,一種可行的方法是對隱含單元進行分組,按照組內強相關,組間弱相關的原則,進行約束。
SDC,是基于DeCov的方法升級,隱含單元之間的相關性限制包括兩個方面,擴展了DeCov的 group 的做法,組內強相關,組外弱相關。
總的來說,這一類方法,理論上來說應該是有效的,但是目前的研究主要還是處于應用在分類識別的問題上,測試數據集不大,還沒看到有人拿來用在目標檢測或者像素級語義上。
最后,簡單講一講一些網絡中起著正則化作用的操作,有助于減弱網絡過擬合問題。
首先是權值衰減,也就是在常規的損失函數里,添加一項權值更新的約束項,權值在更新的過程中更加平滑的調整,并且使得優化后的權值向量,整體上平方和最小,避免了權值差異過大,可能原因是權值過大會過分強化部分特征,如果很不巧這部分特征源自數據本身的采樣或者統計噪聲,可能對于訓練數據擬合較好,但泛化能力很差。所以作者在論文里分析,使用權值縮減的策略可以抑制權值向量中一些不相關的成分,如果衰減系數選擇的合適,還可以在一定程度上抑制數據本身的噪聲,從而提高泛化能力。
Dropout在減弱網絡模型的過擬合問題上,影響力還是非常大的,是很多減弱過擬合方法的baseline,直到現在很多網絡里還在使用。Dropout的思路是這樣,作者也意識對于擬合能力很強,訓練樣本不足情景,網絡模型很容易過擬合,一個可行的解決方案,是整合很多個不同的網絡預測結果的,這就是Bagging的策略,當然分別訓練這樣一些網絡時間成本太高,Dropout的方法是,當網絡在輸入一個訓練樣本時,隱含層的每個隱單元都有概率為p的可能被忽略掉,在測試階段只需要把權值的輸出結果乘以概率p,就能實現在一個網絡中,在共享網絡參數的情形下,實現多個網絡預測結果的融合。如果一個網絡含有n個隱單元,在整個網絡中使用Dropout,就相當于有2^n個網絡,應該說在數目上還是非常龐大的。被忽略的隱含單元,是根據二項分布隨機選擇的。
使用dropout能夠使網絡學習的特征更加有效,圖左和圖右是在小數據集上的測試差異很明顯,左邊的隱單元之間必須通過相互合作才能產生好的重建結果,每個隱單元看起來都是雜亂的、沒有意義的,而使用dropout的網絡,在訓練過程中更加強調每個隱單元的重建結果,所以每個隱單元呈現出更有意義的特征信息。這里回顧前面去相關的方法,其實全局Dropout就是使每個隱單元之間的相關性最小。
關于對哪些隱單元使用Dropout ,測試結果看起來,對所有的層都使用最好
關于對哪些隱單元使用Dropout ,測試結果看起來,對所有的層都使用最好,而且隱含層和數據輸入層的dropout 比率還會有些區別,一般來講最優的設置是,輸入層0.8, 隱含層根據隱含層隱單元數量的多少,一般設置在0.5-0.8之間;數據集大小對于dropout方法也有影響,如果數據量過少,dropout是不起作用的,而且還有可能產生負面影響,隨著數據增多,dropout的增益效果才體現出來,但是如果數據量非常豐富,不存在過擬合問題,用不用dropout沒什么差別。
DropConnect是基于Dropout的變體,改動也很簡單,一般卷積過程是,先對輸入v進行卷積,在對結果進行非線性激活,dropout是在非線性激活后,通過隨機選擇的方式生成一個二值的mask,作用于輸出結果,DropConnect 就考慮是不是可以把這個mask放置在權值矩陣進行卷積之前,也能稍微改善一點精度。
一般來講,在使用一個數據集訓練的時候,受限于顯卡顯存和計算能力的限制,不會一次性把整個數據集投入訓練,往往會采用從數據集中采樣出一個batch,稱這樣的batch為mini-batch,經驗上來看,當batch的大小增加時,訓練過程中的梯度損失,應該是與整個數據集的分布狀態更符合,而且從效果上來看,batch的大小一般是大于1的偶數時,往往比數據逐個訓練要高效,這是計算過程的并行加速效果。在權值更新過程中,都存在這樣的現象,最終的輸出結果,要受到全局參數的影響,網絡參數很小的變化都有可能在深層的網絡中被急速放大,這就要求,卷積層在表征特征分布模式時,需要連續地適應新的數據分布模式。以往的網絡為了解決這個問題,會設置很小的學習率,以及專門進行初始化。
這就是Batch normalization的過程,可以緩解前面說的問題,對一個mini-batch 訓練數據,進行標準化,核心公式是這樣。允許使用更大的學習率,不用精心地進行初始化。
(完)