Keras代码实践|过拟合?别老是dropout,试试权重限制

点击上方“AI公园”,关注公众号


作者:Jason Brownlee

编译:ronghuaiyang

权值限制提供了一个方法减少了深度学习中的过拟合线性,提高了模型在新的数据上的泛化能力。

有多种类型的权值限制,比如最大值和单位向量归一化,有些需要配置超参数。

在这个指南中,你将会使用Keras的API对深度学习模型加入权值限制来减小过拟合。

完成了之个指南之后,你会知道:

  • 如何使用Keras的API进行向量归一化限制。

  • 如何使用Keras的API对MLP,CNN,RNN加入权值限制。

  • 如何对已有的模型加入权值限制减小过拟合。

我们开始!

指南概述

这个指南分为3个部分,分别是:

  1. Keras中的权值限制

  2. 层中的权值限制

  3. 权值限制案例学习

Keras中的权值限制

Keras的API支持权值限制。

权值限制需要逐层设定,但是在层中应用在每一个节点上。

使用权值限制,通常是对层的kernel_constraint参数进行设置,还有偏执权值bias_constraint。

通常情况下,权值限制不对偏执权值使用。

不同的向量归一化的方法也可以作为权值的限制,在keras.constraints模块中提供:

  • Maximum norm (max_norm), 强制让权值有一个幅值的上限。

  • Non-negative norm (non_neg),强制让权值变为正的。

  • Unit norm (unit_norm),前置让权值的幅度变为1。

  • Min-Max norm (min_max_norm),强制让权值的幅度在一个范围内。

举个例子,可以这样使用:

 
 
层的权值限制

权值的归一化可以用在Keras的大多数的层中。

在这部分,我们看一些常用的例子。

MLP权值限制

下面的这个例子在全连接层上设置了最大归一化权值限制。

 
 
CNN权值限制

下面这个例子为卷积层设置了最大归一化权值限制。

 
 
RNN权值限制

不同于上面的层,RNN网络可以让你对输入权值和偏执以及循环输入权值同时设置权值限制。

循环权值的限制通过设置recurrent_constraint参数来实现。

下面的例子在一个LSTM上设置了最大归一化权值限制。

 
 

现在,我们知道如何使用权值限制API了,我们看看实际的例子。

权值限制案例学习

在这部分,我们会展示如何使用权值限制来对MLP的简单二分类问题减小过拟合。

这个例子提供了一个模板,你可以用这个模板,在自己的分类和回归网络中使用权值限制。

二分类问题

我们使用一个标准的二分类问题来定义两个半圆形,一个类别是一个半圆。

每个观测数据有两个输入变量,使用同样的尺度,类别的输出要么是0要么是1,数据集叫做“moon”数据集,因为观测数据画出来的形状就是月亮的形状。

我们使用make_moons() 函数来生成这个问题的观测数据,我们对数据加一些噪声,通过随机数种子来生成,这样每次运行代码就是完全相同的了。

 
 

我们可以画出这个数据集,两个变量是x和y的坐标,类别用不同的颜色表示。

完整的生成数据集和画图的代码如下:

 
 

运行这个例子,构建了一个散点图,每个类别都显示了月亮形状的半圆形。我们可以发现由于噪声的存在,月亮的形状不是特别的明显。

640?wx_fmt=png

这是一个很好的测试问题,因为不能通过一条直线将两个类别分开,也就是不是线性可分的,需要用非线性的方法如神经网络来解决。

我们只生成了100个样本,对于神经网络来说数据太少了,在训练的时候提供了过拟合的机会,在测试数据集上会有较大的误差,是一个很好的使用正则化的案例。更进一步,这些样本有噪声,有机会让模型学到样本中的一些不能泛化的东西。

多层感知机过拟合

我们可以使用多层感知机来解决这个二分类的问题。

这个模型有一个隐藏层,可能实际的节点数会比需要的要多,提供了过拟合的机会。我们会训练这个模型的时间更长一点,确保模型过拟合。

