目录
1. 为什么会有梯度消失、爆炸?
1.1原因
两种情况下梯度消失经常出现,
一是在深层网络中,
二是采用了不合适的损失函数,比如sigmoid。
梯度爆炸一般出现在深层网络和权值初始化值太大的情况下
1.2 梯度消失、爆炸的解决方案
- - 预训练加微调
- - 梯度剪切、权重正则(针对梯度爆炸)
- - 使用不同的激活函数
- - 使用batchnorm,batch normalizatin为什么可以防止梯度消失爆炸?
- - 使用残差结构
- - 使用LSTM网络
2. overfitting怎么解决?
2.1 什么是overfitting
overfitting就是过拟合, 其直观的表现如下图所示,随着训练过程的进行,模型复杂度增加,在training data上的error渐渐减小,但是在验证集上的error却反而渐渐增大——因为训练出来的网络过拟合了训练集, 对训练集外的数据却不work, 这称之为泛化(generalization)性能不好。泛化性能是训练的效果评价中的首要目标,没有良好的泛化,就等于南辕北辙, 一切都是无用功。
2.2 降低过拟合的办法,为什么L1 regularization可以使参数优化到0?
- 处理overfitting最根本的方法是从样本着手。首先样本方面有很多工作可以做,比如样本是否足够多,样本分布是否均衡,样本是否分类是否偏差很大。
- 正则化(Regularization)
L2正则化:目标函数中增加所有权重w参数的平方之和, 逼迫所有w尽可能趋向零但不为零. 因为过拟合的时候, 拟合函数需要顾忌每一个点, 最终形成的拟合函数波动很大, 在某些很小的区间里, 函数值的变化很剧烈, 也就是某些w非常大. 为此, L2正则化的加入就惩罚了权重变大的趋势.
L1正则化:目标函数中增加所有权重w参数的绝对值之和, 逼迫更多w为零(也就是变稀疏. L2因为其导数也趋0, 奔向零的速度不如L1给力了). 大家对稀疏规则化趋之若鹜的一个关键原因在于它能实现特征的自动选择。一般来说,xi的大部分元素(也就是特征)都是和最终的输出yi没有关系或者不提供任何信息的,在最小化目标函数的时候考虑xi这些额外的特征,虽然可以获得更小的训练误差,但在预测新的样本时,这些没用的特征权重反而会被考虑,从而干扰了对正确yi的预测。稀疏规则化算子的引入就是为了完成特征自动选择的光荣使命,它会学习地去掉这些无用的特征,也就是把这些特征对应的权重置为0。
- 随机失活(dropout) ,在训练的运行的时候,让神经元以超参数p的概率被激活(也就是1-p的概率被设置为0), 每个w因此随机参与, 使得任意w都不是不可或缺的, 效果类似于数量巨大的模型集成。
- 逐层归一化(batch normalization)
- 提前终止(early stopping)
3. 模型欠拟合的解决方法?
- 欠拟合是由于学习不足,可以考虑添加特征,从数据中挖掘出更多的特征,有时候还需要对特征进行变换,使用组合特征和高次特征。
- 模型简单也会导致欠拟合,例如线性模型只能拟合一次函数的数据。尝试使用更高级的模型有助于解决欠拟合,如使用SVM,神经网络等。
- 正则化参数是用来防止过拟合的,出现欠拟合的情况就要考虑减少正则化参数。
4. 泛化能力
4.1 何为泛化能力?
如果一个模型只能在训练集上起作用,那是没有用的。因此我们总是希望模型不仅仅是对于已知的数据(训练集)性能表现良好,对于未知的数据(测试集)也表现良好,即具有良好的泛化能力。
4.2 如何提高模型泛化能力?
基本思路就是:先把模型搞复杂,复杂到得到令你满意的训练误差(训练误差要低于『令你满意的测试误差』),然后在慢慢调参、简化模型、添加先验和正则、改变数据维度、特征提取等,直到测试误差也满足『低于令你满意的测试误差』。
提高泛化能力的方式大致有:
- 1. 尽可能增加数据量。
- 2. 内存允许的条件下尽量增加batch_size
- 3. 改网络结构
- 4. 改目标函数
- 5. 正则化。
- 6. Dropout。
- 7. 提前终止训练。