最近在自己改寫網路的過程中,發現了很多的問題,有乙個比較大的問題就是過擬合問題,過擬合問題不僅出現在小資料量的訓練中,在大資料量的訓練中也有著同樣的問題,今天測試了l1和l2正則化,效果還在實驗中,如果效果比較好會在後面做及時的更新。
l1正則化:
l1 正則化公式也很簡單,直接在原來的損失函式基礎上加上權重引數的絕對值:
上式可知,當w大於0時,更新的引數w變小;當w小於0時,更新的引數w變大;所以,l1正則化容易使引數變為0,即特徵稀疏化。
l2正則化:
由上式可知,正則化的更新引數相比於未含正則項的更新引數多了
項,當w趨向於0時,引數減小的非常緩慢,因此l2正則化使引數減小到很小的範圍,但不為0。
在pytorch中沒有明確的新增l1和l2正則化的方法,但是可以直接的採用優化器自帶的weight_decay選項來制訂權重衰減,相當於l2正則化中的λ,
optimizer = torch.optim.adam(model.parameters(), lr=1e-4, weight_decay=1e-5)
上面這是adam優化器的一種達到l2正則化效果的一種方式。pytorch中還有很多這樣的優化器,如sgd,adadelta,adam,adagrad,rmsprop等,使用它很簡單,你需要傳入乙個可迭代的引數列表(裡面必須都是variable型別的)進行優化,然後你可以指定一些優化器的引數,如學習率,動量,權值衰減等。
參考:
L1和L2正則化
l1和l2正則化 l1與l2正則化都是防止模型過擬合,其方式略有不同。具體請見下文。1 l1 正則化l1正則化 1範數 是指,各權值 變數 特徵 絕對值之和。其作用是產生權值的稀疏模型,也就是讓大部分權值為0.為什麼能產生權值稀疏模型?因為如下圖所示,各權值絕對值之和後得到乙個矩陣,很容易在矩陣的頂...
l1和l2正則化
import tensorflow as tf import tensorflow.contrib as contrib weight tf.constant 1.0,2.0 3.0,4.0 with tf.session as sess print sess.run contrib.layers....
L1和L2正則化
l0範數指的是向量中非零元素的個數,l0正則化就是限制非零元素的個數在一定的範圍,這很明顯會帶來稀疏。一般而言,用l0範數實現稀疏是乙個np hard問題,因此人們一般使用l1正則化來對模型進行稀疏約束。稀疏性 參考 另外一種解釋 假設費用函式l與某個引數w的關係如圖所示 則最優的 w在綠點處,w非...