Tensorflow中过拟合


一、引言
我们先用生活中的一个例子来比喻一下过拟合现象。说白了,就是机器学习模型过于自信,已经到了自负的阶段。那自负的坏处,大家也知道,就是在自己小的圈子里表现非凡,不过在现实的大圈子里却往往处处碰壁。所以在这个简介里,我们把自负和过拟合画上等号。

二、回归分类的过拟合


机器学习模型的自负又表现在那些方面呢?这里是一些数据,如果要你画一条线来描述这些数据,大多数人都会蓝线,这条线也是我们希望机器能学出来的一条用来总结这些数据的线。这时蓝线与数据的总误差可能是10。可有的时候,机器过于纠结这误差值,想把误差减到更小,来完成对这一批数据的学习使命,所以机器学到的是红线。红线经过了每一个数据点,误差会更小,可是误差越小就真的好么?我们的红线模型真的是太天真了。当我们拿这个模型运用在现实中的时候,红线的自负就体现出来了,我们在数据集上打上黄色加号数据。这时,之前误差大的蓝线误差基本保持不变,误差小的红线误差值突然增高,自负的红线再也骄傲不起来了,因为它不能成功的表达除了训练数据以外的其他数据。这就叫做过拟合(Overfiting)。

我们正式的给过拟合下定义:

当学习器把训练样本学得“太好”了的时候,很可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。这种现象在机器学习中称为“过拟合”。

三、过拟合解决办法

(1)增加数据量


增加数据量,大部分过拟合产生的原因是因为数据量太小。如果我们有成千上万的数据,红线也会慢慢被拉直,变得没有那么扭曲。

(2)运用正则化,L1,L2 Regularization


运用正则化。L1,L2 Regularization,这些方法适用于大多数的机器学习,包括神经网络。它们的做法大同小异,我们简化机器学习的关键公式y=wx。w为机器需要学习到的各种参数。在过拟合中,w的值往往变的特别大。为了不让w变得太大,我们对w做一种惩罚机制,这就是L1正则和L2正则。想具体了解L1正则和L2正则细节的同学,看我这篇文章:

https://blog.csdn.net/program_developer/article/details/79436657

(3)神经网络中的方法Dropout

还有一种专门用在神经网络的方法,叫做Dropout。在训练的时候,我们随机忽略掉一些神经元和神经元之间的连线,使这个神经网络变得“不完整”。用一个不完整的神经网络训练一次,到第二次在随机忽略另外一些,变成另一个不完整的神经网络。有了这些随机drop掉的规则,我们可以想象其实每次训练的时候,都让每一次预测结果都不依赖于其中某部分特定的神经元。

Dropout和L1、L2正则化区别:

L1、L2正则化惩罚的参数w是模型过于依赖的,也就是训练中参数w的数值很大。L1、L2会惩罚这些大的参数。

Dropout的做法是从根本上让神经网络没有机会过度依赖某些参数w。

观看视频笔记:https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/5-02-A-overfitting/

猜你喜欢

转载自blog.csdn.net/program_developer/article/details/80297310
今日推荐