我们定义模型之前,我们将数据集划分成训练集和测试集,训练集使用30个样本,测试集使用70个样本。

 
 

下面,我们定义这个模型。

隐含层使用了500个节点,使用了ReLu激活函数,输出层使用了sigmoid激活函数,用阿里预测类别的值,从0到1。

模型使用二分类的交叉熵损失进行优化,适用于二分类问题,优化器使用了Adam。

 
 

定义的模型对训练数据进行拟合,使用batch size为32,训练4000个epochs。

我们将测试数据集作为验证集。

 
 

我们在测试集上评估模型的性能,报告结果。

 
 

最后,我们画出每个epoch训练集合测试集的性能。

如果模型确实在训练集上过拟合了,我们希望训练集的准确率持续的提高,而测试集先上升,然后下降。

 
 

我们把所有的代码段连在一起,完整的代码如下:

 
 

运行这个例子,报告训练集和测试集的能力。

我们可以发现,模型在训练集上的表现比测试集要好,一个可能就是过拟合了。

给定了神经网络的不同的统计特性以及不同的训练算法,你的结果可能不一样,由于模型过拟合了,我们通常重复的在同样的数据集上训练的时候,得到的准确率也会不一样。

 
 

下面是模型在训练集合测试集上的准确率的连线图。

我们会发现,确实出现了模型过拟合的形状,测试集的准确率先上升,然后下降。

640?wx_fmt=png

对过拟合的MLP使用权值限制

我们更新一下这个例子,使用权值限制。

有几个不同的权值限制的方法可选,一个简单的限制就是将模型的权值的幅度归一化到1。

这个限制强制让所有的权值变小。

我们可以使用Keras中的unit_norm,这个限制可以加到第一个隐含层中:

 
 

我们也可以使用min_max_norm得到相同的结果,只要把最小和最大值都设为1:

 
 

我们无法使用maximum norm来得到相同的效果,这种方式只是设置了一个幅值的上界:

 
 

更新之后的完整的例子,使用了单位权值的限制:

 
 

运行这个例子,报告训练集和测试集的结果。

我们可以发现确实对权值加上约束可以提高性能,也不影响训练集的性能。

重新看一下训练和测试的准确率连线图,我们发现没有出现过拟合的现象。

模型的准确率在训练集合测试集上持续的提升。

640?wx_fmt=png

展开

这部分列出了一些对于这个指南的展开的一些探索:

  • Report Weight Norm. 计算网络中的权值的幅值,看看权值限制是不是确实让幅值变小了。

  • Constrain Output Layer. 对输出层也加上限制,对比一下结果。

  • Constrain Bias. 对偏执权值也加上限制,对比下结果。

  • Repeated Evaluation. 重复拟合和评估模型几次,报告模型准确率的均值和标准差。

总结

在这个指南中,我们使用了Keras的API,对深度学习网络模型加上了权值的限制。

你学到了:

  • 如何使用Keras的API进行向量归一化限制。

  • 如何使用Keras的API对MLP,CNN,RNN加入权值限制。

  • 如何对已有的模型加入权值限制减小过拟合。


640?wx_fmt=png

往期精彩回顾

1、最全的AI速查表|神经网络,机器学习,深度学习,大数据

2、深度学习论文阅读路线图

3、如何构建使用Python进行数据处理的肌肉记忆

4、Image-to-Image的论文汇总

5、我们从一阶段的物体检测器SSD,YOLOv3,FPN & Focal loss (RetinaNet)中学到了什么?

6、资源|10个机器学习和深度学习的必读免费课程

7、经验之谈|别再在CNN中使用Dropout了

8、我们从region based物体检测器 (Faster R-CNN, R-FCN, FPN)中能学到些什么?
9、非常好用的Python图像增强工具,适用多个框架
10、Kaggle竞赛介绍: Home Credit default risk(一)


本文可以任意转载,转载时请注明作者及原文地址

640?wx_fmt=jpeg

请长按或扫描二维码关注我们



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值