机器学习实践方法论
模型偏差 假设模型过于单一,把所有含有未知参数的函数集合得到函数的集合,但该函数的集合没有包含任何一个函数,可以让损失贬低的函数不在模型可以描述的范围内。这就说明模型收到了限制,需要重新设计一个模型,给模型更大的灵活性。
优化算法——梯度下降法
梯度(一阶导数):梯度是一个函数在多维空间中的一阶导数,它指向函数增长最快的方向。数学上,对于函数:
f
(
x
1
,
x
2
,
.
.
.
.
.
.
,
x
n
)
f(x_1,x_2,......,x_n)
f(x1,x2,......,xn) 梯度定义为向量。在机器学习中,梯度用于指导参数更新的方向,以改进模型的性能。
梯度下降法(Gradient Descent,GD) :通过迭代地沿着梯度的负方向更新参数,以最小化目标函数。是一种用于寻找函数最小值的优化算法。它的核心思想是利用目标函数的梯度信息来指导参数的更新,从而逐渐逼近函数的最小值。
标准的梯度下降主要有两个缺点:①训练速度慢。在应用于大型数据集中,每输入一个样本都要更新一次参数,且每次迭代都要遍历所有的样本,会使得训练过程极其缓慢,需要花费较长时间才能得到收敛解。②容易陷入局部最优解:由于是在有限视距内寻找下山的反向,当陷入平坦的洼地,会误以为到达了山地的最低点,从而不会继续往下走。所谓的局部最优解就是鞍点,落入鞍点,梯度为0,使得模型参数不在继续更新。
训练损失大原因
一 模型偏差
二优化做得不好
通过比较不同的模型来判断模型是不是受到限制。如果看到一个从来没有做过的问题,可以先跑一些比较小的、比较浅的网络,或甚至用一些非深度学习的方法,比如线性模型、支持向量机,它们比较不会有优化失败的问题。因此可以先训练一些比较浅的模型,或者是一些比较简单的模型,先知道这些简单的模型,到底可以得到什么样的损失。接下来还缺一个深的模型,如果深的模型跟浅的模型比起来,深的模型明明灵活性比较大,但损失却没有办法比浅的模型压得更低代表说优化有问题,梯度下降不给力,因此要有其他的方法来更好地进行优化。
如果训练数据上面的损失小,测试数据上的损失大,可能是真的过拟合。在测试上的结果不好,不一定是过拟合,要把训练数据损失记下来,先确定优化没有问题,模型够大了。接下来才看看是不是测试的问题,如果是训练损失小,测试损失大,这个有可能是过拟合。
过拟合
概念:过拟合就是模型在训练集上学习得太好,以至于学到了训练集中的噪声,导致模型的泛化能力差,即模型在测试集上表现不佳。通常发生在模型复杂度较高时,此时模型可能会尝试捕捉训练集中的每个小的特征,包括那些不具代表性的特征,而这些特征可能仅仅是由于随机噪声而产生的。
特征:①训练集表现良好:模型在训练集上的准确率非常高,几乎完美。损失小。
②测试集表现差:模型在测试集或验证集上的表现比在训练集上的表现要差得多,损失大。
③泛化能力弱:模型对于新的数据缺乏适应性,泛化能力差。
④学习曲线表现:在学习曲线上,训练误差持续降低,而验证误差降低到一共成都后开始增加。
防止过拟合方法:①数据增强:通过对训练数据进行变换,比如旋转、缩放、翻转等,可以增加数据的多样性,帮助模型学习到更一般的特征。
②减少模型复杂度:选择更简单的模型或减少模型中的参数数量(例如:减少神经网络中的层数或每层的节点数)可以降低过拟合的风险。
③正则化(Regularization):添加正则项到损失函数中可以惩罚模型的复杂度,限制模型权重的大小,从而减少过拟合。
④提前停止:在训练过程中,一旦验证误差开始增加,即停止进一步训练,可以防止模型过度拟合训练数据。
⑤交叉验证:使用交叉验证可以更好地估计模型在未见过数据上的表现,并选择表现最好的模型参数。
⑥Dropout:在训练神经网络时,随机丢弃(即暂时移除)网络中的一些节点,可以防止网络中的节点同时共同适应训练数据。
⑦集成学习:结合多个模型的预测,通常可以减少过拟合并提高模型的泛化能力。
⑧限制参数的搜索空间:在进行模型选择和超参数调优时,限制参数的搜索空间可以避免选择过于复杂的模型。
⑨数据集切割:合理切割数据集为训练集、验证集和测试集,确保模型不是简单地记住了特定数据集的特征。
⑩噪声注入:在训练数据中添加噪声可以减少模型对训练样本的依赖,并增加其泛化能力。
十一特征选择:减少输入特征的数量,舍弃那些不相关或冗余的特征,可以简化模型并减少过拟合的风险。