首頁 > 軟體

解讀keras中的正則化(regularization)問題

2022-12-17 14:00:11

keras中正則化(regularization)

keras內建3種正則化方法

keras.regularizers.l1(lambda)
keras.regularizers.l2(lambda)
keras.regularizers.l1_l2(l1=lambda1, l2=lambda2)

目前我的理解是lambda越大,對引數的約束就越強,也就是懲罰力度越大。

其中L1正則化方法,是對|w|進行懲罰,使得w趨近0

而L2正則化方法,是對w2進行懲罰,使得w儘可能小

Dense,Conv1D,Conv2D,Conv3D有統一的正則化API,見keras中文檔案

3個正則化關鍵字

1. kernel_regularizer

對權值進行正則化,大多數情況下使用這個

2. bias_regularizer

限制bias的大小,使得輸入和輸出接近

3. activity_regularizer

對輸出進行正則化,使得輸出儘量小

keras中新增正則化

正則項

正則項在優化過程中層的引數或層的啟用值新增懲罰項,這些懲罰項將與損失函數一起作為網路的最終優化目標

懲罰項基於層進行懲罰,目前懲罰項的介面與層有關,但Dense, Conv1D, Conv2D, Conv3D具有共同的介面。

這些層有三個關鍵字引數以施加正則項:

  • kernel_regularizer:施加在權重上的正則項,為keras.regularizer.Regularizer物件
  • bias_regularizer:施加在偏置向量上的正則項,為keras.regularizer.Regularizer物件
  • activity_regularizer:施加在輸出上的正則項,為keras.regularizer.Regularizer物件

例子

from keras import regularizers
model.add(Dense(64, input_dim=64,
                kernel_regularizer=regularizers.l2(0.01),
                activity_regularizer=regularizers.l1(0.01)))

可用正則項

keras.regularizers.l1(0.)
keras.regularizers.l2(0.)
keras.regularizers.l1_l2(0.)

開發新的正則項

任何以權重矩陣作為輸入並返回單個數值的函數均可以作為正則項,範例:

from keras import backend as K
 
def l1_reg(weight_matrix):
    return 0.01 * K.sum(K.abs(weight_matrix))
 
model.add(Dense(64, input_dim=64,
                kernel_regularizer=l1_reg)

可參考原始碼keras/regularizer.py

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com