1 过拟合问题

什么是过拟合?
一种扭曲的曲线,不停上下波动;
另一种说法,算法具有高方差,然后模型太过庞大,变量太多
千方百计的拟合训练集,导致无法泛化到新的样本中。

泛化: 一个假设模型应用到新样本的能力

什么是欠拟合?
算法没有很好地拟合训练集;
另一种说法,算法具有高偏差,就好像算法有一个很强的偏见。

处于两者中间:刚好合适

以线性回归举例(从左到右依次是欠拟合、刚好、过拟合):

过拟合产生原因:有过多的变量(特征变量),而只有非常少的训练数据

2 解决过拟合的方法

  1. 减少选取变量的数量
    1)人工检查变量清单,决定哪些更为重要,哪些应该保留,哪些应该舍弃
    2)模型选择算法,自动选择变量
    其中的缺点是舍弃了一部分变量,就相当于丢弃了关于问题的一些信息
  2. 正则化
    我们将保留所有的特征变量,但是减少量级或者参数 ==> 模型的参数就不会太大,而越小的参数说明模型越简单,就越不会产生过拟合现象。
  3. Dropout
  4. early stopping
  5. 扩增数据集 Data augmentation
  6. 去除异常值

2.1 为什么正则化能够减少过拟合

解释1:正则化的导向是网络的复杂度更低,从而表示对数据的拟合刚刚好;同时,过拟合的时候,拟合函数的系数往往非常大,如同第1节的三张图中的右图所示。

解释2:过拟合就是拟合函数需要顾忌到每一个训练样本点,最终形成的拟合函数波动很大。在某些很小的区间里,函数值的变化很剧烈。这就意味着函数在某些小区间里的导数值(绝对值)非常大,由于自变量值可大可小,所以只有系数足够大,才能保证导数值很大。而正则化是通过约束参数的范数使其不要太大,所以可以在一定程度上减少过拟合情况。这个解释是基于过拟合的图像而反推如何不要造成这种情况进行说明的。

2.2 为什么Dropout能够减少过拟合

Dropout:在每个batch中,通过忽略一部分的特征检测器,可以明显地减少过拟合现象。 这种方式可以减少特征检测器间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。

原理分析:可以看作一种模型平均,即把来自不同模型的估计或者预测通过一定的权重平均起来。 (1)Dropout是随机选择忽略隐层节点,在每个批次的训练过程,由于每次随机忽略的隐层节点都不同,这样就使每次训练的网络都是不一样的, 每次训练都可以单做一个“新”模型; (2)隐含节点都是以一定概率随机出现,因此不能保证每2隔隐含节点每次都同时出现,这样权值的更新不再依赖有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其他特定特征下才有效果的情况。
总结:Dropout是一个非常有效的神经网络模型平均方法,通过训练大量的不同的网络,来平均预测概率。不同的模型在不同的训练集上训练(每个epoch的训练数据都是随机选择),最后在每个模型用相同的权重来“融合”,思想有点类似于boosting算法。
(参考:https://blog.csdn.net/u010402786/article/details/46812677)

优点
1)类似取平均值的作用
2)减少神经元之间复杂的共适应关系

2.3 Normalization和Batch Normalization的原理、区别和作用?

共识:独立同分布的数据可以简化常规机器学习模型的训练、提升ML模型的预测能力

Normalization:数据的标准化(normalization)主要包括数据同趋化处理和无量纲化处理两个方面。数据同趋化处理主要解决不同性质数据问题,对不同性质指标直接加不能正确反映不同作用力的综合结果, 须先考虑改变不同指标数据性质,使所有指标对测评方案的作用力 同趋化, 再加总才能得出正确结果。 数据无量纲化主要处理数据的可比性。 标准化的目的是:
1)把特征的各个维度标准化到特定的区间
2)把有量纲表达式变为无量纲表达式

白化:目的是去除输入数据的冗余信息。假设训练数据是图像,由于图像中相邻像素之间具有很强的相关性,所以训练时输入时冗余的;白化的目的就是降低输入的冗余性。比PCA稍微高级一点。
输入数据集X, 经过白化处理后,新的数据X’满足两个性质:
1)特征之间相关性较低 -> 独立
2)所有特征具有相同的均值,方差 -> 同分布

