模型的改善与泛化(过拟合)

本文深入解析拟合的概念,探讨欠拟合、恰拟合与过拟合三种状态,提供解决欠拟合和过拟合的有效策略,并介绍如何通过数据集划分避免过拟合。

1 拟合

由于拟合(fitting) 这个概念还并没有介绍,这里稍微补充以下。所谓求解模型的过程,其实就是通过某种方式(例如梯度下降)来拟合模型参数的过程。拟合指的就是一个寻找模型参数的、动态的过程。 当这个过程执行结束后就会产生多种拟合后的状态,例如过拟合、欠拟合等。

1.1 引例

假设现在有一批样本点,它本是由函数sin(x)生成(现实中并不知道),但由于其他因素的缘故,使得我们拿到的样本点并没有准确的落在曲线sin(x)上,而是分布在其附近。

上图中红色圆点就是我们拿到的数据集,蓝色曲线为其真实的分布曲线。现在我们需要对其进行建模,并求解得到相应的预测函数。假如现在你分别用degree = 1,5,10来对这12个样本点进行建模(degree表示多项式的最高次数),且求解后的可视化情况如下:

从图中可以看出,随着多项式次数的增大,R^{2} 指标的值也越来越高(R^{2} 越大预示着模型越好),且到次数设置为10的时候,R2
 达到了1.0。但是我们最后就应该选degree=10的这个模型吗?

不知过了多久,突然一个客户来说要买你的这个模型进行商业使用;同时客户为了评估你的模型又自己带来了一批新的含标签的数据(虽然你自己之前已经用R^{2} 测试过了,可人家客户并不会完全相信,万一你作弊呢)。于是你拿着客户的新数据又重新测试了以下自己的模型,可视化如下:

令你感到奇怪的是,当degree=5的结果居然会好于degree=10模型的结果,问题出在哪儿呢?其原因在于:当我们第一次通过这12个样本点建模时,我们为了尽可能的使得“模型好(表现形式就是R^{2} 尽可能大)”而使用了非常复杂的模型,这导致最后得到的模型将严重的偏离其真实的模型(这里为sin(x) ),尽管最后每个样本点都“准确无误”的落在了预测曲线上。而这,显然不是我们想要的。

1.2 过拟合与欠拟合

在机器学习中,我们将上述degree=10产生的现象叫做过拟合(overfitting),将其对立面degree=1产生的现象叫做欠拟合(underfitting),把degree=5的现象叫做恰拟合(good fitting);同时将建模时的数据叫做训练集(training data),将训练集上产生的误差叫训练误差(training error)将测试时的数据叫做测试集或验证集(test data),将模型在测试集上产生的误差叫泛化误差(generalization error),将整个建模求解过程叫做训练(training)

需要说明的是,引例中仅仅是以线性回归为例,来向大家直观的介绍什么是过拟合与欠拟合。不代表这种现象只出现在线性回归中,事实上所有的机器学习模型都会存在这个问题。一般来说,所谓过拟合现象就是在训练集上表现很好,而在测试集上表现糟糕;欠拟合现象就是在两者上的表现都十分糟糕;而恰拟合现象就是指在训练集上表现良好(尽管可能不如过拟合时好),但同时在测试集上也有着不错的表现。

1.3 如何解决欠拟合?

经过上面的描述我们已经对欠拟合有了一个直观的认识,所谓欠拟合就是训练出来的模型根本不能较好的拟合现有的训练数据。要解决欠拟合的方法相对来说较为简单,主要分为以下两类:

  • 重新设计更为复杂的模型

       例如在线性回归中可以增加特征映射多项式的次数;

  • 加入更多的特征维度作为输入

      收集或设计更多的特征维度作为模型的输入;

1.4 如何解决过拟合?

常见的解决模型过拟合的方法主要也有两大类:

  • 收集更多数据

       这是一个最为有效但实际操作起来有是最为困难的一个方法。训练数据越多,在训练过程中也就越能够纠正噪音数据对模型 造成的影响,使得模型不易过拟合。但是对于新数据的收集往往具有较大的困难。

  • 正则化(Regularization)

        这是一种有效且易于操作的缓解模拟过拟合的办法

