一文解决机器学习中的过拟合与欠拟合问题(正则化,数据增强,Dropout,提前终止)

生活中的过拟合与欠拟合现象

过拟合与欠拟合的概念

解决过拟合与欠拟合问题的四大金刚

    正则化

    数据增强

    Dropout

   提前终止训练

机器学习的核心任务就是‘使用算法模型解析数据,从中学习,然后对世界上的某件事情作出决定或者预测’。对机器学习的模型来说,最糟糕的情况就是训练的模型不适用。通常造成训练模型不适用的原因有过拟合或者欠拟合,本文将就过拟合与欠拟合的概念及如何解决过拟合与欠拟合进行一个简单的介绍。

生活中的过拟合与欠拟合现象

现实生活中,大家常常凭借自己的经验去判断事情,但是效果如何,就真的是见仁见智了。

小明今年30岁,交了人生第一个女朋友,作为单身30年资深老司机,小明非常珍惜这次来之不易的缘分。于是小明在交往过程中充分发扬自己上班时候的专业精神,把女神每天的一举一动都记录了下来,并且做了标注。
在这里插入图片描述

小明把女神的行为按照心情好和心情不好做了分类,心想着只要参照这个就能随时了解女神的心情,然后给予及时的照顾,这感情稳了。

但是俗话说得好,女人心海底针,这一天女神心情有点低落,于是决定发扬剁手精神转移一下注意力,在一番疯狂采购之后,女神给小明发了一条短信,问小明晚上是否一起吃饭。小明看到账户刷卡记录后翻了一下女神心情小册子,判断女神今天心情不错,考虑到自己还有一些工作没有完成,果断拒绝了晚上吃饭的邀请。

然后小明就没有然后了。。。

上述场景是一个典型的过拟合的例子,因为一次女神高兴网购而把网购这件事情都
归类为女神高兴的行为显然是不合适的。

那么生活中欠拟合的行为有没有呢?答案是显然的,而且还很多。

老李是一个房产经纪人,由于碰到了2020年开年天崩开局,前四个月老李一个客户也没有遇到过。话说到了五月份,情况有所好转,来看房的人多了,老李一下子信心满满,觉得这是一波报复性消费浪潮,肯定能卖出去几套房子。为了在领导面前有一个突出表现,老李主动请缨拿下年度绩效目标任务,大有一种不成功便成仁的革命精神。

为了尽早拿下开门红的一单,老李做了一份统计表,让意向客户填写。
在这里插入图片描述

老李把客户的信息整理到一起,发现很多来看房子的人都是高收入群体,心里乐开了花,仿佛已经拿到了年终奖。结果在开盘的时候,在老李这填购房意愿的人一个都没来。

老李第二天没有去上班。

老李在之后的几天都没有去上班。

后来老李搞起了‘地摊经济’。

老李的情况就是典型的欠拟合案例,老李忽略了购房过程中的许多重要因素,
仅仅依赖于购房者的收入判断购房者是否有真实买房意愿及买房能力,
这样显然是不合适的。


过拟合与欠拟合的概念

所谓过拟合现象就是指在模型训练的过程中,数据拟合非常好,损失函数几乎可以忽略不计,但是在测试数据时,效果急剧下降,造成这种现象的原因是模型过分依赖训练数据。

欠拟合则正好相反,欠拟合的模型在训练过程中就由于没有很好的掌握数据的特征导致无法准确描述训练样本。因此,过拟合与欠拟合都是机器学习需要避免的问题。下图分别是是回归问题和分类问题中欠拟合、正常拟合与过常拟合的对比。
在这里插入图片描述
在这里插入图片描述

解决过拟合与欠拟合问题的四大金刚

要想解决机器学习模型的过拟合问题,首先要了解产生过拟合的原因,然后才能对症下药,有效解决过拟合问题。
在这里插入图片描述
过拟合产生的原因通常是训练数据不够多,或者是对数据集进行过度训练造成的。因此解决过拟合问题还是需要从训练数据入手。可以采用的方法有正则化、数据增强、Dropout和训练提前停止等。

正则化

正则化是一种减小测试误差的行为,通常用于防止模型的过拟合问题,那么正则化是如何做到防止模型过拟合的呢?

首先来看一下模型过拟合的条件,之前说过机器学习的目的是为了建立一个能够很好的描述真实世界的数学模型,那么如何判断这个数学模型的好快,通常看这个模型的损失函数。损失函数的通用形式为
在这里插入图片描述


