1. 程式人生 > >深度神經網路優化策略彙總

深度神經網路優化策略彙總

接下來介紹卷積神經網路的各種改進措施,其中經典網路的改進措施已經在前面各個網路中介紹。針對卷積神經網路的改進措施主要在以下幾個方面:卷積層,池化層,啟用函式,損失函式,網路結構,正則化技術等方面。優化演算法對網路的訓練至關重要,在這裡我們單獨列出來了。

1.卷積層

卷積層的改進有以下幾種:卷積核小型化,1x1 卷積,Network In Network,Inception機制,卷積分解(Factorization),反捲積運算等

下面分別介紹

Network In Network的主要思想是用一個小規模的神經網路來替代卷積層的線性濾波器,在這篇文獻中,小型網路是一個多層感知器卷積網路。顯這種小型網路比線性的卷積SIGAI運算有更強的的描述能力。卷積核小型化是現在普遍接受的觀點,在VGG 網路中已經介紹了。
1x1 卷積可以用於通道降維,也可以用於全卷積網路,保證卷積網路能接受任意尺寸的輸入影象,並能做逐畫素的預測。Inception 機制在GoogLeNet 網路中已經介紹,這裡也不在重複。卷積操作可以轉化為影象與一個矩陣的乘積來實現,反捲積[17]也稱為轉置卷積,它的操作剛好和這個過程相反,正向傳播時左乘矩陣的轉置,反向傳播時左乘矩陣。注意這裡的反捲積和訊號處理裡的反捲積不是一回事,它只能得到和原始輸出影象尺寸相同的影象,並不是卷積運算的逆運算。反捲積運算有一些實際的用途,包括接下來要介紹的卷積網路的視覺化;全卷積網路中的上取樣,影象生成等。反捲積運算通過對卷積運算得到的輸出影象左乘卷積矩陣的轉置,可以得到和原始影象尺寸相同的一張影象。

2.池化層

池化層的改進主要有以下幾種:L-P 池化,混合池化,隨機池化,Spatial pyramid pooling,ROI pooling。Spatial pyramid pooling 在 SPP 網路中提出,之前的“基於深度學習的目標檢測演算法綜述”文章中 SIGAI 已經做了講解,這裡不再重複。ROI pooling 在 Fast R-CNN 演算法中提出,同樣的在目標檢測文章中已經做了介紹。

3.啟用函式

除了傳統的 sigmoid,tanh 函式,深度卷積神經網路中出現了各種新的啟用函式,主要的有:ReLU,ELU,PReLU 等,它們取得了不錯的效果,其中 ReLU 以及它的改進型在卷積網路中被普遍採用。這些啟用函式在 SIGAI 公眾號上一篇文章“理解神經網路的啟用函式”中已經做了介紹。

4.損失函式

損失函式也是一個重要的改進點。除了歐氏距離損失之外,交叉熵,對比損失,合頁損失等相繼被使用。這些基本的損失函式 SIGAI 在後續的文章中會專門介紹,敬請期待!

在一些複雜的任務上,出現了多工損失損失函式。典型的有目標檢測演算法,人臉識別演算法,影象分割演算法等,這些損失函式在人臉識別、目標檢測系列綜述文章中已經進行介紹,在這裡不再重複。

5.網路結構

這裡的網路結構指拓撲結構以及層的使用上。連線關係的改進如殘差網路和 DenseNet等結構在前面已經做了介紹。

全卷積網路 Fully Convolutional Networks[31],簡稱 FCN,是在標準卷積網路基礎上所做的改變,它將標準卷積網路的全連線層替換成卷積層,以適應影象分割、深度估計等需要對原始影象每個畫素點進行預測的情況。一般情況下,全卷積網路最後幾個卷積層採用 1x1的卷積核。由於卷積和下采樣層導致了影象尺寸的減小,為了得到與原始輸入影象尺寸相同的影象,使用了反捲積層實現上取樣以得到和輸入影象尺寸相等的預測影象。

不同層的卷積核有不同的感受野,描述了影象在不同尺度的資訊。多尺度處理也是卷積網路的一種常用手段,將不同卷積層輸出影象彙總到一個層中進行處理可以提取影象多尺度的資訊,典型的做法包括 GoogLeNet,SSD,Cascade CNN,DenseBox。

6.歸一化技術

神經網路在訓練過程中每一層的引數會隨著迭代的進行而不斷變化,這會導致它後面一SIGAI層的輸入資料的分佈不斷髮生變化,這種問題稱為 internal covariate shift。在訓練時,每一層要適應輸入資料的分佈,這需要我們在迭代過程中調整學習率,以及精細的初始化權重引數。為了解決這個問題,我們需要對神經網路每一層的輸入資料進行歸一化。其中一種解決方案為批量歸一化 Batch Normalization,它是網路中一種特殊的層,用於對前一層的輸入資料進行批量歸一化,然後送入下一層進行處理,這種做法可以加速神經網路的訓練過程。