2 如何避免过拟合

    为了避免训练出来的模型产生过拟合的现象,在模型训练之前我们一般会将拿到的数据集划分成两个部:训练集与测试集,且一般为7:3的比例。其中训练集用来训练模型(降低模型在训练集上的误差),然后用测试集来测试模型在未知数据上的泛化误差,观察是否产生了过拟合现象。但是由于一个完整的训练过程用到数据通常是:“训练集->测试集->训练集->测试集->…”,因为你不可能第一次就选择了合适的模型,所以在不知不觉中测试集也被当成了训练集在使用。所以还有另外一种划分方式为:训练集、开发集(dev data)和测试集,且一般为7:2:1的比例。为什么会有两种划分方式呢?这一般取决于训练者对模型的要求程度。如果是分为三份的话,测试集一般是通过训练集和开发集选定模型后最后做测试用的。但是具体怎么分,没有什么硬性标准,都行。

3. 总结

本篇文章笔者首先介绍了什么是拟合,进而介绍了拟合后带来的三种状态:欠拟合、恰拟合与过拟合,其中恰拟合的模型是我们最终所需要的结果。同时,笔者接着介绍了处理欠拟合与过拟合的办法,其中过拟合的具体解决办法将在下一篇文章中进行说明。最后,笔者还介绍了通过对数据集的划分来避免产生模型过拟合的现象。本次内容就到此结束,感谢阅读!
 

引用:

### 大语言模型微调中的欠拟合过拟合 #### 欠拟合原因及解决方案 当大语言模型在训练集和验证集上的性能均不理想时,表明发生了欠拟合现象。这通常意味着模型未能充分学习到数据中的特征模式。 - **原因** - 数据量不足:有限的数据无法提供足够的信息让模型有效捕捉规律。 - 特征表示能力弱:所选架构可能不适合当前任务需求,导致表达力不够强。 - 训练迭代次数少:未给予足够的时间使权重得到适当调整[^1]。 - **解决办法** - 扩充高质量标注样本数量以增强泛化能力。 - 尝试更复杂的网络结构或更大的预训练基础模型来提升表征空间维度。 - 调整超参数设置,比如增加epoch数目、改变batch size大小等;也可以考虑采用不同的优化算法如AdamW替代SGD提高收敛速度并防止陷入局部极小值点。 ```python # Python代码示例:调整超参数配置文件 config = { "num_train_epochs": 5, # 增加训练轮次 "per_device_train_batch_size": 8,# 减小批量尺寸有助于更好地探索损失曲面 } ``` #### 过拟合原因及解决方案 相反地,在训练阶段取得优异成绩却于未知实例面前暴露出较大误差,则说明出现了过拟合状况——即过分关注特定细节而忽略了整体趋势的一致性。 - **成因** - 高维稀疏矩阵使得某些参数过度依赖个别输入组合; - 正则项强度设定偏低不足以抑制不必要的自由度增长; - 缺乏有效的早停机制及时终止无意义的学习过程。 - **对策建议** - 应用Dropout技术随机丢弃部分神经元连接以防止单一路径主导决策流程; - 加入L2/L1惩罚因子控制权重量级范围内的波动幅度保持稳定状态; - 实施交叉验证策略评估不同子集中间结果取平均作为最终评判标准之一; - 设置合理的提前结束条件(Early Stopping),一旦发现验证集合的表现不再改善就立即停止进一步更新操作。 ```python from transformers import TrainerCallback class EarlyStoppingCallback(TrainerCallback): def __init__(self, patience=3): self.patience = patience self.best_score = None self.counter = 0 def on_evaluate(self, args, state, control, metrics, **kwargs): current_val_loss = metrics['eval_loss'] if not self.best_score or current_val_loss < self.best_score: self.best_score = current_val_loss self.counter = 0 elif current_val_loss >= self.best_score: self.counter += 1 if self.counter >= self.patience: control.should_training_stop = True ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值