当前位置: 首页 > news >正文

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

文章目录

  • 机器学习任务攻略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.mrgr.cn/news/83472.html

相关文章:

  • 三维卷积( 3D CNN)
  • 服务器登陆后有java变量
  • C#的Task
  • 如何从 Keycloak 的 keycloak-themes.jar 中提取原生主题并自定义设置
  • 使用MATLAB正则表达式从文本文件中提取数据
  • SQL从入门到实战-1
  • week06_预训练语言模型—BERT
  • Android车机DIY开发之软件篇(八)单独编译
  • 全面教程:Nacos 2.3.2 启用鉴权与 MySQL 数据存储配置
  • Tkinter组件-Button按键
  • 《ROS2 机器人开发 从入门道实践》 鱼香ROS2——第6章内容
  • Windows 下Mamba2 / Vim / Vmamba 环境安装问题记录及解决方法终极版(无需绕过triton)
  • 攻防靶场(34):隐蔽的计划任务提权 Funbox1
  • 【云计算】OpenStack云计算平台
  • Qt 5.14.2 学习记录 —— 십일 QLCDNumber、ProgressBar、QCalendarWidget
  • 前端开发:Web前端和HTML
  • C++之函数提高
  • 国产编辑器EverEdit - 扩展脚本:新建同类型文件(避免编程学习者反复新建保存练习文件)
  • C语言 操作符_位操作符、赋值操作符、单目操作符
  • 仓颉笔记——写一个简易的web服务并用浏览器打开
  • 代码随想录算法训练营第3天(链表1)| 203.移除链表元素 707.设计链表 206.反转链表
  • 卷积神经02-CUDA+Pytorch环境安装
  • 初识 Git——《Pro Git》
  • 哈希表及模拟实现
  • 【老白学 Java】项目演练 - Quizzes #3
  • nvim 打造成可用的IDE(2)