1. 程式人生 > >基於Theano的深度學習(Deep Learning)框架Keras學習隨筆-08-規則化(規格化)

基於Theano的深度學習(Deep Learning)框架Keras學習隨筆-08-規則化(規格化)

通過前幾篇的介紹,網路已經選擇好了優化器、目標函式、模型以及啟用函式。並且給權值選擇了初始化方法。那麼接下來就是訓練。訓練過程後會出現什麼問題呢?過擬合!而有效解決過擬合的方法就是加入規則項。具體的規則化請見http://blog.csdn.net/niuwei22007/article/details/48929935中對於規則化的介紹。

一、如何使用規則化項

        規則化項是一個對於權值引數的懲罰項。它包含在代價函式中。

        在Keras的Dense LayerTimeDistributedDense LayerMaxoutDense LayerConvolution1D 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規則化

參考資料: