深度学习中的过拟合问题及优化方法

        在机器学习以及深度学习的模型训练中,我们都希望模型能够在训练集的迭代训练下得到良好的现实数据拟合能力,为此,我们往往会增加模型的复杂度以以获得更好的训练效果。但在更多情况下我们的模型会出现过拟合的问题。所谓的过拟合就是模型的复杂度过高,拟合学习能力强,以至于把训练集的一些非一般性特征都学习到了模型里,实际表现就是模型在训练集的表现很好,但是在测试集上的表现较差,这就是我们所说的过拟合。从偏差和方差的角度来看,过拟合就是高方差的表现。

        解决过拟合的问题主要是通过正则化的方法,正则化方法主要包括参数范数惩罚即L1,L2正则化、数据增强、早停法、Dropout以及标签平滑法等。以下介绍相关知识。

一、代价函数的概念

        在学习L2、L2正则化之前需要明确损失函数、代价函数、目标函数的概念。

        损失函数:就是计算一个样本上的误差,即一个样本数据与模型输出的误差。

        代价函数:就是整个训练集上所有样本的误差均值。

        目标函数:通过训练得到的模型表达式。

损失函数与代价函数实际上是一致的,代价函数作用于整个训练集,是整个样本集的平均误差,对所有损失函数值的平均。代价函数用于训练得到最终的目标函数。

最常用的代价函数有二次代价函数:

深度学习中的过拟合问题及优化方法_第1张图片

交叉熵代价函数:

深度学习中的过拟合问题及优化方法_第2张图片                                              

二、L1、L2正则化

首先明确的一点是,L1、L2正则化都属于参数范式正则化,但是通过在损失函数中添加正则化项因子来实现的。他们的目的都是对模型的复杂度进行惩罚,来减小模型在训练数据集上的过拟合问题。 

1、L1正则化

设有一个深度学习模型的代价函数为:深度学习中的过拟合问题及优化方法_第3张图片

则在加入正则化项后变为:

其中λ为正则化参数,θ就是权重参数w,Lp(θ)即为加入的正则化函数,在L1正则化中,Lp(θ)=∑||W||。可以理解的是,在一般逻辑回归中,W是一个向量,而在神经网络中W是一个多维矩阵。

2、L2正则化

        与L1正则化相同,同样定义一个代价函数,只是此时的参数范数函数Lp(θ)变为了∑||W||^2。这是L2正则化与L1正则化根本的不同。

3、L1、L2正则化对反向求偏导的影响

1)使用L1正则化后的反向偏导变为如下形式:

由于在w=0时|w|没有导数,使用L1正则化会使得优化后的权重参数为0,也就是权重的稀疏化。所以通常不使用L1正则化,因为这会为梯度优化带来不必要的麻烦。

2)使用L2正则化后的反向偏导变为如下形式:

可以看到在求偏导后w乘以了一个比1小的数,这会使得权重下降加速,也就是权重衰减(weight decay)。

 因为L1正则和L2正则在对反向求偏导上的不同,通常成L1正则会使参数产生稀疏解,降低了参数的值总和,而L2正则是降低了参数的平方总和。至于这两种方法为什么会产生不同的结果可以参考这篇文章:https://blog.csdn.net/qq_26598445/article/details/82844393。

以上便是L1、L2正则的性质及其区别,在实践中更多的是使用L2正则,其效果也更好。

三、DropOut 优化过拟合

        由于参数范数方法在深度学习中表现不如机器学习,所以在深度学习中还需引入其它方法优化过拟合,如Dropout,数据增强早停法,标签平滑。

        概括地说Dropout就是随机地丢弃一些神经元包括神经元对应的连接,来避免过拟合。一般的做法是设置一个概率P,通过这个概率P来确定是否丢弃这个神经元。但是Dropout在训练集中和测试中的处理方法是不一样的。

1、训练阶段和测试阶段的Dropout

        首先对于一个神经网络F(x),引入一个丢弃函数d(·),这个函数在训练阶段和测试阶段的表达式是不同的:

                                        深度学习中的过拟合问题及优化方法_第4张图片

其中m是由概率P决定的一个0-1分布,根据神经元的个数产生一个概率为P的0-1分布,假若有5个神经元,概率P为0.6,则产生的m假设为{1,0,1,1,0},那么对应为0的第二个和第五个神经元就会被丢弃;部分神经元被丢弃的结果就是减少了神经元之间的依赖性,输出层的计算也无法过度依赖任何一个隐含层神经元,从而减少过拟合。而在测试阶段则是根据概率P把每个神经元的的输出都乘以这个概率P,一般不会丢弃神经元。

2、从集成学习的角度来理解Dropout

        Dropout不仅能减少过拟合,还能使模型的结果更准确。

        在机器学习中有一个概念是集成学习,集成学习的做法是通过对一个训练集建立多个模型,使用多个模型对训练集进行学习,最后通过投票法或其他方法选出准确度最高的模型,这样得到的模型往往比一般的单个模型训练要好。而Dropout的方法也有类似的特性,在不断的迭代训练过程中,神经网络不断丢弃一部分神经元,这样导致的结果是采用了原神经网络的一个子网络,而训练的结果则是从这多个子网络集成而来,这样往往会提高最终模型的准确度。

四、数据增强

        减少过拟合的一个思路就是增加样本的数量,但是增加样本数量往往需要耗费大量的精力,因此可以通过在原数据集的基础上进行数据增强,即对原数据集做特殊的变换以得到新的数据,从而扩大训练集减少过拟合。数据增强一般只应用于图像数据上,如对图像进行翻转,缩放,旋转,添加噪声等,数据增强在一般文字数据上的 应用较少。

五、早停法

        顾名思义就是更早地停止模型的训练。具体做法是准备一个验证集,在模型的训练过程中不断地使用验证集验证模型的训练结果,当模型在验证集上的错误率不再下降或者下降极其缓慢时,及时停止模型训练。从模型训练的角度来理解就是:假设在训练集阶段存在一个时刻是过拟合发生的时间点,那么在训练阶段的错误率在经过这个过拟合点后仍会继续下降因此导致了过拟合的发生,但是如果设定一个验证集,在这个过拟合点发生的时刻模型在验证集上的表现会发生一个拐点,即在过拟合点之前,验证集的错误率继续下降,但是在过拟合点之后验证集的错误率反而上升。所以只要发现在验证集上模型的错误率开始上升时就可以实施早停法停止对模型的训练。因此,要使用早停法需要训练和验证并行或交叉进行。

六、标签平滑

        概括地说,数据增强是通过对样本加入随机噪声来避免过拟合,而标签平滑则是通过给样本的输出引入噪声来避免过拟合。

七、参考资料

https://blog.csdn.net/m0_37870649/article/details/79781779

 https://blog.csdn.net/ch18328071580/article/details/96096402

https://www.cnblogs.com/Luv-GEM/p/10699697.html

 https://www.cnblogs.com/skyfsm/p/8456968.html

https://blog.csdn.net/qq_26598445/article/details/82844393

        

        

你可能感兴趣的:(神经网络学习,神经网络,深度学习)