实践方法论
模型训练结果不佳的原因
- 模型偏差: 模型过于简单,无法在已知的函数集合中找到符合条件的函数,这里的符合条件是指能让损失变低的函数。
- 优化问题: 梯度下降等优化算法可能陷入局部最优解,无法找到全局最优解。
如下图所示
再来看另外一种情况
这个集合包括了一些函数,其中有损失低的函数,但问题是梯度下降这种办法找不到损失低的函数,只能找到局部解,找不到最优,就是找到一个就返回,但可能返回的这个解不是最优解
接下来我们来思考:
- 训练数据的损失不够低,这个时候思考方向有哪些?
- 模型偏差?
- 优化问题?
- 无法找到一个损失低的函数,方向有?
- 模型的灵活性不够?
- 灵活性够了,但优化梯度下降不给力?
- 还是模型不够大?
- 模型太小了?
这里书里面提到了一种判断方法,即通过比较不同的模型来判断模型现在到底够不够大。
通过下面的这张图可以看出来20层的效果在测试数据和训练数据上面都要比56层要好,也就是说优化不到位
,因为按理来说20层能做到的事情,56层应该也可以做到且做的更好,要不然那36层干什么用的?
这里他提到的建议是
我这里看的很蒙,就记录一下自己的理解
即先用比较小的、比较浅的网络确保这些网络和模型能找到一组最好的参数,记录一下这些模型的损失值,接下来上深的模型,若,深的模型明明灵活性比较大,但损失却没有办法比浅的模型压得更低代表说优化有问题,梯度下降不给力,因此要有一些其它的方法来更好地进行优化。
- 过拟合: 模型过于复杂,过度拟合训练数据,无法泛化到新的数据,可以理解为学生只会死记硬背,同一种题型老师稍微加一点新花样就废了
解决办法:
- 增加训练数据:说人话就是做题太少了,没有学到真东西,加大剂量
- 简化模型: 别只会一种解题方法,如果模型只会一种“解题方法”,遇到新的题目就会束手无策,所以让它能够尝试多种“解题方法”,这样才能更好地应对各种情况。
- 正则化和Dropout:正则化: 对模型参数施加惩罚,防止模型过度拟合训练数据,dropout:在训练过程中随机丢弃一些神经元,防止模型过度依赖某些特征。
说人话,正则化和dropout就是为了防止孩子只知道刷题,而不知道思考就会变成“书呆子”,这里的”书呆子“可以理解为过拟合了 - 交叉验证: 使用一部分数据作为验证集,评估模型在未见数据上的表现,避免过拟合,说人话,如果学生只会自己一个人学习,就会变成“井底之蛙”。同样,如果模型只使用训练数据,就会失去泛化的能力。我们需要使用交叉验证等方法,让模型“多和同学交流”,学习到更全面的规律。
- 交叉验证:把数据集分成K份,其中K-1份当训练集,1份当测试集,这样就有K轮,再给测试结果取平均。
- 不匹配: 预测结果和真实结果存在巨大的差距且不是增大数据规模能解决的。