DL的内部协方差漂移(ICS): 深度神经网络涉及很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这使得高层需要不断去重新适应底层的参数更新。
统计ML中一个经典假设是源空间和目标空间的数据分布是一致的。如果不一致,那么就会出现了新的机器学习问题,如transfer learning / domain adaptation等。 而协方差漂移就是分布不一致假设之下的一个分支问题,它是指源空间和目标空间的条件概率是一致的,但是其边缘概率不同。于是,对于NN的各层输出,由于它们经过了层内操作作用,其分布显然与各层对应的输入信号分布不同,而且差异会随着网络深度增大而增大,可是它们所能”指示“的样本标记(label)仍然是不变的,这便符合了协方差漂移的定义。

内部协方差漂移会导致什么问题呢
每个神经元的输入数据不再是”独立同分布“。会导致以下结果:
1)上层参数需要不断适应新的输入数据分布,降低了学习速度。
2)下层输入的变化可能趋向于变大或者变小,导致上层落入饱和区,使得学习过早停止。
3)每层的更新都会影响到其他层,因此每层的参数更新策略需要尽可能的谨慎。

Batch Normalization的基本思想与框架
由于ICS问题的存在,每一组神经元输入的向量 X 分布可能相差很大。要解决独立同分布的问题,”理论“正确的方法就是对每一层的数据都进行白化操作。这样做的代价太大。
退而求其次,进行了简化的白化操作。基本思想:在将X送给神经元之前,先对其做平移和伸缩变换,将X的分布规范化成在固定区间范围的标准分布。 最后得到的数据符合均值为b、 方差为 g^2 的分布。(这么做的目的是为了保证模型的表达能力不因为规范化而下降)
(这部分来自于 http://www.dataguru.cn/article-13031-1.html)

作用:就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布。

如何更好的理解BN呢?
为什么深度神经网络(DNN)随着网络深度加深,训练起来越困难 ,收敛越来越慢?
解决这个问题的方法有:ReLU激活函数,Residual Network等等

BN的基本思想:因为DNN在做非线性变化前的激活输入值随着网络深度加深或者在训练过程中, 其分布逐渐发生偏移或者变动,之所以训练收敛慢,一般是整体分布逐渐往非线性函数的取值区间的上下限两端靠近(对于sigmoid函数来说,意味着激活输入值是大的负值或者正值),这就会导致反向传播时低层NN的梯度消失,这是训练DNN收敛越来越慢的本质原因,而BN就是通过一定的规范化手段,把每层神经网络任意神经元的输入值的分布强行拉回到均值为0、方差为1的标准正态分布。(其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,继而让梯度变大, 避免梯度消失的问题产生,而且梯度变大意味着学习收敛速度快, 能大大加快训练速度)

总结:对于每个隐层神经元,把逐渐向非线性函数映射后向取值区间 极限饱和区靠拢的 输入分布 强制拉回到 均值为0、方差为1 的比较标准的正态分布, 使得非线性函数的输入值 落入到 对输入比较敏感的区域, 以此避免梯度消失的问题。
第二步, 为了不使得网络表达能力下降,每个神经元增加两个调节参数(scale和shift),这两个参数是通过训练来学习到的,用来对变换后的激活反变换,使得网络表达能力增强,即对变换后的激活进行如下的scale和shift操作。

优点
1)极大地提升了训练速度,收敛过程大大加快
2)增加分类效果,类似于Dropout的一种防止过拟合的正则表达方式
3)调参过程也简单多了:降低了初始化要求,而且可以使用比较大的学习率。

