(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正则化过拟合原理

(Tensorflow之七)L1_regularizer与L2_regularizer正则化_第1张图片
如上图所示拟合曲线
(1)图一的拟合较为简单,不能很好的反应出变化关系
(2)图二的拟合较好,可以很好的表达变化关系
(3)图三的拟合较为复杂,常用不能很好的预测以后的变化趋势)
当训练量较少时,一些随机、错误因素也会占有较高的比重,从而导致错误的变化趋势预估。那么减少这些值也具有较大的意义,可以将这些随机、错误因素理解图中为高阶的元素( θ3 , θ4 )。
可使用l1/l2_regularizer优化权重w=( θ1 , θ2 θ3 ,…., θn
w值越小,或者w中非零的元素越少,越不会发生过拟合。

你可能感兴趣的:(AI)