LM一面

常見跳出局部最小值策略

現實任務中,人們常採用以下策略來試圖“跳出”局部最小值,從而達到全局最小值:

1、以多組不同參數值初始化多個神經網絡,按標準方法訓練後,取其中誤差最小的解作爲最終參數,這相當於從多個不同的初始化點開始搜索,從而可能尋找全局最優。

2、使用模擬退化技術,模擬退火在每一步都以一定的概率接受比當前解更差的結果,從而有助於“跳出”局部極小。在每步迭代過程中,接受“次優解”的概率隨着時間的推移而逐漸降低,從而保證算法的穩定。

3、使用隨機梯度下降,與標準的梯度下降法精確計算梯度不同,隨機梯度下降法在計算梯度時加入了隨機的因素。於是,即便陷入局部極小點,它計算出的梯度時加入了隨機因素,於是,即便陷入局部極小點,它計算出的梯度可能不爲0,這樣就有機會跳出局部極小繼續搜索。

Relu函數作爲激活函數,有下面幾大優勢:

  • 速度快 和sigmoid函數需要計算指數和倒數相比,relu函數其實就是一個max(0,x),計算代價小很多。
  • 減輕梯度消失問題 回憶一下計算梯度的公式。其中,是sigmoid函數的導數。在使用反向傳播算法進行梯度計算時,每經過一層sigmoid神經元,梯度就要乘上一個。從下圖可以看出,函數最大值是1/4。因此,乘一個會導致梯度越來越小,這對於深層網絡的訓練是個很大的問題。而relu函數的導數是1,不會導致梯度變小。當然,激活函數僅僅是導致梯度減小的一個因素,但無論如何在這方面relu的表現強於sigmoid。使用relu激活函數可以讓你訓練更深的網絡。

全連接網絡 VS 卷積網絡

全連接神經網絡之所以不太適合圖像識別任務,主要有以下幾個方面的問題:

  • 參數數量太多 考慮一個輸入1000*1000像素的圖片,輸入層有1000*1000=100萬節點。假設第一個隱藏層有100個節點,那麼僅這一層就有(1000*1000+1)*100=1億參數,這實在是太多了!我們看到圖像只擴大一點,參數數量就會多很多,因此它的擴展性很差。
  • 沒有利用像素之間的位置信息 對於圖像識別任務來說,每個像素和其周圍像素的聯繫是比較緊密的,和離得很遠的像素的聯繫可能就很小了。如果一個神經元和上一層所有神經元相連,那麼就相當於對於一個像素來說,把圖像的所有像素都等同看待,這不符合前面的假設。當我們完成每個連接權重的學習之後,最終可能會發現,有大量的權重,它們的值都是很小的(也就是這些連接其實無關緊要)。努力學習大量並不重要的權重,這樣的學習必將是非常低效的。
  • 網絡層數限制 我們知道網絡層數越多其表達能力越強,但是通過梯度下降方法訓練深度全連接神經網絡很困難,因爲全連接神經網絡的梯度很難傳遞超過3層。因此,我們不可能得到一個很深的全連接神經網絡,也就限制了它的能力。

那麼,卷積神經網絡又是怎樣解決這個問題的呢?主要有三個思路:

  • 局部連接 這個是最容易想到的,每個神經元不再和上一層的所有神經元相連,而只和一小部分神經元相連。這樣就減少了很多參數。
  • 權值共享 一組連接可以共享同一個權重,而不是每個連接有一個不同的權重,這樣又減少了很多參數。
  • 下采樣 可以使用Pooling來減少每層的樣本數,進一步減少參數數量,同時還可以提升模型的魯棒性。

對於圖像識別任務來說,卷積神經網絡通過儘可能保留重要的參數,去掉大量不重要的參數,來達到更好的學習效果。

卷積神經網絡

首先,我們先獲取一個感性認識,下圖是一個卷積神經網絡的示意圖:

圖1 卷積神經網絡

網絡架構

如圖1所示,一個卷積神經網絡由若干卷積層、Pooling層、全連接層組成。你可以構建各種不同的卷積神經網絡,它的常用架構模式爲:

INPUT -> [[CONV]*N -> POOL?]*M -> [FC]*K

也就是N個卷積層疊加,然後(可選)疊加一個Pooling層,重複這個結構M次,最後疊加K個全連接層。

對於圖1展示的卷積神經網絡:

INPUT -> CONV -> POOL -> CONV -> POOL -> FC -> FC

卷積神經網絡輸出值的計算

卷積層輸出值的計算

假設有一個5*5的圖像,使用一個3*3的filter進行卷積,想得到一個3*3的Feature Map,如下所示:

爲了清楚的描述卷積計算過程,我們首先對圖像的每個像素進行編號,用

例如,對於Feature Map左上角元素

計算結果如下圖所示:

下面的動畫顯示了整個Feature Map的計算過程:

圖2 卷積計算

上面的計算過程中,步幅(stride)爲1。步幅可以設爲大於1的數。例如,當步幅爲2時,Feature Map計算如下:

Pooling層輸出值的計算

Pooling層主要的作用是下采樣,通過去掉Feature Map中不重要的樣本,進一步減少參數數量。Pooling的方法很多,最常用的是Max Pooling。Max Pooling實際上就是在n*n的樣本中取最大值,作爲採樣後的樣本值。下圖是2*2 max pooling:

除了Max Pooing之外,常用的還有Mean Pooling——取各樣本的平均值。

全連接層

全連接層輸出值的計算和上一篇文章零基礎入門深度學習(3) - 神經網絡和反向傳播算法講過的全連接神經網絡是一樣的,這裏就不再贅述了。

卷積神經網絡的訓練

和全連接神經網絡相比,卷積神經網絡的訓練要複雜一些。但訓練的原理是一樣的:利用鏈式求導計算損失函數對每個權重的偏導數(梯度),然後根據梯度下降公式更新權重。訓練算法依然是反向傳播算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章