李宏毅机器学习课程笔记02 | 机器学习任务攻略General Guide

devtools/2025/1/13 4:42:35/

文章目录

  • 机器学习任务攻略General Guide
    • 第一步:分析loss on training data
    • 第二步:分析loss on testing data
      • Bias-Complexity Trade-off bias和复杂性的均衡

笔记内容对应视频章节
在这里插入图片描述

机器学习任务攻略General Guide

第一步:分析loss on training data

先检查在训练数据上模型是否很好的学习

情况1:如果在训练集上,loss很大,说明在训练资料上没有训练好

可能性1:设置的模型太简单了,模型存在model bias模型偏差,可以让loss变低的function,不在model可以描述的范围内

解决办法:重新设计一个更为复杂、有弹性、有未知参数、需要更多features的Model function

可能性2Optimization优化的不好

存在一个很好的function,但是gradient descent没有找到这个functio。 可能会卡在local minima(局部极小值/鞍点)的地方,没有办法找到一个真的可以让loss很低的参数。

如何区分这两种情况?

看到一个你从来没有做过的问题,也许你可以先跑一些比较小的,比较浅的network,或甚至用一些,不是deep learning的方法 => **比较容易做Optimize的,**它们比较不会有optimization失败的问题。先观察一下loss的情况

如果发现深的model,跟浅的model比起来,深的model明明弹性比较大,但loss却没有办法比浅的model压得更低,那就代表说optimization有问题 => 模型越深,能够拟合的函数越多,表达能力越强。就算20层之后的36层每一层仅仅copy前一层的结果,56层的效果也应该等同于20层

第二步:分析loss on testing data

当发现loss在训练数据集上已经很小了,我们就分析在测试集上的loss。

情况1:如果在测试集上的loss也很小,说明该模型效果很好了。

情况2:如果在测试集上loss很大

可能性1overfitting - training的loss小,testing的loss大

解释:为什么会出现loss小,testing的loss大

  1. 假设一个极端的例子,有一个一无是处的模型如下图,其实模型什么都没有学到。

  1. 假设另一个例子,下图是x与y的真实关系曲线(这个关系曲线就是希望我们可以学到的),但实际这个函数是观测不到的,我们只知道上面的一些坐标/点(训练资料)。 如果你的model它的自由度很大的话,它可以产生非常奇怪的曲线,导致训练集上的结果好,但是测试集上的loss很大。

解决方案

  1. 增加训练资料。

可以做Data augmentation数据加强,利用自己对问题的理解,创造资料。这里的创造不是凭空创造,需要augmentation的有道理。

比如做图像识别的时候,一张图左右翻转,截图放大等,这样并不会影响特征。但是很少有将一张图翻转的,翻转后的图可能不是真实世界会出现的。

  1. 限制模型弹性

假设通灵出这个模型就是二次曲线,能选择的function有效,这样可以较容易的训练出与真实相似的模型

限制模型的方法有 ① 较少的参数,如果是深度学习就给较少的神经元个数,或者让模型modal共用参数 ②较少的features,比如从给三天的资料变成给两天的资料 ③early stopping ④regularization正则化 ⑤dropout

注意:这里限制太过,又可能引发model bias的问题

可能性2:发生mismatch问题

比如按照之前的情况预测某天的观看量,某天的观看量应该很低。但在前一天有人宣传这个视频,引来了很多人来观看(异常情况),导致模型预测错误。

=> 训练资料和测试资料(发生异常?)分布不一样

Bias-Complexity Trade-off bias和复杂性的均衡

当complexity复杂到一定程度时,在测试数据上的loss开始增加,出现overfitting的情况。

所谓比较复杂就是,简单的说是包含的function比较多,它的参数比较多的model

问题: 如何选出有较低testing-loss的模型 ?

