对于深度学习或机器学习模型而言,我们不仅要求它对训练数据集有很好的拟合(训练误差),同时也希望它可以对未知数据集(测试集)有很好的拟合结果(泛化能力),所产生的测试误差被称为泛化误差。度量泛化能力的好坏,最直观的表现就是模型的过拟合(overfitting)和欠拟合(underfitting)。过拟合和欠拟合是用于描述模型在训练过程中的两种状态。一般来说,训练过程会是如下所示的一个曲线图。

训练刚开始的时候,模型还在学习过程中,处于欠拟合区域。随着训练的进行,训练误差和测试误差都下降。在到达一个临界点之后,训练集的误差下降,测试集的误差上升了,这个时候就进入了过拟合区域——由于训练出来的网络过度拟合了训练集,对训练集以外的数据却不work。

一、什么是欠拟合?

欠拟合是指模型不能在训练集上获得足够低的误差。换句换说,就是模型复杂度低,模型在训练集上就表现很差,没法学习到数据背后的规律。

如何解决欠拟合?

欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。但是如果真的还是存在的话,可以通过增加网络复杂度或者在模型中增加特征,这些都是很好解决欠拟合的方法。

二、什么是过拟合?

过拟合是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。模型对训练集"死记硬背"(记住了不适用于测试集的训练集性质或特点),没有理解数据背后的规律,泛化能力差

为什么会出现过拟合现象?

造成原因主要有以下几种:
1、训练数据集样本单一,样本不足。如果训练样本只有负样本,然后那生成的模型去预测正样本,这肯定预测不准。所以训练样本要尽可能的全面,覆盖所有的数据类型。
2、训练数据中噪声干扰过大。噪声指训练数据中的干扰数据。过多的干扰会导致记录了很多噪声特征,忽略了真实输入和输出之间的关系。
3、模型过于复杂。模型太复杂,已经能够“死记硬背”记下了训练数据的信息,但是遇到没有见过的数据的时候不能够变通,泛化能力太差。我们希望模型对不同的模型都有稳定的输出。模型太复杂是过拟合的重要因素。

三、如何防止过拟合?

要想解决过拟合问题,就要显著减少测试误差而不过度增加训练误差,从而提高模型的泛化能力。我们可以使用正则化(Regularization)方法。那什么是正则化呢?正则化是指修改学习算法,使其降低泛化误差而非训练误差

常用的正则化方法根据具体的使用策略不同可分为:(1)直接提供正则化约束的参数正则化方法,如L1/L2正则化;(2)通过工程上的技巧来实现更低泛化误差的方法,如提前终止(Early stopping)和Dropout;(3)不直接提供约束的隐式正则化方法,如数据增强等。

1. 获取和使用更多的数据(数据集增强)——解决过拟合的根本性方法

让机器学习或深度学习模型泛化能力更好的办法就是使用更多的数据进行训练。但是,在实践中,我们拥有的数据量是有限的。解决这个问题的一种方法就是创建“假数据”并添加到训练集中——数据集增强。通过增加训练集的额外副本来增加训练集的大小,进而改进模型的泛化能力。

我们以图像数据集举例,能够做:旋转图像、缩放图像、随机裁剪、加入随机噪声、平移、镜像等方式来增加数据量。另外补充一句,在物体分类问题里,CNN在图像识别的过程中有强大的“不变性”规则,即待辨识的物体在图像中的形状、姿势、位置、图像整体明暗度都不会影响分类结果。我们就可以通过图像平移、翻转、缩放、切割等手段将数据库成倍扩充。

2. 采用合适的模型(控制模型的复杂度)

过于复杂的模型会带来过拟合问题。对于模型的设计,目前公认的一个深度学习规律"deeper is better"。国内外各种大牛通过实验和竞赛发现,对于CNN来说,层数越多效果越好,但是也更容易产生过拟合,并且计算所耗费的时间也越长。

根据奥卡姆剃刀法则:在同样能够解释已知观测现象的假设中,我们应该挑选“最简单”的那一个。对于模型的设计而言,我们应该选择简单、合适的模型解决复杂的问题

3. 降低特征的数量

对于一些特征工程而言,可以降低特征的数量——删除冗余特征,人工选择保留哪些特征。这种方法也可以解决过拟合问题。

4. L1 / L2 正则化

(1) L1 正则化

在原始的损失函数后面加上一个L1正则化项,即全部权重

的绝对值的和,再乘以λ/n。则损失函数变为:

对应的梯度(导数):

