机器学习训练中的技巧--李宏毅机器学习笔记

训练效果不佳的判断流程

                        

Step 1:先检查训练集 loss 是否够小

若不小,可能是以下两个问题:

1. Model Bias(模型偏差)

  • 模型太简单,函数集合太小,无法表达理想函数。

  • 解决方案:增加模型容量,如:

    • 增加输入特征维度

    • 使用更深层的神经网络

    • 使用更复杂的模型架构(如 Deep Learning)

2. Optimization 问题(优化失败)

  • 模型容量足够,但 Gradient Descent 卡在局部最优。

  • 判断方法:

    • 用浅层模型(如 SVM、线性模型)先试,获得 baseline。

    • 若更深模型反而 loss 更高,则可能是优化问题。

  • 经验总结:看到一个你从来没有做过的问题,也许你可以先跑一些比较小的,比较浅的network,或甚至用一些,不是 deep learning的方法

 Step 2:若训练 loss 小但测试大,则可能是 Overfitting

原因:

  • 模型“记住”训练数据,泛化能力弱。

  • 常见于模型自由度太高、数据太少。

例如如下的图,实际的模型是虚线(未知),蓝色的点代表训练集,数量比较少,如果模型自由度很高,它训练的结果可能如图右所示随便长长,虽然在训练集上loss很小 ,输入x与理想的y完全匹配,但是换成测试集后就不一样了(橙色点):

解决方法:

  1. 增加训练数据

    • Data Augmentation:如图像左右翻转、缩放等。

    • 注意:Augment 要有“道理”,不能乱做。

  1. 限制模型复杂度,不要让它弹性太大

    • 减少参数数量、神经元数量

    • 使用共享参数(如 CNN)

    • 使用 Regularization、Dropout、Early Stopping 等方法

 模型复杂度的取舍

  • 模型太简单 → model bias;

  • 模型太复杂 → overfitting;

  • 最佳模型:能在 training 和 testing 都取得低 loss。

  • 不建议频繁依赖 Kaggle公开排行榜选模型:

    • 每次提交后都能看到 public score,容易不自觉地围着它“调参”,但这会让你的模型越来越贴合 public test 的分布,却对 unseen 的 private test 表现不佳。可能 overfit 到 public set,导致 private set 成绩惨烈。

 如何选择合适的模型:交叉验证

方法:

  1. 把训练集划分为训练集 和 验证集。验证集就是在训练过程中,模型从来没有见过验证集里的数据,所以它能帮助你判断模型是否具有“泛化能力”(即在没见过的数据上表现得好不好)。

  2. 在 验证集 上评估模型,挑选最优模型。

  3. 举个例子:训练集:你平时刷的练习题,用来学习和掌握知识;验证集:你做的模拟题,用来检查你是不是真的学会了,而不是死记硬背;测试集(test set):就是正式考试卷子(比如 Kaggle 给你的测试数据),你不能提前看到答案。

  4. N-fold CV:划分为 N 份,轮流验证并取平均评估,选择最稳定的模型。如下图,把你的训练集切成N等份,在这个例子裡面我们切成三等份,切完以后, 你拿其中一份当作Validation Set,另外两份当Training Set,然后这件事情你要重复三次 。

然后接下来 你有三个模型,你不知道哪一个是好的你就把这三个模型在这三种设置在这三个 Training集跟Validation集上面通通跑过一次然后把这三个模型在这三种状况的结果都平均起来, 把每一个模型在这三种状况的结果,都平均起来再看看谁的结果最好  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值