机器学习 Loss大的原因及解决办法 过拟合的原因及解决措施

在从训练资料中得到Loss后,操作路径如下
在这里插入图片描述

Loss is Large

原因

(1)model bias

可能是model太简单/弹性不足,使得Loss没有足够小

解决办法:
(1)增加features(增加训练资料范围
(2)Deep Learning(增加层数)
在这里插入图片描述

(2)Optimization

可能是参数优化不足,使得Loss不够小

gradient descent 无法找出合适的参数使得Loss足够小,这里待补充(下节课才讲)

如何判断是哪种原因

若无法正确判断原因,一味寻找,会导致始终找不到足够小的Loss,宛若大海捞针。
在这里插入图片描述

基本解释

通过对比不同模型以判断
在这里插入图片描述
如上图所示,横轴:training过程(即参数更新过程);纵轴:Loss值(左图为测试资料,右图为训练资料)
在testing data中,20-layer的Loss < 56-layer的Loss,但这并不是over fitting所造成。
在Training data中,仍然是20-layer的Loss更低,但56-layer的model弹性明显更好,则说明是56-layer的optimization的问题。

具体操作

将浅的/小的network或者简单模型的Loss和深的network的Loss进行对比
先将浅的/小的network或者简单模型如Linear Model的Loss计算出。再计算更深的network的Loss。
若前者Loss更小,则证明是Optimization的问题
在这里插入图片描述
在上图蓝色框架内:
5-layer model的弹性一定强于前面几层,但Loss却比它们都大,则说明是5-layer的Optimization有问题。

Loss is Small

当训练数据的Loss足够小,在testing数据上进行实践,若testing数据的Loss足够小,则为success!反之则考虑overfitting

introduction of overfitting

在这里插入图片描述
蓝点为training data,用于束缚函数的形状。没有训练资料束缚的位置,当弹性过大时,函数则可以有任意形状,导致在测试资料上得到很大的Loss。

为了避免overfitting,有以下几种解决措施

overfitting solutions

解决措施分为两类:

(1)用更多的数据束缚模型

More training data :需要搜集更多的训练资料
Data augmentation:基于原有资料,来增加资料
在这里插入图片描述

(2)减少模型弹性

在这里插入图片描述

mismatch

过拟合中一种具体的情况——mismatch

可用更多的训练资料克服普通过拟合的情况,但在mismatch中,由于训练资料和测试资料的分布不同,再多训练资料也无济于事

(此处待补充,还没讲)

如何选择最优Loss

在这里插入图片描述
随着model复杂程度增加,Training Loss持续减小,但Testing Loss先减小后增大。我们选择Testing Loss最小的Loss。

在HW中,用Training set得到model,用于通过public和private两个测试作业。训练资料中得出的多个模型中,Loss最小的模型可能在两个测试中得到差距很大的结果。
在这里插入图片描述

Cross Validation

为优化上述情况,我们采用交叉验证的方式:
将Training set分为两组:
(1)Training Set — 占90% ,用于寻找model
(2)Validation Set — 占10%,用于验证测试
在Validation Set中选取最小mse所用模型,用于测试作业。
在这里插入图片描述

N-fold Cross Validation

在划分Training Set时,为避免Validation Set数据差,我们可采用N-fold Cross Validation
在这里插入图片描述
将Training set数据划分为三份:2份训练资料,一份验证资料。将这三份用不同排列方式划分为3组,将每个模型在这三组中得到的mse列出,并求这三组的mse平均值,选取最小Avg mse的模型。

### 解决机器学习中的欠拟合和过拟合问题 #### 过拟合解决方案 过拟合是指当模型在训练数据上表现得非常好,但在未见过的数据(如验证集或测试集)上表现不佳的情况。为了应对这种情况,可以采取以下几种方法: - **正则化**:通过向损失函数添加惩罚项来防止参数变得过,从而减少复杂度并提高泛化能力[^1]。 ```python from sklearn.linear_model import Ridge, Lasso ridge_reg = Ridge(alpha=0.5) lasso_reg = Lasso(alpha=0.5) # 训练模型... ``` - **数据扩增**:增加更多的样本来帮助模型更好地捕捉潜在模式而不是偶然特征;对于图像识别任务来说尤其有效。 ```python import numpy as np from keras.preprocessing.image import ImageDataGenerator datagen = ImageDataGenerator( rotation_range=20, width_shift_range=0.2, height_shift_range=0.2, horizontal_flip=True) X_train_augmented = datagen.flow(X_train, y_train, batch_size=32) ``` - **Dropout**:随机丢弃一部分神经元连接,在每次迭代过程中改变网络结构以增强其鲁棒性和抗干扰性。 ```python from tensorflow.keras.layers import Dropout model.add(Dropout(rate=0.5)) ``` - **提前停止 (Early Stopping)**:监控验证误差的变化趋势,并在发现性能不再提升时立即终止训练过程,以此避免因过度优化而导致过拟合现象。 ```python from tensorflow.keras.callbacks import EarlyStopping early_stopping_cb = EarlyStopping(monitor='val_loss', patience=10) history = model.fit(..., callbacks=[early_stopping_cb]) ``` #### 欠拟合的解决方案 相反地,如果模型既无法很好地解释已知样本也难以推广到未知实例,则认为发生了欠拟合。针对这一挑战可考虑如下措施: - 增加模型容量:尝试更复杂的架构比如更深更多层的人工神经网路或是更高阶多项式的回归方程等,以便能够表达更加丰富的映射关系。 - 减少正则化的强度:适当降低L1/L2范数系数α值使得权重更新幅度更一些有助于改善收敛速度与最终效果[^4]。 - 特征工程:引入额外有意义的信息源作为输入变量或将现有属性转换成更具区分性的形式,进而辅助算法建立更强关联性。 - 收集高质量且充足的训练资料:确保有足够的代表性案例供系统学习规律而非异常点影响整体准确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聪明的Levi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值