1.过拟合、欠拟合及其解决方案
训练误差(training error):训练集上的误差
泛化误差(generalization error):用测试集上的误差代替
数据集划分:训练集(train set)/验证集(validate set)/测试集(test set)
其中训练集用来调整模型参数,验证集用来调整超参数
k折交叉验证(k-folder cross-validation):将数据集分成k等份,每次取一份作为验证集,其余作为训练集,得到k组训练结果,最后对着k组训练结果取平均(k-folder可以降低数据集划分对结果的影响)
过拟合(overfiting): 训练误差很低但是验证误差很高(数据不够或者参数太多)
欠拟合(underfiting):训练集误差和验证集误差都很高(参数太少,拟合能力不够)
解决过拟合的方法:
- 权重衰减(L2范数正则化)
loss = loss + λ/2n|w|^2
同时需要修改优化器中权重迭代方式
- DropOut
当对该隐藏层使用丢弃法时,该层的隐藏单元将有一定概率被丢弃掉。设丢弃概率为 p ,那么有 p 的概率 hi 会被清零,有 1−p 的概率 hi 会除以 1−p 做拉伸。Dropout不改变输入的期望值。
使用MLP对两种方法进行验证
- 模型:MLP
- 优化器:sgd
- 损失函数:交叉熵
2.为什么优化器中只对权重参数设置衰减,而不对偏置参数设置衰减呢?
对偏置增加正则也是可以的,但是对偏置增加正则不会明显的产生很好的效果。而且偏置并不会像权重一样对数据非常敏感,所以不用担心偏置会学习到数据中的噪声。而且大的偏置也会使得我们的网络更加灵活,所以一般不对偏置做正则化。
3.丢弃法
丢弃法就是丢弃一些不好的特征。根正则原理其实是一样的,都是减少特征数量。不过丢弃法是随机丢弃。正则是人为抑制和丢弃
4.权重衰减和L2正则化是一个意思吗
L2正则化是在目标函数中直接加上一个正则项,直接修改了我们的优化目标。权值衰减是在训练的每一步结束的时候,对网络中的参数值直接裁剪一定的比例,优化目标的式子是不变的。在使用朴素的梯度下降法时二者是同一个东西,因为此时L2正则化的正则项对梯度的影响就是每次使得权值衰减一定的比例。但是在使用一些其他优化方法的时候,就不一样了。比如说使用Adam方法时,每个参数的学习率会随着时间变化。这时如果使用L2正则化,正则项的效果也会随之变化;而如果使用权值衰减,那就与当前的学习率无关了,每次衰减的比例是固定的。
引入正则项实际上是学习器的一种归纳偏好,即:选用尽可能简单的模型,避免过拟合,因为这样能够有更好的泛化性能。 这是一个增强泛化性能的通用的处理方式,当然如果你的模型如果本身准确率就不高,不会产生过拟合,那这种做法当然效果不好