算法概述---过拟合和几种解决方法相关推荐

  1. 电子邮件乱码产生的主要原因及几种解决方法

    关于电子邮件乱码 --转摘自中国科学院,作者不详     本文主要介绍邮件乱码产生的主要原因及几种解决方法: E-mail编码标准 由于一个汉字是用两个扩展 ASCII码表示,对DOS.Windows ...

  2. c语言蓝屏代码大全,window_Win10系统出现蓝屏提示错误代码0x00000050两种解决方法,  刚刚升级Win10系统的一段 - phpStudy...

    Win10系统出现蓝屏提示错误代码0x00000050两种解决方法 刚刚升级Win10系统的一段时间,容易出现蓝屏的问题.导致蓝屏故障的原因各不相同,我们需要根据错误代码来执行正确的解决方法.比如,最 ...

  3. php取数组中连续数,PHP实现求连续子数组最大和问题2种解决方法

    本文实例讲述了PHP实现求连续子数组最大和问题2种解决方法.分享给大家供大家参考,具体如下: 问题描述 求子数组的最大和 题目描述: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整 ...

  4. mysql workbench kernelbase.dll_电脑出现kernelbase.dll错误的两种解决方法

    KernelBase.dll是Windows操作系统的重要文件,它为各种应用程序提供服务.如果电脑提示kernelbase.dll错误,这该怎么处理?大家可以用电脑自带的防火墙或者是第三方软件来进行故 ...

  5. SVN被锁定的几种解决方法

    SVN被锁定的几种解决方法 参考文章: (1)SVN被锁定的几种解决方法 (2)https://www.cnblogs.com/smiler/p/4567116.html 备忘一下.

  6. IOS - No provisioning profiles with a valid signing identity 一种解决方法

    IOS - No provisioning profiles with a valid signing identity 一种解决方法 参考文章: (1)IOS - No provisioning ...

  7. 关于盒子塌陷的几种解决方法

    关于盒子塌陷的几种解决方法 参考文章: (1)关于盒子塌陷的几种解决方法 (2)https://www.cnblogs.com/xiaozhu-zhu/p/11946896.html (3)https ...

  8. [Bat]UNC路径不支持的2种解决方法

    [Bat]UNC路径不支持的2种解决方法 参考文章: (1)[Bat]UNC路径不支持的2种解决方法 (2)https://www.cnblogs.com/masonlu/p/10276546.htm ...

  9. Json返回时间中出现乱码问题的两种解决方法

    Json返回时间中出现乱码问题的两种解决方法 参考文章: (1)Json返回时间中出现乱码问题的两种解决方法 (2)https://www.cnblogs.com/hanyinglong/archiv ...

最新文章

  1. SQL Server 多实例下的复制
  2. 客户端使用win共享文件出错解决方法
  3. 轻松掌握Ajax.net系列教程
  4. 微软的面试题(超变态但是很经典)
  5. hutool 获取某月最后一天_hutool定时任务
  6. Java——设计模式(简单工厂模式)
  7. amazon alexa_在Amazon Alexa上推出freeCodeCamp编码琐事测验
  8. python if break_python_if_else,while,break
  9. LiveCoding
  10. linux测试tensorflow-gpu 2.0是否安装成功
  11. python 代码命令大全-Linux命令大全
  12. 超赞!墙裂推荐一个 MySQL 自动化运维工具!
  13. 最新微信小程序影视源码,附带规则跟教程
  14. 6.STM32F407之HAL库——定时器中断
  15. The following method did not exist:com.google.gson.GsonBuilder.setLenient()
  16. 形式化方法 | Proof Engineering for Predicate Logic——Coq tatics 在谓词逻辑证明中的应用
  17. 我的世界基岩版红石教程(超简单)2
  18. 视频分享 500 G JAVA视频网盘分享(JEECG开源社区)
  19. 如何怎样在M1芯片Mac上安装PS?M1芯片安装Photoshop详细教学方法2021最新方法
  20. 常用CASE工具介绍 ZZ

热门文章

  1. 打扑克直播软件app开发:直播如何和游戏结合?
  2. python日期比较大小_js中怎么比较两个日期
  3. python按键退出循环_关于python:如何通过击键杀死while循环?
  4. kali自带字典用法
  5. 预见2022 | 客户体验的3大最新趋势
  6. 基于maxwell的6极36槽永磁同步电机(永磁直流无刷)模型,水冷
  7. Launcher3---Hotseat 应用图标
  8. Java笔记(韩顺平Java基础3-4章)
  9. 室内定位关键技术(indoor location)
  10. 汇编总结(4)——字符串操作和位操作