过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶
1、过拟合和欠拟合
过拟合:模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合
欠拟合:模型训练误差无法降低.
如何应对欠拟合和过拟合?在这里我们重点讨论两个因素:模型复杂度和训练数据集大小。
1.1.1、模型复杂度
为了解释模型复杂度,我们以多项式函数拟合为例。给定一个由标量数据特征 x 和对应的标量标签 y 组成的训练数据集,多项式函数拟合的目标是找一个 K 阶多项式函数
来近似y.在上式中,wk是模型的权重参数,b是偏差参数。与线性回归相同,多项式函数拟合也使用平方损失函数。特别地,一阶多项式函数拟合又叫线性函数拟合。
给定训练数据集,模型复杂度和误差之间的关系:
1.1.2、训练数据集过小
影响欠拟合和过拟合的另一个重要因素是训练数据集的大小。一般来说,如果训练数据集中样本数过少,特别是比模型参数数量(按元素计)更少时,过拟合更容易发生。此外,泛化误差不会随训练数据集里样本数量增加而增大。因此,在计算资源允许的范围之内,我们通常希望训练数据集大一些,特别是在模型复杂度较高时,例如层数较多的深度学习模型。
2、梯度消失、梯度爆炸
梯度消失和梯度下降原因
梯度消失和梯度爆炸两种情况产生的原因可以总结成2类原因:1.深层网络的结构;2.不合适的损失函数,比如Sigmoid函数。梯度爆炸一般出现在深层网络和权值初始化值太大的情况下。
1.深层网络角度:
如图是一个四层的全连接网络,假设每层网络激活后的输出为 fi(x),其中i为第i层,x为第i层的输入,也就是第i-1层的输出,f是激活函数,那么。我们直到反向传播算法基于梯度下降的思想,以目标负梯度方向对参数进行调整,参数的更新为 ,如果要更新第二隐藏层的权值信息,根据链式求导:
,其实类似 就是对激活函数进行求导。如果在此部分大于1,那么随着层数的增加,求出的梯度的更新将以指数形式增加,发生梯度爆炸。如果此部分小于1,那么随着层数的增加求出的梯度更新的信息会以指数形式衰减,发生梯度消失。
从深层网络角度来说,不同的层学习的速度差异很大,表现为网络中靠近输出的层学习的情况很好,靠近输入层的学习很慢,甚至即使训练了很久,前基层的权值和刚开始初始化的值差不多,因此梯度消失和梯度爆炸的根本原因在于反向传播算法的不足。
2.激活函数的角度
如果激活函数的选择不合适,比如使用Sigmoid,梯度消失会很明显。
下图为Logistic函数和Tanh函数的导数,Logistic导数最大的时候也只有0.25,其余时候远小于0.25,因此如果每层的激活函数都为Logistic函数的话,很容易导致梯度消失问题,Tanh函数的导数峰值是1那也仅仅在取值为0的时候,其余时候都是小于1,因此通过链式求导之后,Tanh函数也很容易导致梯度消失。
梯度消失、爆炸的解决方案
1.预训练和微调
预训练:无监督逐层训练,每次训练一层隐藏点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入。称为逐层预训练。在预训练完成后还要对整个网络进行微调。
2.梯度剪切、正则
梯度剪切又叫梯度截断,是防止梯度爆炸的一种方法,其思想是设置一个梯度剪切阈值,更新梯度的时候,如果梯度超过这个阈值,那就将其强制限制在这个范围之内。
梯度截断的方式有2种:
按值截断
按模截断
3、循环神经网络进阶
来源:CSDN
作者:Jorah
链接:https://blog.csdn.net/Jorah/article/details/104399533