(Tensorflow之七)L1_regularizer與L2_regularizer正則化

一、源碼

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

L(a)=||a||=i=0n|ai|

2.2 L2的計算公式

設張量a

L(a)=||a||22=ni=0ai22

三 、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)圖三的擬合較爲複雜,常用不能很好的預測以後的變化趨勢)
當訓練量較少時,一些隨機、錯誤因素也會佔有較高的比重,從而導致錯誤的變化趨勢預估。那麼減少這些值也具有較大的意義,可以將這些隨機、錯誤因素理解圖中爲高階的元素(θ3 ,θ4 )。
可使用l1/l2_regularizer優化權重w=(θ1 ,θ2θ3 ,….,θn
w值越小,或者w中非零的元素越少,越不會發生過擬合。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章