过拟合、欠拟合、梯度消失及梯度爆炸的理解

目录:

        1,过拟合和欠拟合的定义

        2, 过拟合和欠拟合的解决方法

        3, 梯度消失和爆炸的定义

        4,梯度消失和爆炸的解决方法

 

1,过拟合和欠拟合的定义

         无论在机器学习还是深度学习建模当中都可能会遇到两种最常见结果,一种叫过拟合(over-fitting )另外一种叫欠拟合(under-fitting)。

                                    

    所谓过拟合(over-fitting)其实就是所建的机器学习模型或者是深度学习模型在训练样本中表现得过于优越,导致在验证数据集以及测试数据集中表现不佳。如上图所示,即在训练过程中,在训练数据集上,训练误差较低,但是在验证集上,误差损失较大。也可以观察到,随着模型复杂度升高,过拟合情况越来越严重。

    所谓欠拟合呢(under-fitting)?相对过拟合欠拟合还是比较容易理解。还是拿上图来说,可能模型复杂度不够,无法很好地拟合训练数据,导致训练和验证误差损失都比较大。

 

2,过拟合和欠拟合的解决方法

      过拟合:根据上图可以得到,随着模型复杂度--模型参数--增高,过拟合的情况越来越严重,因此减少参数可以有效缓解过拟合。首先可以在损失函数里添加限制权重参数过大的正则项,在损失函数下降的过程中,使得权重参数逐渐趋向0(L2)甚至等于0(L1)。landa控制限制过拟合的程度。

      其次,可以在训练过程中随机失活部分神经元(参数)--某些参数不参与训练--减少训练参数,如下图所示。

                            

      再者,我们可以扩充数据集。当数据集较少时,可以采用K折交叉训练。  所谓K折交叉训练,即是将总的数据集分成K部分,每次选(K-1)为训练集,剩余的一部分为测试集,充分利用数据集。 

      最后,由图1可知,可以采用提前停止训练来防止过拟合。 

欠拟合:其实个人觉得欠拟合基本上都会发生在训练刚开始的时候,经过不断训练之后欠拟合应该不怎么考虑了。但是如果真的还是存在的话,可以通过增加网络复杂度或者在模型中增加多点特征点,这些都是很好解决欠拟合的方法。而且在现实情况中,发生欠拟合的情况比较少。

3,梯度消失和爆炸的定义

       在介绍梯度消失以及爆炸之前,先简单说一说梯度消失和梯度爆炸的根源—–深度神经网络和反向传播。目前优化神经网络的方法都是基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化。这样做是有一定原因的,首先,深层网络由许多非线性层堆叠而来,每一层非线性层都可以视为是一个非线性函数 f(x)(非线性来自于非线性激活函数),因此整个深度网络可以视为是一个复合的非线性多元函数:

                                     

     我们最终的目的是希望这个多元函数可以很好的完成输入到输出之间的映射,假设不同的输入,输出的最优解是g(x) ,那么,优化深度网络就是为了寻找到合适的权值,满足Loss = L(g(x), F(x))取得极小值点,对于这种数学寻找最小值问题,采用梯度下降的方法再适合不过了。

                                     

    根据链式求导法则,可以知道梯度在从前往后传递的过程中,假如梯度小于1,则出现梯度消失,大于1,出现梯度爆炸。

4,梯度消失和爆炸的解决方法

    a:Batchnorm是深度学习发展以来提出的最重要的成果之一了,目前已经被广泛的应用到了各大网络中,具有加速网络收敛速度,提升训练稳定性的效果,Batchnorm本质上是解决反向传播过程中的梯度问题。batchnorm全名是batch normalization,简称BN,即批规范化,通过规范化操作将输出信号x规范化保证网络的稳定性。batchnorm就是通过对每一层的输出规范为均值和方差一致的方法,消除了xxx带来的放大缩小的影响,进而解决梯度消失和爆炸的问题,或者可以理解为BN将输出从饱和区拉倒了非饱和区。

   b:选择合适的激活函数。

   c:残差结构。残差结构可以有效地防止梯度消失。因为短路链接可以无损的回传梯度,即使卷积线路梯度特别小,也可以保证梯度正常回传。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章