1、模型偏差
模型偏差是指的是模型预测结果与真实值之间的差异,这种差异不是由随机因素引起的,而是由模型本身的局限性或训练数据的特性所导致的。
简单来讲,就是由于初期设定模型,给定的模型计算能力过弱,导致在通过梯度下降法进行优化以得到损失最小的函数过程中,模型表现太差,结果如同想要在大海里面捞针(一个损失低的函数),结果针根本就不在海里。
1.1、解决方案:
- 重新设计一个模型,给模型更大的灵活性增加更多特征;
- 通过增加模型的隐藏层数、神经元数量或采用更复杂的网络结构来提高模型的拟合能力;
- 通过结合多个模型的预测结果来提高整体预测的准确性和稳定性;
2、优化问题
一般会使用梯度下降法找最优拟合函数,往往无法找到一个真的可以让损失很低的参数。当训练数据的损失不够低的时候,需要考虑的是 到底是模型的偏差,还是优化的问题。可能可能选择的模型已经够灵活了,但是优化梯度下降力度不够;可能是学习率设置时使用固定学习率,在优化后期出现了“震荡”/“停滞”。
2.1、解决方案
- 结合多个模型比较,通过比较不同的模型来判断模型现在到底够不够大。(可以先跑一些比较小的、比较浅的网络,或甚至用一些非深度学习的方法,比如线性模型、支持向量机(Support Vector Machine,SVM))
3、过拟合
过拟合(Overfitting)是深度学习中一个常见的问题,指的是模型在训练数据上表现得太好,以至于它学习了训练数据中的噪声和细节,而这些噪声和细节并不适用于新的、未见过的数据。结果,模型在训练集上表现优异,但在测试集或实际应用中的泛化能力却很差。
3.1、解决方案一:增加训练集数据
往往是最有效的
如图,当训练集数据增加时,直观上看,模型的灵活性被限制住了,更不容易过拟合训练集数据;实际上,更多的训练集数据,更能够反应真实的数据分布,由此训练得到的模型也更能够在测试集上有不错的结果。
解决方案二:限制模型
- 给模型比较少的参数;
- 用更少的特征;
- 正则化(regularization)
L1正则化和L2正则化:通过在损失函数中添加一个正则项(通常是权重向量的L1或L2范数),来限制模型的复杂度。 Dropout:在训练过程中随机丢弃一部分神经元,以减少神经元之间的共适应关系,从而防止过拟合。
import torch.optim as optim
# 在定义优化器的时候使用weight_decay参数进行L2正则化
optimizer = optim.Adam(model.parameters