直觉的做法:假设有三个模型,将三个模型都上传到Kaggle上面,取均分误差`Mean Squared Error(MSE)最低。

存在问题:考虑之前的极端例子,假设有三个model都是极端的,在测试数据时,都是产生随机的结果,那么可能某个模型随机出的结果误差最小。这样选出的模型并不是由较低testing-loss的模型,只是刚好随机到了较好的结果。

public和private可以想象成,可以根据public公开的数据集的结果调 模型,所以在public上模型效果很好,由于private的效果很差。

模型设计完整之前,不要用测试数据

解决Cross Validation交叉验证

Training的资料分成两半,一部分叫作Training Set,一部分是Validation Set。先在Training Set上训练模型,然后在Validation Set上衡量模型的均分误差mse,最后用测试集测试模型。

理想情况用Validation Set挑模型,不要过多关注public testing set


问题2: 如何划分Training SetValidation Set,怎样避免分的不好影响训练结果?

解决:采用N-fold Cross Validation N折交叉验证

N-fold Cross Validation把训练集切成N等份,拿其中一份当作Validation Set,另外N-1份当Training Set,重复N次。

假设我们切成3份,第一次让第3份为validation,跑一次模型。然后第二次让第2份为validation,跑一次模型。最后第三次,让第1份为validation,跑一次模型。最后取三种情况下的平均值,选平均结果最好的模型。

评论区补充的:三种模型指的是弹性不同的三种模型,而不是相同弹性但参数不同的三种模型。

这个地方也很好理解,在创建模型的第三步优化时,就已经在相同弹性不同参数中选出最好的参数了。


http://www.ppmy.cn/devtools/150057.html

相关文章

利用 Java 爬虫技术获取唯品会 item_search 接口:按关键字搜索商品的示例代码与解析

在电商领域,唯品会凭借其独特的特卖模式和丰富的商品资源,吸引了大量消费者。对于企业、开发者以及市场研究人员来说,能够根据关键字搜索唯品会商品,并获取相关数据,对于市场分析、竞品研究、营销策略制定等方面具有重…

Android广播和阿里云消息推送服务

一、什么是广播? 广播(Broadcast)在Android开发中是一个重要的概念,它类似于现实生活中的广播电台,通过“大喇叭”将消息传递给所有感兴趣的接收者。广播机制在Android系统中用于在不同组件之间传递信息,是…

设计模式 行为型 命令模式(Command Pattern)与 常见技术框架应用 解析

命令模式(Command Pattern)是一种行为型设计模式,它旨在将请求发送者和接收者解耦,通过将一个请求封装为一个对象,从而允许参数化客户端对象以进行不同的请求、排队请求或记录请求,并支持可撤销操作。 在软…

时序数据库InfluxDB—介绍与性能测试

目录 一、简述 二、主要特点 三、基本概念 1、主要概念 2、保留策略 3、连续查询 4、存储引擎—TSM Tree 5、存储目录 四、基本操作 1、Java-API操作 五、项目中的应用 六、单节点的硬件配置 七、性能测试 1、测试环境 2、测试程序 3、写入测试 4、查询测试 一…

【安卓开发】自定义应用图标

要在 Android Studio 中设置应用的图标并自定义大小,可以使用 Android Studio 提供的图标生成工具。以下是具体步骤: 1、打开图标生成工具: 在 Android Studio 中,右键点击 res 文件夹,选择 New -> Image Asset。 …

LabVIEW实现动态水球图的方法

水球图是一种直观展示百分比数据的图表,常用于数据监测与展示。LabVIEW 虽不直接支持水球图绘制,但可通过图片控件动态绘制波形,或借助 HTMLCSS 的 Web 控件实现。此外,还可以结合 Python 等第三方工具生成水球图,LabV…

初学stm32 --- adc光敏传感器

光敏二极管简介 1,光敏二极管 核心是一个PN结,对光强非常敏感,单向导电性,工作时需加反向电压 2,暗电流 无光照时,反向电流很小(一般小于0.1微安),称为暗电流 3&#…

使用LinkedList手撕图的邻接表

主要是学习图的邻接表的核心结构等等&#xff0c;话不多说直接上代码&#xff1a; import java.util.LinkedList;public class GrapAdj {private int n ; // 表示图中顶点的数量。private LinkedList<Integer>[] adj;public GrapAdj(int n){this.n n;adj new LinkedLis…