通常认为,当损失函数越小,则模型的计算结果与实际情况越接近。理论上,当损失函数为0时,预测结果与实际情况完全一致,但是此时模型的过拟合现象显然已经发生,模型不再具备任何泛化能力,即对于输入的新数据,模型将无法做出正确的判断。

既然知道了过拟合发生的数学原因,解决的办法就是给模型增加一个约束,限制最终参数的取值范围,让原有损失函数无法取到0,因此就出现了正则化的方法,即在上述公式的最后人为添加一个约束。
在这里插入图片描述


这样做的结果是让权重的取值偏小,最终构造出的模型所有参数都较原来小。那么问题来了,为什么要让权重偏小呢?

通常认为,权重取值较小的参数构造的模型,适应不同数据集的能力较强,即泛化性能较好。设想一下对于一个线性回归模型而言,若参数取值很大,那么只要数据有轻微偏移,结果都会发生巨大的变化,但是如果权重足够小,那么即使数据出现了抖动,结果也会在一个容忍区间内,即模型的抗扰动能力强。

这里要注意的是,对于正则化分正则化和正则化,前者是减少参数数量,后者则是降低参数取值,这里有区别,具体的情况下面会详细说明。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据增强

正则化这一节主要阐述了如何解决过拟合的问题,但是在实际的机器学习应用中,欠拟合的现象也常会发生。这是由于在实际工作当中,获取训练数据的成本很高,与海量现实信息相比,人们掌握的数据量往往少的可怜。
在这里插入图片描述
那么有没有办法解决数据量不够的问题呢?显然时有的,方法就是数据增强。所谓数据增强,就是通过一些技术手段,使原来不那么丰富的数据变得丰富起来。
在这里插入图片描述


总体来说,数据增强的作用有两点:

(1)增加训练数据量,提高模型的泛化能力;

(2)增加噪声数据,提升模型的鲁棒性。

以图像数据为例,数据增强的方法有如下几种:

(1)图像翻转:数据翻转是一种常用的数据增强方法,这种方法也可以看作对数据做镜像处理,顾名思义这种方法是做一种类似于镜面的翻折。
在这里插入图片描述
(2)图像旋转:旋转就是顺时针或者逆时针的旋转,旋转的时候尽量旋转 90 - 180 度否则会出现尺度的问题。
在这里插入图片描述
(3)图像缩放:图像可以被放大或缩小。放大时,放大后的图像尺寸会大于原始尺寸。大多数图像处理架构会按照原始尺寸对放大后的图像进行裁切而图像缩小会减小图像尺寸,这使我们不得不对图像边界之外的东西做出假设。
在这里插入图片描述
(4)图像剪裁:这种方法也可以叫做裁剪,效果甚至可以看作是局部随机放大,图像剪裁随机从图像中选择一部分,然后将这部分图像裁剪出来,再调整为原图像的大小。
在这里插入图片描述
(5)图像平移:将图像沿着 x 或者 y 方向 (或者两个方向) 移动。我们在平移的时候需对背景进行假设,这一点类似于图像缩放,需要对原来没有的区域进行填充,比如说假设为黑色等等,因为平移的时候有一部分图像是空的,由于图片中的物体可能出现在任意的位置,所以说平移增强方法十分有用。
在这里插入图片描述
(6)添加噪声:过拟合通常发生在神经网络学习高频特征的时候 (因为低频特征神经网络很容易就可以学到,而高频特征只有在最后的时候才可以学到) 而这些特征对于神经网络所做的任务可能没有帮助,而且会对低频特征产生影响,为了消除高频特征我们随机加入噪声数据来消除这些特征。
在这里插入图片描述


也许有人会问,添加噪声为什么可以提高模型的鲁棒性?

这一点还是要从模型的过拟合说起,当模型参数过多时,模型在训练过程中会过分依赖参数,最终由于过拟合问题导致训练结果非常好,泛化性却非常差。解决过度依赖参数的最直接想法就是降低对参数的依赖,通过向模型注入噪声,使得较弱的参数对模型判断不在产生影响,迫使模型只学习更强大的特征参数从而降低过拟合的风险,前面讲到的正则化的方法就是一种向模型注入噪声的手段。
在这里插入图片描述


Dropout

关于Dropout这一部分内容,我之前的一篇博客深度学习:Dropout如何解决过拟合写的非常详细,欢迎大家移步一看

提前终止训练

关于提前终止训练,这两天我会单开一个博客说明这一部分内容,后面会把链接添加进来。