过拟合及改善方法
最近在学习深度学习相关内容,关于机器学习中过拟合的几种方法进行总结。
首先什么是过拟合,简而言之就是训练成功的模型对于训练集具有非常好的一个预测能力,但是对于测试集的数据其预测能力往往差强人意。
可以用以下几幅图比较形象地解释:
上图中的小圆点的待拟合的数据点,我们用M次多项式进行拟合的过程中,M值越大,用于拟合的参数越多
显然M=0时候,相当于y=c0,参数只有一个c0,是一条平行于x轴的直线;
M=1的时候, y=c1*x+c0,两个参数c1,c0,是一条直线;
M=1的时候, y=c2*x*x+c1*x+c0,有三个参数c2,c1,c0,拟合效果比较好;
同理,当M=9时候,有9个参数,此时生成的曲线经过了每一个样本点,但是,训练误差是0,就从训练数据拟合的角度来说,效果是最好的,但是这种训练结果对于测试数据的拟合效果将非常差,这时候就出现了过拟合,所以在模型或者参数选择的时候,不仅要考虑训练数据,还要考虑测试数据。
发生过拟合的原因主要有:
1、训练样本过少,或者样本数据噪声过大
2、参数过多,模型过于复杂
为了改善过拟合,可以采用以下方法:
1、数据扩增:
当数据本身有限的时候,应该对样本数据做一些处理从而生成新的样本数据,比如在CNN网络中,可以将图像利用各种滤波器进行滤波,做一个旋转,平移等变换,或者对图像进行切割等。
2、正则化方法
正则化就是在对目标函数进行优化的时候,在目标函数后面加上一个正则化项,正则化项一般是模型复杂度的一个单调递增函数,模型越复杂,该正则化值就会越大,正则化项一般可以取模型参数向量的范数。
3、dropout
在神经网络中,Dropout是通过修改神经网络本身结构来实现的,在训练开始时,随机得删除一些(可以设定为一半,也可以为1/3,1/4等)隐藏层神经元,即认为这些神经元不存在,同时保持输入层与输出层神经元的个数不变,然后按照BP学习算法对ANN中的参数进行学习更新。这样一次迭代更新便完成了。下一次迭代中,同样随机删除一些神经元,与上次不一样,做随机选择。这样一直进行瑕疵,直至训练结束。
4、交叉验证
交叉验证的基本思想就是重复地使用数据:把给定的数据进行划分,将划分的数据集组合为训练集和测试集,在此基础上反复地进行训练,测试以及模型选择。