L1和L2正則化在pytorch中的應用

2021-09-13 11:37:52 字數 879 閱讀 6605

最近在自己改寫網路的過程中,發現了很多的問題,有乙個比較大的問題就是過擬合問題,過擬合問題不僅出現在小資料量的訓練中,在大資料量的訓練中也有著同樣的問題,今天測試了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非...