深度学习进阶课程10---减少Overfitting的方法Regularization

上一篇文章写了增加训练数据集的量是减少overfitting的途径之一,其实减小神经网络的规模,也可以减小overfitting,但是更深层更大的网络潜在有更强的学习能力。
我们可以采用另一种方式来减少overfitting,即使对于固定的神经网络和固定的训练集,我们仍然可以减少,Regularization
最常见的一种Regularization:L2 Regularization(weight decay)
新的损失函数 Regularized cross-entropy:

在这里插入图片描述
比之前的cross-entropy增加了一项:权重之和(对于神经网络里面的所有权重w相加)
λ>0;,是regularization的参数
n:训练集包含的实例个数
对于最开始写的二次cost函数,加上一项,变为:Regularized quadratic cost:
在这里插入图片描述

对于以上两种情况,可以概括表示为:
在这里插入图片描述
Regularization的Cost偏向于让神经网络学习比较小的权重w,除非第一项的Cost明显减少
λ:调整两项的相对重要程度,较小的λ倾向于让第一项Cost最小化,较大的λ倾向于最小化权重之和
对以上公式求偏导数:
在这里插入图片描述
以上两个偏导数可以用之前介绍的backpropagation算法求得,添加了一项:
在这里插入图片描述

对于偏向b,偏导数不变
根据梯度下降算法,更新法则变为:
在这里插入图片描述
在这里插入图片描述
对于随机梯度下降(stochastic gradient descent):
在这里插入图片描述
求和是对于一个mini-batch里面所有的x
做一个实验,看新的regularization表现如何

import  mnist_loader  #下载数据模块
import network2  #刚才实现好的network
import matplotlib.pyplot as plt




training_data,validation_data,test_data=mnist_loader.load_data_wrapper()

net=network2.Network([784,30,10],cost=network2.CrossEntropyCost)
net.large_weight_initializer()#初始化

net.SGD(training_data[:1000],400,10,0.5,evaluation_data=test_data,
        lmbda=0.1,monitor_evaluation_cost=True,monitor_evaluation_accuracy=True,
        monitor_training_cost=True,monitor_training_accuracy=True)

来看一下效果:
在这里插入图片描述
可以看到cost的表现还是非常不错的,曲线非常平缓,一直在下降
再来看一下accuracy
在这里插入图片描述
accuracy在test data上面持续增加
最高的accuracy也增加了,说明regularization减少了overfitting
再看一下用50000张训练集做测试,
同样的参数:30 epochs,学习率:0.5,mini-batch size:10
需要改变λ,因为n从10000变成50000了:
在这里插入图片描述
变了,所以需要增大λ,让分数的值相对不会变化太大,增大到5.0>>net.large_weight_initializer()
再来看一下效果:
在这里插入图片描述
可以看到效果好了很多
如果隐藏层用100个神经元呢

net=network2.Network([784,100,10],cost=network2.CrossEntropyCost)

最终结果在测试集上accuracy达到97.92,比隐藏层30个神经元提高很多
如果调整优化一下参数,学习率=0.1,λ=5.0,只需要30个epoch,准确率就超过了98%,达到了98.04,加入regularization不仅减小了overfitting,还可以避免陷入局部最小点(local minimum),更容易重现实验结果
那么为什么Regularization可以减少overfitting?
假设一个简单的数据集
在这里插入图片描述
构建以上模型来模拟这个点的分布,最后拟合如下:
在这里插入图片描述
拟合的非常好,误差为0,但是这个方程最高竟然达到了9次!
我们用一个简单的方程来模拟它
在这里插入图片描述
y = 2 x y=2x y=2x
可以看到简单的y=2x也能拟合的不错,这两个模型哪个更好一些呢?
y=2x更简单,仍然很好的描述了数据,巧合的概率很小,所以我们更偏向于y=2x

在神经网络中:
Regularization网络鼓励更小的权重,小的权重的情况下,x的一些随机的变化不会对神经网络的模型造成太大的影响,所以更小的可能受到数据局部噪音的影响
Un-regularization神经网络,权重更大,容易通过神经网络模型比较大的改变来适应数据,更容易学习到局部数据的噪音
Regularization更倾向于学到更简单的一些模型
简单的模型不一定总是更好,要从大量数据实验中获得,目前添加regularization可以更好的泛化更多的从实验中得来,理论的支持还在研究之中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值