过拟合、欠拟合及解决方案知识点总结
区分两种误差
训练误差为训练数据集(training data)上的误差; 泛化误差为模型在任意一个测试数据样本上表现的误差的期望(常通过测试数据(test data)集上的误差来近似)。使用损失函数(loss function)来计算两种误差(e.g. 平方损失函数、交叉熵)。机器学习的要重视降低泛化误差。
选择模型
把训练数据集分为真正的训练集和预留的验证集(validation set)。通过验证集来选择模型。此方法的改进方法为K折交叉验证(K-fold cross-validation)。
K折交叉验证:
- 把训练数据集分割为K个部众合的子数据集
- 做K次模型训练和验证。每次使用一个子数据集验证模型,其余K-1个子数据集训练模型。每次用来验证模型的子数据集不同。
- 对K次训练误差和验证误差分别求平均。
过拟合&欠拟合
欠拟合(underfitting)是模型无法得到较低的训练误差。过拟合为模型训练误差远低于测试集上的误差。影响拟合程度的两个因素为模型复杂度和训练数据集大小
过拟合解决方案
正则化(regularization): 为损失函数添加惩罚项使学出的模型参数值较小。
丢弃法:隐藏单元有p的概率被清除为0,有1-p的概率被拉伸到1。训练模型的时候使输出层计算无法过度依赖某一个隐藏单元,从而达到正则化的效果。
梯度爆炸、梯度消失
以上两种情况都发生在神经网络层数较多的时候,模型的数值稳定性变差。假设输入层和所有层的权重参数都是标量,权重参数为很小(e.g. 0.2),层数很多(e.g. 30层)时,输出层的输出为输入和一个很小的数的乘积,此为梯度消失(vanishing);反之当权重较大(e.g. 5),最终输出为输入和一个很大的数的乘积,此为梯度爆炸(explosion)
随机初始化模型参数
原因是为了避免只有一单个隐藏单元发挥作用的情况
环境因素
- 协变量偏移
- 标签偏移
- 概念偏移
循环神经网络进阶(未弄明白,后期补足)
RNN容易出现梯度消失和爆炸,为了解决这个问题我们使用门控的RNN(LSTM, GRU),LSTM, GRU同时也可以保留长期的历史信息