在上一篇「深度學習 (DeepLearning) 基礎 [3]---梯度降低法」中咱們介紹了梯度降低的主要思想以及優化算法。本文將繼續學習深度學習的基礎知識,主要涉及:html
如下均爲我的學習筆記,如有錯誤望指出。git
要理解欠擬合和過擬合,咱們須要先清楚一對概念,即誤差和方差。
誤差和方差是深度學習中很是有用的一對概念,尤爲是能夠幫助咱們理解模型的欠擬合和過擬合。github
理解了誤差和方差的概念以後,那模型欠擬合和過擬合又是什麼呢?算法
過擬合:對應於高方差的狀況,即模型雖然在訓練集上的精度很高,可是在測試集上的表現確差強人意。這是因爲模型過分擬合了訓練集,將訓練集特有的性質當成了全部數據集的通常性質,致使其在其餘數據集上的泛化能力特別差。以下圖所示(藍色線爲預測的模型,能夠發現彷佛過分擬合了訓練數據):網絡
正確模型的擬合曲線以下圖所示(與上面欠擬合和過擬合的曲線圖對比,能夠更好地幫助咱們理解欠擬合和過擬合):架構
在理解了模型欠擬合和過擬合的概念以後,若是咱們在訓練模型的過程當中遇到了這兩類問題,咱們怎麼解決呢?函數
解決欠擬合:學習
(1) 使用更復雜的網絡結構,如增長隱藏層數目,隱藏層結點數等。(由於神經網絡若是層數和節點數足夠的話,是能夠模擬任何函數的)測試
(2) 訓練更長時間,即增長神經網絡模型的參數更新次數。(更新次數不夠可能使得模型還沒找到合適的參數使損失最小化,下降了模型精度)優化
(3) 使用其餘更合適的神經網絡架構,如前饋神經網絡、卷積神經網絡(CNN)、循環神經網絡(RNN)、深度信念網絡(DBN)等等(後續將進一步學習各類類型的神經網絡);
解決過擬合:
(1) 使用更多的訓練數據。(如果咱們能把當前領域內全部的訓練數據都拿來學習個夠,那麼咱們的模型還會在這個領域的數據上表現差嗎?不可能的,對吧!)
(2) 爲模型添加正則化模塊 (regularization)。(對於正則化概念以及爲何正則化能解決過擬合問題,在本文後續進行介紹)
(3) 使用其餘更合適的神經網絡架構。
對於以上策略通常的思考順序,不管是欠擬合仍是過擬合,當咱們遇到了,都是優先考慮能不能使用上述中講到的 (1) 和 (2) 來解決。若是不行的話再考慮 (3),由於重構一個神經網絡的話相對於其餘解決方法開銷比較大。
直觀理解:正則化是用來防止模型過擬合的一種方法,其作法是經過在模型損失函數中加入一項正則項,使得其在訓練數據擬合損失和模型複雜度中達到一種權衡。
一般加入正則化的損失函數爲以下形式:
其中第一項爲模型本來的損失函數,第二項
爲正則化項,w爲權值參數矩陣。若q=1,則爲咱們經常使用的L1正則化;若q=2,則爲咱們經常使用的L2正則化。
理解了正則化概念以及加入正則化的損失函數的形式以後,迴歸到一個更重要的問題,即爲何正則化可以防止模型過擬合呢?如下分別從三個角度來理解正則化在模型訓練中的做用。
(1) 從模型擬合曲線的函數形式來看
爲了回答上述問題,咱們須要先理解過擬合狀況下學習出來的擬合函數是什麼樣子的。能夠看到上述過擬合部分的擬合曲線圖(emm,就是扭來扭去的那張),圖中的數據點實際上只須要一個二次函數就可以很好擬合了。可是從圖中來看,過擬合狀況下學習到的函數,確定是大於二次的高次函數了。 假設該過擬合獲得的函數爲p次函數,以下所示:
實際上正確的擬合函數爲二次函數,以下所示:
咱們能夠發現,要是咱們可以更新權值參數w,使得w中的w0、w1和w2非0,而其他的權值均爲0的話,咱們是能夠獲得一個可以比較好地擬合上述曲線的模型的。而正則化就是起到上述這個做用(讓一些沒必要要的權值參數爲0),從而來防止模型過擬合的。
(2) 從神經網絡模型的複雜度來看
如今回過頭來看上述對於正則化的直觀理解,裏面有講到模型複雜度,那模型複雜度是什麼呀?咱們能夠將其通俗理解成權值參數的個數,由於網絡的權值參數越多表明着神經網絡更龐大(擁有更多的層和更多的節點以及更多的邊),天然而然模型就更復雜了(若是網絡中某條邊的權重w爲0的話,那這條邊不就沒了嘛,那模型不就更簡單一些了嘛,這就是正則化要作的事吧,以上爲我的理解)。
(3) 從加了正則化項的損失函數來看
如今再來看上述加入正則化的損失函數的通常形式,第一項爲本來的損失函數,第二項爲正則化項。如下分爲兩點來進行分析:
須要說明的是:雖然L1正則化和L2正則化均可以防止模型過擬合,可是L1正則化相比於L2正則化會更容易產生稀疏權值矩陣(也就是說,權值矩陣中更多的權值爲0)。至於緣由,因爲我的能力問題,可能解釋不太清楚,能夠參考知乎問題--L1 相比於 L2 爲何容易得到稀疏解?