其中

只是简单地取
各个元素地正负号。

梯度下降时权重

更新变为:

时,|w|是不可导的。所以我们仅仅能依照原始的未经正则化的方法去更新w。

时,sgn(
)>0, 则梯度下降时更新后的
变小。

时,sgn(
)>0, 则梯度下降时更新后的
变大。换句换说,

L1正则化使得权重

往0靠,使网络中的权重尽可能为0,也就相当于减小了网络复杂度,防止过拟合。

这也就是L1正则化会产生更稀疏(sparse)的解的原因。此处稀疏性指的是最优值中的一些参数为0。L1正则化的稀疏性质已经被广泛地应用于特征选择机制,从可用的特征子集中选择出有意义的特征。

(2) L2 正则化

L2正则化通常被称为权重衰减(weight decay),就是在原始的损失函数后面再加上一个L2正则化项,即全部权重

的平方和,再乘以λ/2n。则损失函数变为:

对应的梯度(导数):

能够发现L2正则化项对偏置 b 的更新没有影响,可是对于权重

的更新有影响:

这里的

都是大于0的, 所以
小于1。因此在梯度下降过程中,权重
将逐渐减小,趋向于0但不等于0。这也就是

权重衰减(weight decay)的由来。

L2正则化起到使得权重参数

变小的效果,为什么能防止过拟合呢?

因为更小的权重参数

意味着模型的复杂度更低,对训练数据的拟合刚刚好,不会过分拟合训练数据,从而提高模型的泛化能力。

5. Dropout

Dropout是在训练网络时用的一种技巧(trike),相当于在隐藏单元增加了噪声。Dropout 指的是在训练过程中每次按一定的概率(比如50%)随机地“删除”一部分隐藏单元(神经元)。所谓的“删除”不是真正意义上的删除,其实就是将该部分神经元的激活函数设为0(激活函数的输出为0),让这些神经元不计算而已。

Dropout为什么有助于防止过拟合呢?

(a)在训练过程中会产生不同的训练模型,不同的训练模型也会产生不同的的计算结果。随着训练的不断进行,计算结果会在一个范围内波动,但是均值却不会有很大变化,因此可以把最终的训练结果看作是不同模型的平均输出。

(b)它消除或者减弱了神经元节点间的联合,降低了网络对单个神经元的依赖,从而增强了泛化能力。

6. Early stopping(提前终止)

对模型进行训练的过程即是对模型的参数进行学习更新的过程,这个参数学习的过程往往会用到一些迭代方法,如梯度下降(Gradient descent)。Early stopping是一种迭代次数截断的方法来防止过拟合的方法,即在模型对训练数据集迭代收敛之前停止迭代来防止过拟合

为了获得性能良好的神经网络,训练过程中可能会经过很多次epoch(遍历整个数据集的次数,一次为一个epoch)。如果epoch数量太少,网络有可能发生欠拟合;如果epoch数量太多,则有可能发生过拟合。Early stopping旨在解决epoch数量需要手动设置的问题。具体做法:每个epoch(或每N个epoch)结束后,在验证集上获取测试结果,随着epoch的增加,如果在验证集上发现测试误差上升,则停止训练,将停止之后的权重作为网络的最终参数。

为什么能防止过拟合?当还未在神经网络运行太多迭代过程的时候,w参数接近于0,因为随机初始化w值的时候,它的值是较小的随机值。当你开始迭代过程,w的值会变得越来越大。到后面时,w的值已经变得十分大了。所以early stopping要做的就是在中间点停止迭代过程。我们将会得到一个中等大小的w参数,会得到与L2正则化相似的结果,选择了w参数较小的神经网络。

Early Stopping缺点:没有采取不同的方式来解决优化损失函数和过拟合这两个问题,而是用一种方法同时解决两个问题 ,结果就是要考虑的东西变得更复杂。之所以不能独立地处理,因为如果你停止了优化损失函数,你可能会发现损失函数的值不够小,同时你又不希望过拟合。

