想改善深層神經網絡,這幾種途徑值得一試!

本文共2734字,預計學習時長5分鐘算法

深層神經網絡能夠解決諸如天然語言處理、機器視覺、語音合成等複雜任務。提升深層神經網絡的性能與理解其工做原理一樣重要。這篇文章將解釋改善神經網絡方面的各類術語和方法。微信

誤差與方差網絡

誤差與方差是體現網絡在訓練集和測試集中性能的兩個基本術語。下列兩類問題能夠輕鬆直觀地解釋誤差與方差。藍線表示由神經網絡計算的斷定邊界。dom

1. 最左側的圖片展現出神經網絡存在較大誤差。此時網絡學習了一個簡單假設,因此不能正確地用於訓練數據。所以沒法區分不一樣類的示例,而且對訓練集和測試集處理效果不佳。能夠說這個網絡是不擬合的。函數

2. 最右側的圖片代表,神經網絡存在較大方差。此時網絡學習了一個很是複雜的假設,所以沒法進行概括。該方法對訓練數據的處理效果較好,而對測試數據的處理效果較差。能夠說網絡是過分擬合的。性能

3. 中間的圖片展現了一個「恰到好處」的神經網絡。它學習了理想假設,這有助於網絡篩選出異常狀況,並對數據進行概括。應將實現這種類型的網絡定爲目標。學習

圖片來源:pexels.com/@pixabay測試

訓練方法

既然瞭解了什麼是理想的神經網絡,那麼如何實現目標呢?首先應處理誤差問題,再處理方差問題。優化

第一個問題是「是否存在較大誤差?」若是答案是確定的,那麼應嘗試如下步驟:人工智能

· 訓練更大的網絡,包括增長隱層數和隱層的神經元數。

· 對網絡進行長時間的訓練。訓練過程可能不完整,須要更多迭代。

· 嘗試不一樣的優化算法,包括Adam、Momentum、AdaDelta等。

· 迭代執行上述步驟,直到誤差問題獲得解決,而後處理第二個問題。

若是答案是否認的,意味着誤差問題已經解決,接下來應關注方差問題。第二個問題是「是否存在較大方差?」若是答案是確定的,應嘗試如下步驟:

· 收集更多訓練數據。訓練數據越多,數據越多變,從變化較小的數據中學習的假設就越不復雜。

· 嘗試正則化。將在下一節中詳述。

· 迭代執行上述步驟,直到方差問題獲得解決。

若是答案是否認的,意味着方差問題已經解決,如今的神經網絡是「恰到好處的」。

正則化

正則化是一種有助於減小神經網絡過分擬合的邏輯技術。當在網絡中加入正則化時,意味着加入了一個新的正則化項,而且修改了損失函數。修改後的代價函數 J在數學上表示爲:

 

帶有λ的第二項爲正則化項。||W||項爲弗羅賓尼斯範數(矩陣中元素的平方和)。隨着正則化的引入,λ成爲一個新的超參數,能夠對其進行修改以提升神經網絡的性能。上述正則化也稱爲L-2正則化。

早期使用如下更新規則來更新權值:

因爲在修改後的已包括正則化的代價函數J中存在新的正則化項,因此將用如下方式更新權值:

這裏顯示出,權值減小了一個小於1的小數。所以也稱這種正則化爲權值衰減。衰減值取決於學習速率α和正則化項λ。

正則化爲何有效?

訓練神經網絡的最終目標是使代價函數J最小化,從而使正則化項最小化。如今已經瞭解了正則化的概念,接下來解釋它爲何有效。

第一,若是增長λ的值,弗羅賓尼斯範數就會變小,權值就會接近0。這種方法消除了大部分神經元,製造淺層網絡。能夠看做是將學習複雜假設的深層網絡轉化爲學習簡單假設的淺層網絡。衆所周知,簡單假設能夠減小複雜的特徵,減小過分擬合,獲得一個「恰到好處」的神經網絡。

也能夠從應用正則化時神經元的激活方式來解釋。爲此,須要瞭解tanh(x)的激活。

若是增長λ的值,那麼弗羅賓尼斯範數變小,即權值W 變小。所以,該層的輸出將變小,而且將位於激活函數的藍色區域中。能夠看到,藍色區域的激活幾乎是線性的,網絡的行爲將相似於淺層網絡,即網絡將不學習複雜的假設(將避免尖銳的曲線),而且最終將減小過分擬合,即可以得到一個「恰到好處」的神經網絡。

所以,因爲弗羅賓尼斯範數將變大,太小的λ值將致使過分擬合,神經元將不會被清除,而且層的輸出將不會在線性區域中。相似地,過大的λ值將致使擬合不足。所以,尋找λ的最優值是提升神經網絡性能的關鍵。

丟棄正則化

 

丟棄正則化是另外一種正則化技術。這種技術會丟棄某些神經元以及它們在神經網絡中的鏈接。機率keep_prob決定了要丟棄的神經元。在去除神經元后,網絡對剩餘的神經元進行訓練。須要注意的是,在測試時間/推理時間內,全部神經元都有可能用於肯定輸出。下例有助於理解這個概念:

# Define the probablity that a neuron 
stays.keep_prob = 0.5

# Create a probability mask for a layer eg. layer 2. 
The mask should
# have same dimensions as the weight matrix so 
that the connections
# can be removed.d2 = np.random.rand(a2.shape[0],a2.shape[1]) < 
keep_prob

# Obtain the new output matrix.a2 = 
np.multiply(a2,d2)

# Since few neurons are removed, we need to 
boost the weights of
# remaining neurons to avoid weight imbalance 
during test time.a2 = a2/keep_prob

因爲首先丟棄機率爲keep_prob的神經元,而後使用keep_prob加強剩餘神經元,因此這種類型的丟棄被稱爲倒置丟棄。

 

丟棄之間禁止神經元只依賴某些特徵,所以,權值得以傳播。神經元可能變得依賴於某些輸入特徵來肯定輸出。在丟棄正則化的影響下,對於訓練過程當中的不一樣訓練樣本,一個特定神經元每次只獲得少數特徵做爲輸入。最終,權值分佈在全部輸入之間,網絡使用全部輸入特徵來肯定輸出,而不依賴於任何單個特徵,從而使網絡更加結實。這也叫L2正則化的自適應形式。

也能夠爲每一層單獨設置 keep_prob。由於丟棄的神經元數量與 keep_prob成反比;創建 keep_prob的通常標準是,密集鏈接應包含相對較少的 keep_prob,以便丟棄更多的神經元,反之亦然。

在丟棄正則化時,深層網絡模仿淺層網絡在訓練階段的工做。這反過來又減小了過分擬合,可獲得「恰到好處」的神經網絡。

早中止

早中止是一種訓練方法。在早期中止訓練神經網絡以防止其過分擬合併跟蹤train_loss和dev_loss以肯定什麼時候中止訓練。

 

只要dev_loss開始迭代過分;便中止訓練。這種方法被稱爲早中止。可是,因爲如下兩個緣由,不推薦在訓練網絡時使用:

1. 中止訓練時,損失不是最小的。

2. 正在減小訓練不當的網絡的過分擬合。

早中止會增長複雜度,沒法得到「恰到好處」的神經網絡。

留言 點贊 關注

咱們一塊兒分享AI學習與發展的乾貨

歡迎關注全平臺AI垂類自媒體 「讀芯術」

(添加小編微信:dxsxbb,加入讀者圈,一塊兒討論最新鮮的人工智能科技哦~)

相關文章
相關標籤/搜索