【TensorFlow】TensorFlow从浅入深系列之四 -- 教你深入理解过拟合问题(正则化)

本文是《TensorFlow从浅入深》系列之第4篇

TensorFlow从浅入深系列之一 -- 教你如何设置学习率(指数衰减法)

TensorFlow从浅入深系列之二 -- 教你通过思维导图深度理解深层神经网络

TensorFlow从浅入深系列之三 -- 教你如何对MNIST手写识别

过拟合

模型在训练数据上的表现并不一定代表了它在未知数据上的表现。

过拟合,指的是当一个模型过为复杂之后,它可以很好地“记忆”每一个训练数据中随机噪音的部分而忘记了要去“学习”训练数据中通用的趋势。

图4-14显示了模型训练的三种不同情况。在第一种情况下,由于模型过于简单,无法刻画问题的趋势。第二个模型是比较合理的,它既不会过于关注训练数据中的噪音,又能够比较好地刻画问题的整体趋势。第三个模型就是过拟合了, 虽然第三个模型完美地划分了不同形状的点,但是这样的划分并不能很好地对未知数据做出判断,因为它过度拟合了训练数据中的噪音而忽视了问题的整体规律。比如图中浅色方框“口”更有可能和“X ”属于同一类,而不是根据图上的划分和“ O”属于同一类。


为了避免过拟合问题 , 一个非常常用的方法是正则化( regul arization )。正则化的思想就是在损失函数中加入刻画模型复杂程度的指标。

假设用于刻画模型在训练数据上表现的损失函数为J(θ),那么在优化时不是直接优化J(θ),而是优化J(θ)+λR(w) 。其中R(w)刻画的是模型的复杂程度,而λ表示模型复杂损失在总损失中的比例。注意这里θ表示的是一个神经网络中所有的参数,它包括边上的权重w和偏置项b。一般来说模型复杂度只由权重w决定 。

常用的刻画模型复杂度的函数R(w)有两种: 

一种是L1正则化,计算公式是:

另一种是L2正则化,计算公式是 :

无论是哪一种正则化方式,基本的思想都是希望通过限制权重的大小,使得模型不能任意拟合训练数据中的随机噪音。
但这两种正则化的方法也有很大的区别。首先,Ll正则化会让参数变得更稀疏,而L2正则化不会。所谓参数变得更稀疏是指会有更多的参数变为0,这样可以达到类似特征选取的功能。之所以L2正则化不会让参数变得稀疏的原因是当数很小时,比如 0.001,这个参数的平方基本上就可以忽略了,于是模型不会进一步将这个参数调整为0。其次,L1正则化的计算公式不可导,而L2正则化公式可导。

在实践中,也可以将 LI正则化和L2正则化同时使用 :


TensorFlow中计算L1正则化和L2正则化的函数:

L1正则化:tf.contrib.layers.l1regularizer(lambda)(w)函数,它可以返回一个函数,这个函数可以计算一个给定参数的L1正则化项的值。

L2正则化:tf.contrib.layers.12_regularizer(lambda)(w)函数可以计算L2正则化项的值 。

lambda参数表示了正则化项的权重,也就是公式J(θ)+λR(w)中的λ。w为需要计算正则化损失的参数。


下边代码是计算L1和L2正则化:

import tensorflow as tf

weights = tf.constant([[1.0, -2.0],[-3.0 , 4.0]])
with tf.Session() as sess:
    # 输出为(|1|+|-2|+|-3|+|4|)x0.5=5。其中0.5为正则化项的权重。
    print("L1正则化值为:", end="")
    print(sess.run(tf.contrib.layers.l1_regularizer(0.5)(weights)))
    
    # 输出为((1)^2+(-2)^2+(-3)^2+(4)^2)/2x0.5=7.5。其中0.5为正则化项的权重。
    # TensorFlow会将L2正则化损失值除以2使得求导得到的结果更加1简洁 。
    print("L2正则化值为:", end="")
    print(sess.run(tf.contrib.layers.l2_regularizer(0.5)(weights)))

运行结果:

L1正则化值为:5.0
L2正则化值为:7.5

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值