基於Theano的深度學習(Deep Learning)框架Keras學習隨筆-08-規則化(規格化)
阿新 • • 發佈:2019-02-05
通過前幾篇的介紹,網路已經選擇好了優化器、目標函式、模型以及啟用函式。並且給權值選擇了初始化方法。那麼接下來就是訓練。訓練過程後會出現什麼問題呢?過擬合!而有效解決過擬合的方法就是加入規則項。具體的規則化請見http://blog.csdn.net/niuwei22007/article/details/48929935中對於規則化的介紹。
一、如何使用規則化項
規則化項是一個對於權值引數的懲罰項。它包含在代價函式中。
在Keras的Dense Layer、TimeDistributedDense Layer、MaxoutDense Layer、Convolution1D
Layer 和Convolution2D Layer中有一個統一的API用來應用規則化項。
上面這些層有3個關鍵的引數:
- W_regularizer:例項化於 keras.regularizers.WeightRegularizer(對權值規則化)
- b_regularizer:例項化於keras.regularizers.WeightRegularizer (對偏置規則化)
- activity_regularizer:例項化於keras.regularizers.ActivityRegularizer (對啟用值規則化,也就是權值與矩陣點乘以後的輸出規則化)
這裡對W和b的規則化用的同一個類,因為他們的實現方式基本差不多。然而日常使用的時候,很少對b進行規則化。即使對b規則化了,結果只有一點點的改善。因此經常使用的是對W的規則化。
使用示例程式碼如下:
from keras.regularizers import l2, activity_l2
model.add(Dense(64, input_dim=64, W_regularizer=l2(0.01), activity_regularizer=activity_l2(0.01)))
二、可用的規則化項
可用的規則化項類有2個,一個是WeightRegularizer,可以例項化W和b規則化項;另外一個是ActivityRegularizer,可以例項化activity_regularizer。
keras.regularizers.WeightRegularizer(l1=0., l2=0.) keras.regularizers.ActivityRegularizer(l1=0., l2=0.)
其中,這裡的預置了l1和l2兩種規則化項,也是最常用的兩種。L1和 l2代表什麼意思呢?如何推導計算的?移步這裡。
三、快捷函式
在keras.regularizers中有幾個快捷函式可以使用:
- l1(l=0.01):只使用L1權值規則化,比如LASSO演算法
- l2(l=0.02):只使用L2 權值規則化,比如常用的權值衰減演算法和Ridge演算法。
- l1l2(l1=0.01, l2=0.02):同時使用 L1L2規則化項,比如ElasticNet
- activity_l1(l = 0.01):L1activity規則化
- activity_l2(l = 0.02):L2activity 規則化
- activity_l1l2(l1=0.01,l2=0.02):L1+L2activity規則化