正則化能減少過擬合,那麼有哪些方法呢?我們來看一下:
1.1 cost function加上正則項
L2 regularization
即在 cost function 加上 L2 norm:
∑θ2 L1 regularization
即在 cost function 加上 L1 norm:
∑∥θ∥
1.2 weight decay
L2 norm regularization 也叫 權重衰減(weight decay)。因爲加上正則項後,在梯度下降中,權重會變小。
如下圖,原本的
1.3 爲什麼正則化能減少過擬合?
因爲cost function中加入了
另外一個理解方式,可以看激活函數,比如tanh,
1.4 dropout 正則化
Dropout是指在模型訓練時隨機讓網絡某些隱含層節點的權重不工作(權重設爲0),不工作的那些節點可以暫時認爲不是網絡結構的一部分,但是它的之前權重得保留下來(只是暫時不更新而已),因爲下次樣本輸入時它可能又得工作了。
如上圖,節點有0.5的概率不工作,那些不工作的節點可以當作不存在,網絡結構變得簡單,能減少過擬合。
1.4.1 dropout 的實現(inverted dropout)
dropout有一個參數,keep_prob, 一般設爲0.8。具體實現如下:
假設在第三次層的輸出a3後加上dropout:
- 首先生成一個和a3 形狀相同的隨機數矩陣d3,和keep_prob進行比較後, d3成爲布爾矩陣,其中20%的數是0。
- d3和a3對應的數值相乘,得到新的a3
- a3除以keep_prob。 這一步是爲了讓期望值和原本的a3相同。
1.4.2 測試時不用dropout
dropout只在訓練時使用,因爲我們不希望測試的結果是隨機的,如果使用的話,預測會受到干擾。
1.4.3 理解Dropout
Dropout使得每個單元都有可能被丟棄,因此網絡不會依賴某一個單元,權重會分散給個個單元。
實際上,dropout的效果和L2 正則化差不多,基本能替代L2正則化,並且在深度學習的實踐中常用得多。
1.4.4 優缺點
- Dropout優點
- 計算方便。訓練過程中使用Dropout產生 n 個隨機二進制數與狀態相乘即可。每個樣本每次更新的時間複雜度: O(n),空間複雜度: O(n)。
- 適用廣。Dropout不怎麼限制適用的模型或訓練過程,幾乎在所有使用分佈式表示且可以用隨機梯度下降訓練的模型上都表現很好。包括:前饋神經網絡、概率模型、受限波爾茲曼機、循環神經網絡等。
- 相比其他正則化方法(如權重衰減、過濾器約束和稀疏激活)更有效。也可與其他形式的正則化合並,得到進一步提升。
- Dropout缺點
- 不適合寬度太窄的網絡。否則大部分網絡沒有輸入到輸出的路徑。
- 不適合訓練數據太小(如小於5000)的網絡。訓練數據太小時,Dropout沒有其他方法表現好。
- 不適合非常大的數據集。數據集大的時候正則化效果有限(大數據集本身的泛化誤差就很小),使用Dropout的代價可能超過正則化的好處。
1.5 其他減少過擬合方法
data augmentation
- 圖片水平翻轉
- 加入扭曲變形
數字字符等數據
early stopping
對比valid loss 和train loss
在valid loss 開始增大時停止訓練
1.6 歸一化輸入
一般用z-score 歸一化
其中
注意:
- 歸一化的單位是每個feature,不同feature的均值和反差不同
- 測試集歸一化所用的均值和方差一定要和訓練集相同
歸一化的原因:
使得不同維度的數量級相似,如果原本2個feature的值分別爲[0,1],[0,1000]的話,網絡會認爲數值大的特徵更重要。
另外一個理解的方式:
不同維度的數量級相差很大的話,梯度下降會很慢。
1.7 權重的初始化
- ReLU
He正態分佈初始化方法,參數由0均值,標準差爲
- tanh
標準的均勻分佈的Xaiver初始化器,其中fan_in是輸入節點的數量,fan_out是輸出節點的數量。參數由區間中均勻採樣獲得。