误差函数拟合优缺点_欠拟合、过拟合及如何防止过拟合相关推荐

  1. 误差函数拟合优缺点_机器学习算法优缺点对比及选择(汇总篇)

    本文的目的,是务实.简洁地盘点一番当前机器学习算法.文中内容结合了个人在查阅资料过程中收集到的前人总结,同时添加了部分自身总结,在这里,依据实际使用中的经验,将对此类模型优缺点及选择详加讨论 主要回顾 ...

  2. 什么是欠拟合现象_欠拟合和过拟合是什么?解决方法总结

    欠拟合与过拟合 欠拟合是指模型在训练集.验证集和测试集上均表现不佳的情况: 过拟合是指模型在训练集上表现很好,到了验证和测试阶段就大不如意了,即模型的泛化能力很差. 欠拟合和过拟合一直是机器学习训练中 ...

  3. python 最小二乘法三维坐标拟合平面_【MQ笔记】超简单的最小二乘法拟合平面(Python)...

    这篇笔记中,我主要通过解决"由离散点拟合平面"这个小问题,学习了超定方程最小二乘解的求解方法.在这里我整理了两种求解思路用以交流. 直接求解超定方程. 我们知道,对于一个平面,其方 ...

  4. 什么是欠拟合现象_深度学习中过拟合、欠拟合问题及解决方案

    在进行数据挖掘或者机器学习模型建立的时候,因为在统计学习中,假设数据满足独立同分布(i.i.d,independently and identically distributed),即当前已产生的数据 ...

  5. 什么是欠拟合现象_过拟合与欠拟合问题

    过拟合(overfitting)与欠拟合(underfitting)是统计学中的一组现象.过拟合是在统计模型中,由于使用的参数过多而导致模型对观测数据(训练数据)过度拟合,以至于用该模型来预测其他测试 ...

  6. 误差函数拟合优缺点_GELU的两个初等函数近似是怎么来的?

    ©PaperWeekly 原创 · 作者|苏剑林 单位|追一科技 研究方向|NLP.神经网络 GELU,全称为 Gaussian Error Linear Unit,也算是 RELU 的变种,是一个非 ...

  7. 高斯拟合原理_数据分析中的插值与拟合(2) —— 拟合

    引言 前文介绍了通过插值来估计未知数据的方法. 蒙特遇见卡罗:数据分析中的插值与拟合(1) -- 插值​zhuanlan.zhihu.com 拟合的方法应用非常广泛,数据处理.参数估计和统计学习等:可 ...

  8. 3D点云处理:拟合平面_优化后的最小二乘法

    文章目录 0. 拟合效果 1. 论文:一种稳健的点云数据平面拟合方法 1.1 优化过程 2. 参考 关联内容: 3D点云处理:拟合平面_最小二乘法_1 0. 拟合效果 左(拉格朗日乘子法求解)中(SV ...

  9. 过拟合(Over-fitting) 和 欠拟合(Under-fitting)

    初学机器学习和深度学习的时候,我们常常会遇到 "过拟合" 和 ''欠拟合" 这两个看似不明所以的数学概念,今天我就专门讲一讲它们具体是怎么一回事. 拟合(fitting) ...

最新文章

  1. Objective-C 学习笔记15 NSProcessInfo
  2. Java 泛型背后的原理是什么?
  3. INI文件读写--VC6.0
  4. python多线程实现方式_python中实现多线程有几种方式?
  5. centos配置ipv6地址
  6. Vue.js项目去除url中的#/ - 解决篇
  7. 几个预防并发搞垮下游服务的方法
  8. python字典和JSON格式的转换
  9. oracle空格分割字符串,Oracle字符串分割的处理
  10. C++对象产生和销毁的顺序
  11. P4475 巧克力王国(KDTree)
  12. 【企业信息化】信息化与企业信息化管理的相关概念及关系
  13. 解决:如何利用ssh命令,免密登录远程服务器
  14. Android仿苹果电量显示
  15. 【常识】气体单位%Vol、ppm、%LEL
  16. poi设置单元格下拉下表
  17. 基于Patachmatch的stereo matching笔记(三):《PatchmatchNet》
  18. python导入文件方法大全
  19. 12. 综合练习 - 相亲APP
  20. 纺织企业举步维艰,小微纺织企业该如何做?

热门文章

  1. NVIDIA Parallel Nsight
  2. Python数据处理 PCA/ZCA 白化(UFLDL教程:Exercise:PCA_in_2DPCA_and_Whitening)
  3. 前端 -- jQuery
  4. 加载执行预编译的Sql :prepareStatement
  5. Kafka Broker常用配置详解
  6. Exchange系列之exchange2003sp2部署
  7. 计算机表格按性别排列,Excel表格性别数据-Excel 按性别(男女)排序
  8. python中superclass是什么_Python中super()函数简介及用法分享
  9. 教育启蒙赛道、亿级异构数据不停服平滑迁移方案和实践
  10. CVX学习笔记(转载