神经网络-overfitting(一)
来源:互联网 发布:宁波丰年渔具店淘宝店 编辑:程序博客网 时间:2024/06/05 03:49
一、过拟合
简单说一下过拟合1问题。
(一)、现象
在监督学习中overfit的表现为,随着训练的进行,训练集上面的表现(比如loss function或者accuracy)一直变好,但是在测试集上面的表现却是先变好然后会出现拐点,表现变差。
上图中的红线表示测试集的误差,蓝线表示训练集的误差。
(二)、原因
一般是由于模型比较复杂、参数太多,而训练数据相对有限,随着训练的进行,导致训练出的模型过度拟合了有限的训练数据集,从而失去了generalization的能力。
(三)、解决
为了避免过拟合,在训练模型的时候,可以使用一下方法
1. cross validation
2. dropout
3. 加大数据量
4. regularization
……
二、cross-validation
(一)、定义
通常在监督学习中,训练数据会分为两部分:70%的training set和30%的testing set,称之为“conventional validation”。
为了解决过拟合的问题,可以选择使用cross-validation的方法,将训练数据分为三部分:training set、testing set和validation set,他们的用途如下:
- training set:用于模型训练
- testing set:用于判断何时模型训练达到预期(比如何时overfit出现)
- validation set:评估训练出的模型的性能
每一轮训练(epoch)结束以后,使用训练出的模型计算validation set数据集的准确度,以此作为依据来判断。当validation set数据集上面的准确度达到饱和的时候,我们就停止训练。这种方法称为early stopping2。
(二)、解释
简单解释一下为什么validation可以减弱overfit的影响3:
假设我们只使用training set和testing set,使用testing set的结果去判断什么时候停止训练。那么,此时就有可能导致训练出来的模型对于testing set过拟合,因为模型的训练过程引入了testing set。也就是说最后训练出的模型是跟training set和testing set紧密相关的。所以后续使用testing set对模型做出的评估结果将会相对不客观。
如果我们引入validation set,当使用testing set模型的评估的时候,就会相对generalization,因为testing set数据集没有参与到模型训练的任何过程。
三、dropout
(一)、定义
对于一个mini-batch来讲,保持输入和输出层不变,在隐层随机删除一半的节点,然后使用修改后的网络进行前向和后向的计算,更新网络的权重,如下图:
下一个mini-batch继续随机删除一半的隐层节点,重复以上过程。
由于训练的时候使用了一半的隐层节点,所以在使用full net(使用全部隐层节点)的时候,每个隐层节点的权重将会除以2。
(二)、解释
为了提升网络的性能,我们可以选择训练大量的神经网络,然后进行average,但是训练多个神经网络将会非常耗时,所以引出了dropout这种方法4。
使用了dropout以后的神经网络,可以类比成多个神经网络的merge版本。因为每次dropout的节点不同,所以每次的网络的结构将会不同,不同网络可能对应于不同的过拟合,多个网络系统之间的结合将会减弱过拟合的影响,所谓兼听则明。
四、增加数据量
当资源有限的时候,可以通过对已有数据进行扩展获得更多的训练数据。比如语音数据加噪音,图片数据旋转等。
- https://en.wikipedia.org/wiki/Overfitting ↩
- https://en.wikipedia.org/wiki/Early_stopping ↩
- http://neuralnetworksanddeeplearning.com/chap3.html#overfitting_and_regularization ↩
- http://arxiv.org/pdf/1207.0580.pdf ↩
- 神经网络-overfitting(一)
- 神经网络-overfitting(二)
- 神经网络优化(overfitting 解决办法)
- 机器学习--神经网络算法系列--过拟合(overfitting)
- 过拟合(overfitting)
- Overfitting
- 机器学习(八)- Overfitting
- 14过拟合(Overfitting)
- 神经网络(一)
- 神经网络简介(一)
- 神经网络学习(一)
- 神经网络(一)
- 神经网络(一)
- 神经网络ANN(一)
- 卷积神经网络(一)
- 神经网络学习(一)
- 神经网络:表达(一)
- 神经网络:学习(一)
- 如何正确开始一个python项目(django为例)
- 小谈深度优先搜索
- Java Web监听器Listener
- GCD使用经验总结 -- @ShinePug
- uva1152
- 神经网络-overfitting(一)
- 排序
- Android 高仿QQ滑动弹出菜单标记已读、未读消息
- PHP向PHP传值
- 判断一个字符串中出现次数最多的字符,统计这个次数
- Objective-C内存管理第一弹:引用计数
- 变量定义概念汇总
- PHP语言开发Paypal支付demo的具体实现
- linux安装JDK