深度网络的过拟合问题讨论

导读:本篇文章讲解 深度网络的过拟合问题讨论,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1.问题背景

最近在做深度学习实验的时候,遇到了一个棘手的问题,就是大家熟知的“过拟合”,直观的表现在图中。分析来说就是在拟合训练集的时候可以很好的实现深层网络,损失小,准确率高(我这里可以达到99.99%)。然而,测试集的损失非常大,准确性在相对较低的范围内波动(在我的情况下为70%-80%)。并非如文中所述,测试集的损失随着迭代次数的增加而减少,而是精度随着迭代次数的增加而增加。

深度网络的过拟合问题讨论

如果你看不出上图有什么问题,我就放一张理想状态下的结果图来对比一下(如下图粗线所示),不过大概意思在那里。随着迭代次数的增加,训练集和测试集的精度应该会上升。我们可以容忍测试集的精度没有训练集的精度高。毕竟有拟合误差,但是和我上图做的结果一样,肯定是“过拟合”。

深度网络的过拟合问题讨论

白话文里的“过拟合”是指老师给你的题你都可以做,考试时改变模式你会犯难。好了,老师给的题相当于我们的训练数据,考试的题相当于考试数据。“过拟合”是指深度网络非常好地拟合训练数据。

但是有点太好了。训练数据100%好用,但是测试数据很疯狂,网上训练没用。训练集已经是监督学习了,再拟合也没用。功能体现如下图

深度网络的过拟合问题讨论

2.网络结构介绍

我的实验中使用的深层网络结构原型是完全自愿的网络,在参考文献中也被称为U-Net。简而言之,它是用于图像分割的深度网络。原理图如下:

深度网络的过拟合问题讨论

用Keras实现的代码是:

深度网络的过拟合问题讨论

3.问题分析

当时的LeNet-5在手写识别方面有很大的闪光点,但是当LeNet-5应用到其他数据集时,就出现了很多问题。此后,学者们开始了疯狂的理论和实践探索。“过拟合”问题是深度学习中特别重要的一个问题。这是一个老生常谈的问题,有许多解决方案可供我选择。

1.添加滴水层

2.检查数据集是否太小(数据扩充)

3.运用迁移学习的思想

4.用小技巧调整参数。

降低学习率(学习率)

减少每次反向传播的训练样本数(批量)

5.尝试另一个优化器(优化器)

6.Keras的回调函数EarlyStopping()

评价:我觉得第一种更可行,因为“教科书”确实说退学是专门用来处理“过拟合”问题的。

至于数据集的大小,这也是过拟合的原因。太小的话,容易超配。那么一个数据集有多大就够了?反正我肯定够了。我的深度网络输入图像是369,468,68.80像素,双通道输入,总大小19.5GB。

这个数据量可以说是相当可观的,所以对于我来说,第二个可能不适用。然后,如果要扩展数据集,就需要使用医学图像中非常常见的手段——数据增强(Data Exconsion),包括平移、旋转、拉伸、扭曲等,来创建新的数据,以增加数据量。

第三种是深度学习的有效方法。英文名是微调,就是用已有的训练好的网络参数作为初始化,在此基础上继续训练。

原来的网络参数经常可以在很多论文和github上找到。这是一个在大型图像数据集中训练的网络。根据图形和图像的“语义”相似性(不知道怎么形容,就是觉得世界上的图片有些相似性,就像人类一样,每个人看起来都不一样,但是你不要把人和其他动物混在一起。这是一个宏观的、抽象的相似性),这个网络,因为时间的关系,我还没有采用这个。

第四种是比较不可理解的参数,这几乎是机器学习的主要课题。人们说“智力和劳动力一样多”,这个参数真的需要“经验”。知乎上有一篇很精彩的帖子:你有什么深度学习的经历(rnn,cnn)?

不好意思,第五个是试错。。。有许多优化器可供选择。全部尝试一下,看看哪里做的好。听起来有点疯狂。第六个方法是一个叫EarlyStopping的小函数,代码如下

功能是监控每次迭代的指标,比如这里监控val_Loss(测试集的损失)。随着迭代次数的增加,当val_loss不再变化较大时,可以在过拟合前终止并阻塞训练。这个策略也叫“n中无改善”,其中n是Epoch的个数。

遗憾的是,以上六种方案,在我试用后,并没有很好地解决“过拟合”的问题。

4.正则化方法

正则化方法是指在优化目标函数或代价函数时,在目标函数或代价函数后加入正则项,一般包括L1正则和L2正则。这个很理论,涉及到一些公式。

深度网络的过拟合问题讨论

我在研究这部分的时候,觉得纯粹是理论上的。当时我从没想过自己真的会用。看来我现在必须试试了。

深度网络的过拟合问题讨论

要修改Keras中这部分Objectives函数的代码,可以参考这部分,这部分包括几个成本函数,成本函数可以自己写。根据这个博客:Keras Learning短文08,一个基于antano的深度学习框架,被正则化(规格化),过拟合的有效解决方案是添加规则项。

5.问题解决

最终过拟合现象基本得到控制。总的来说,L1/L2标准化真的很牛逼,这也体现在学术论文上:

深度网络的过拟合问题讨论

网络调整如下:

深度网络的过拟合问题讨论

配置:)

1.滴水层(0.3)

2.全连接层的L2归一化

3.优化器(adadelta)

4.学习率(1e-9)

取得了满意的效果。不仅训练集的Loss在减少,测试集的Acc也在增加,整体网络学习性能比以前更好。

深度网络的过拟合问题讨论

深度网络的过拟合问题讨论

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/102784.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!