一、源碼
import tensorflow as tf
a = tf.constant([2.0,3.0,4.0])
b = tf.contrib.layers.l1_regularizer(1.0)(a)
c = tf.contrib.layers.l2_regularizer(1.0)(a)
with tf.Session() as sess:
print(sess.run(a))
#輸出L1 正則化,計算方法(|2.0|+|3.0|+|4.0|)*1 = 9
print(sess.run(b))
#輸出L2 正則化(2^2+3^2+4^2)*1/2 = 14.5
print(sess.run(c))
輸出結果
[ 2. 3. 4.]
9.0
14.5
二、計算方法
2.1 L1的計算公式
設張量a
2.2 L2的計算公式
設張量a
三 、l1/l2_regularizer正則化的運用
通常,會將正則化的結果當作Loss函數的一部分,而正則計算的一般是權重w與偏置值b
例:Loss = cross_entropy + L(w)+L(b)
優化Loss函數,即是優化w,b張量中各元素的絕對值之和或者平方和。
而爲什麼要優化w,b的絕對值之和或者平方和呢。
簡而言之,就是要降低模型的複雜度,防止過擬合。
可以這麼簡單理解模型複雜度,對於n維的張量,其中爲零元素越多,或者元素值越小,那麼其模型複雜度越小。反之亦然。
四、l1/l2_regularizer正則化過擬合原理
如上圖所示擬合曲線
(1)圖一的擬合較爲簡單,不能很好的反應出變化關係
(2)圖二的擬合較好,可以很好的表達變化關係
(3)圖三的擬合較爲複雜,常用不能很好的預測以後的變化趨勢)
當訓練量較少時,一些隨機、錯誤因素也會佔有較高的比重,從而導致錯誤的變化趨勢預估。那麼減少這些值也具有較大的意義,可以將這些隨機、錯誤因素理解圖中爲高階的元素(
可使用l1/l2_regularizer優化權重w=(
w值越小,或者w中非零的元素越少,越不會發生過擬合。