吴恩达深度学习笔记:机器学习(ML)策略(1)(ML strategy(1))1.7-1.8

news2025/7/19 7:09:52

目录

  • 第三门课 结构化机器学习项目(Structuring Machine Learning Projects)
    • 第一周 机器学习(ML)策略(1)(ML strategy(1))
      • 1.7 什么时候该改变开发/测试集和指标?(When to change dev/test sets and metrics)
      • 1.8 为什么是人的表现?(Why human-level performance?)

第三门课 结构化机器学习项目(Structuring Machine Learning Projects)

第一周 机器学习(ML)策略(1)(ML strategy(1))

1.7 什么时候该改变开发/测试集和指标?(When to change dev/test sets and metrics)

你已经学过如何设置开发集和评估指标,就像是把目标定在某个位置,让你的团队瞄准。但有时候在项目进行途中,你可能意识到,目标的位置放错了。这种情况下,你应该移动你的目标。

在这里插入图片描述
我们来看一个例子,假设你在构建一个猫分类器,试图找到很多猫的照片,向你的爱猫人士用户展示,你决定使用的指标是分类错误率。所以算法𝐴和𝐵分别有 3%错误率和 5%错误率,所以算法𝐴似乎做得更好。

但我们实际试一下这些算法,你观察一下这些算法,算法𝐴由于某些原因,把很多色情图像分类成猫了。如果你部署算法𝐴,那么用户就会看到更多猫图,因为它识别猫的错误率只有 3%,但它同时也会给用户推送一些色情图像,这是你的公司完全不能接受的,你的用户也完全不能接受。相比之下,算法𝐵有 5%的错误率,这样分类器就得到较少的图像,但它不会推送色情图像。所以从你们公司的角度来看,以及从用户接受的角度来看,算法𝐵实际上是一个更好的算法,因为它不让任何色情图像通过。

在这里插入图片描述
那么在这个例子中,发生的事情就是,算法 A 在评估指标上做得更好,它的错误率达到3%,但实际上是个更糟糕的算法。在这种情况下,评估指标加上开发集它们都倾向于选择算法𝐴,因为它们会说,看算法 A 的错误率较低,这是你们自己定下来的指标评估出来的。但你和你的用户更倾向于使用算法𝐵,因为它不会将色情图像分类为猫。所以当这种情况发生时,当你的评估指标无法正确衡量算法之间的优劣排序时,在这种情况下,原来的指标错误地预测算法 A 是更好的算法这就发出了信号,你应该改变评估指标了,或者要改变开发集或测试集。在这种情况下,你用的分类错误率指标可以写成这样:

在这里插入图片描述

𝑚𝑑𝑒𝑣是你的开发集例子数,用𝑦𝑝𝑟𝑒𝑑(𝑖) 表示预测值,其值为 0 或 1,𝐼这符号表示一个函数,统计出里面这个表达式为真的样本数,所以这个公式就统计了分类错误的样本。这个评估指标的问题在于,它对色情图片和非色情图片一视同仁,但你其实真的希望你的分类器不会错误标记色情图像。比如说把一张色情图片分类为猫,然后推送给不知情的用户,他们看到色情图片会非常不满。

在这里插入图片描述
其中一个修改评估指标的方法是,这里( 1 m d e v \frac{1}{m_{dev}} mdev1 ∑ i = 1 m d e v I ( y p r e d ( i ) ≠ y ( i ) ) \sum_{i=1}^{m_{dev}}{I (y_{pred}^{(i)} ≠y^{(i)})} i=1mdevI(ypred(i)=y(i)) 之间)加个权重项,即:

在这里插入图片描述

我们将这个称为𝑤(𝑖),其中如果图片𝑥(𝑖)不是色情图片,则𝑤(𝑖) = 1。如果𝑥(𝑖)是色情图片,𝑤(𝑖)可能就是 10 甚至 100,这样你赋予了色情图片更大的权重,让算法将色情图分类为猫图时,错误率这个项快速变大。这个例子里,你把色情图片分类成猫这一错误的惩罚权重加大 10 倍。

在这里插入图片描述
如果你希望得到归一化常数,在技术上,就是𝑤(𝑖)对所有𝑖求和,这样错误率仍然在 0 和1 之间,即:
在这里插入图片描述
加权的细节并不重要,实际上要使用这种加权,你必须自己过一遍开发集和测试集,在开发集和测试集里,自己把色情图片标记出来,这样你才能使用这个加权函数。

但粗略的结论是,如果你的评估指标无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标。这是定义评估指标的其中一种可能方式(上述加权法)。评估指标的意义在于,准确告诉你已知两个分类器,哪一个更适合你的应用。就这个视频的内容而言,我们不需要太注重新错误率指标是怎么定义的,关键在于,如果你对旧的错误率指标不满意,那就不要一直沿用你不满意的错误率指标,而应该尝试定义一个新的指标,能够更加符合你的偏好,定义出实际更适合的算法。

你可能注意到了,到目前为止我们只讨论了如何定义一个指标去评估分类器,也就是说,我们定义了一个评估指标帮助我们更好的把分类器排序,能够区分出它们在识别色情图片的不同水平,这实际上是一个正交化的例子。

在这里插入图片描述
我想你处理机器学习问题时,应该把它切分成独立的步骤。一步是弄清楚如何定义一个指标来衡量你想做的事情的表现,然后我们可以分开考虑如何改善系统在这个指标上的表现。你们要把机器学习任务看成两个独立的步骤,用目标这个比喻,第一步就是设定目标。所以要定义你要瞄准的目标,这是完全独立的一步,这是你可以调节的一个旋钮。如何设立目标是一个完全独立的问题,把它看成是一个单独的旋钮,可以调试算法表现的旋钮,如何精确瞄准,如何命中目标,定义指标是第一步。

然后第二步要做别的事情,在逼近目标的时候,也许你的学习算法针对某个长这样的成本函数优化, J = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) J =\frac{1}{m}\sum_{i=1}^m L(\hat{y}^{(i)},y^{(i)}) J=m1i=1mL(y^(i),y(i)),你要最小化训练集上的损失。你可以做的其中一件事是,修改这个,为了引入这些权重,也许最后需要修改这个归一化常数,即:
在这里插入图片描述
再次,如何定义𝐽并不重要,关键在于正交化的思路,把设立目标定为第一步,然后瞄准和射击目标是独立的第二步。换种说法,我鼓励你们将定义指标看成一步,然后在定义了指标之后,你才能想如何优化系统来提高这个指标评分。比如改变你神经网络要优化的成本函数𝐽。

在继续之前,我们再讲一个例子。假设你的两个猫分类器𝐴和𝐵,分别有用开发集评估得到 3%的错误率和 5%的错误率。或者甚至用在网上下载的图片构成的测试集上,这些是高质量,取景框很专业的图像。但也许你在部署算法产品时,你发现算法𝐵看起来表现更好,即使它在开发集上表现不错,你发现你一直在用从网上下载的高质量图片训练,但当你部署到手机应用时,算法作用到用户上传的图片时,那些图片取景不专业,没有把猫完整拍下来,或者猫的表情很古怪,也许图像很模糊,当你实际测试算法时,你发现算法𝐵表现其实更好。

在这里插入图片描述
这是另一个指标和开发集测试集出问题的例子,问题在于,你做评估用的是很漂亮的高分辨率的开发集和测试集,图片取景很专业。但你的用户真正关心的是,他们上传的图片能不能被正确识别。那些图片可能是没那么专业的照片,有点模糊,取景很业余。

所以方针是,如果你在指标上表现很好,在当前开发集或者开发集和测试集分布中表现很好,但你的实际应用程序,你真正关注的地方表现不好,那么就需要修改指标或者你的开发测试集。换句话说,如果你发现你的开发测试集都是这些高质量图像,但在开发测试集上做的评估无法预测你的应用实际的表现。因为你的应用处理的是低质量图像,那么就应该改变你的开发测试集,让你的数据更能反映你实际需要处理好的数据。

但总体方针就是,如果你当前的指标和当前用来评估的数据和你真正关心必须做好的事情关系不大,那就应该更改你的指标或者你的开发测试集,让它们能更够好地反映你的算法需要处理好的数据。

有一个评估指标和开发集让你可以更快做出决策,判断算法𝐴还是算法𝐵更优,这真的可以加速你和你的团队迭代的速度。所以我的建议是,即使你无法定义出一个很完美的评估指标和开发集,你直接快速设立出来,然后使用它们来驱动你们团队的迭代速度。如果在这之后,你发现选的不好,你有更好的想法,那么完全可以马上改。对于大多数团队,我建议最好不要在没有评估指标和开发集时跑太久,因为那样可能会减慢你的团队迭代和改善算法的速度。本视频讲的是什么时候需要改变你的评估指标和开发测试集,我希望这些方针能让你的整个团队设立一个明确的目标,一个你们可以高效迭代,改善性能的目标。

1.8 为什么是人的表现?(Why human-level performance?)

在过去的几年里,更多的机器学习团队一直在讨论如何比较机器学习系统和人类的表现,为什么呢?

我认为有两个主要原因,首先是因为深度学习系统的进步,机器学习算法突然变得更好了。在许多机器学习的应用领域已经开始见到算法已经可以威胁到人类的表现了。其次,事实证明,当你试图让机器做人类能做的事情时,可以精心设计机器学习系统的工作流程,让工作流程效率更高,所以在这些场合,比较人类和机器是很自然的,或者你要让机器模仿人类的行为。

在这里插入图片描述

我们来看几个这样的例子,我看到很多机器学习任务中,当你在一个问题上付出了很多时间之后,所以𝑥轴是时间,这可能是很多个月甚至是很多年。在这些时间里,一些团队或一些研究小组正在研究一个问题,当你开始往人类水平努力时,进展是很快的。但是过了一段时间,当这个算法表现比人类更好时,那么进展和精确度的提升就变得更慢了。也许它还会越来越好,但是在超越人类水平之后,它还可以变得更好,但性能增速,准确度上升的速度这个斜率,会变得越来越平缓,我们都希望能达到理论最佳性能水平。随着时间的推移,当您继续训练算法时,可能模型越来越大,数据越来越多,但是性能无法超过某个理论上限,这就是所谓的贝叶斯最优错误率(Bayes optimal error)。所以贝叶斯最优错误率一般认为是理论上可能达到的最优错误率,就是说没有任何办法设计出一个𝑥到𝑦的函数,让它能够超过一定的准确度。

例如,对于语音识别来说,如果𝑥是音频片段,有些音频就是这么嘈杂,基本不可能知道说的是什么,所以完美的准确率可能不是 100%。或者对于猫图识别来说,也许一些图像非常模糊,不管是人类还是机器,都无法判断该图片中是否有猫。所以,完美的准确度可能不是 100%。

而贝叶斯最优错误率有时写作 Bayesian,即省略 optimal,就是从𝑥到𝑦映射的理论最优函数,永远不会被超越。所以你们应该不会感到意外,这紫色线,无论你在一个问题上工作多少年,你永远不会超越贝叶斯错误率,贝叶斯最佳错误率。

在这里插入图片描述

事实证明,机器学习的进展往往相当快,直到你超越人类的表现之前一直很快,当你超越人类的表现时,有时进展会变慢。我认为有两个原因,为什么当你超越人类的表现时,进展会慢下来。一个原因是人类水平在很多任务中离贝叶斯最优错误率已经不远了,人们非常擅长看图像,分辨里面有没有猫或者听写音频。所以,当你超越人类的表现之后也许没有太多的空间继续改善了。但第二个原因是,只要你的表现比人类的表现更差,那么实际上可以使用某些工具来提高性能。一旦你超越了人类的表现,这些工具就没那么好用了。

我的意思是这样,对于人类相当擅长的任务,包括看图识别事物,听写音频,或阅读语言,人类一般很擅长处理这些自然数据。对于人类擅长的任务,只要你的机器学习算法比人类差,你就可以从让人帮你标记数据,你可以让人帮忙或者花钱请人帮你标记例子,这样你就有更多的数据可以喂给学习算法。下周我们会讨论,人工错误率分析,但只要人类的表现比任何其他算法都要好,你就可以让人类看看你算法处理的例子,知道错误出在哪里,并尝试了解为什么人能做对,算法做错。下周我们会看到,这样做有助于提高算法的性能。你也可以更好地分析偏差和方差,我们稍后会谈一谈。但是只要你的算法仍然比人类糟糕,你就有这些重要策略可以改善算法。而一旦你的算法做得比人类好,这三种策略就很难利用了。所以这可能是另一个和人类表现比较的好处,特别是在人类做得很好的任务上。

为什么机器学习算法往往很擅长模仿人类能做的事情,然后赶上甚至超越人类的表现。特别是,即使你知道偏差是多少,方差是多少。知道人类在特定任务上能做多好可以帮助你更好地了解你应该重点尝试减少偏差,还是减少方差,我想在下一个视频中给你一个例子。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1798448.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GAT1399协议分析(9)--图像上传

一、官方定义 二、wirechark实例 有前面查询的基础,这个接口相对简单很多。 请求: 文本化: POST /VIID/Images HTTP/1.1 Host: 10.0.201.56:31400 User-Agent: python-requests/2.32.3 Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive content-type:…

“能监测、会预警、快处置”,51WORLD智慧应急数字孪生解决方案

我国自然灾害多发,安全生产基础薄弱。加之城市运行日益复杂,安全隐患、安全问题不断涌现,探索构建全新的应急管理体系和能力迫在眉睫。 面对新形势,依托数字孪生、云计算、大数据、人工智能等新一代信息技术打造统分结合、协调联…

Elastic Search (ES)Java 入门实操(1)下载安装、概念

实现数据查询代码:Elastic Search(ES)Java 入门实操(2)搜索代码-CSDN博客 Elastic Search 官方描述,是一个分布式的搜素数据分析引擎,可以集中存储数据,快速完成搜索,微调…

怎么把wmv格式转换成mp4?四种将wmv转成MP4格式的方法

怎么把wmv格式转换成mp4?在微软操作系统中,我们经常会遇到wmv格式的视频文件。这种由微软开发的视频格式在微软平台上有很好的兼容性,但它也存在一些被忽视的缺点。首先,wmv格式支持数字版权管理,这意味着某些视频可能…

k8s-pod参数详解

目录 概述创建Pod编写一个简单的Pod添加常用参数为Pod的容器分配资源网络相关Pod健康检查启动探针存活探针就绪探针 作用整个Pod参数配置创建docker-registry 卷挂载 结束 概述 k8s中的pod参数详解。官方文档   版本 k8s 1.27.x 、busybox:stable-musl、nginx:stable-alpine3…

高性价比蓝牙耳机排行榜10强,四大高性价比品牌推荐

在众多的品牌和产品中,如何选择一款性价比高、音质出众、功能齐全的蓝牙耳机,成为了许多消费者关注的焦点,作为一个蓝牙耳机的老油条,我特别为大家精选了高性价比蓝牙耳机排行榜的10强,并重点推荐四大高性价比品牌&…

重庆公司记账代理,打造专业财务管理解决方案的领先企业

重庆公司记账代理,作为专业的财务管理服务提供商,我们的目标是为公司的经营管理和决策提供科学、准确的财务数据支持,我们通过长期的专业经验和对市场的深入理解,为您提供一站式的记账服务和财务咨询。 专业团队 我们拥有一支由经…

阿里云ECS实例镜像本地取证

更新时间:2024年03月21日10:09:37 1. 说明 很多非法案件中,服务器是直接搭建在阿里云上的,比如我们在拿到OSSKey之后(技术方法、其它方法等),可以将涉案服务器镜像导出,在本地进行取证分析。 …

虚拟机上安装 VB6 mini,中文乱码

一、网址下载 VB6 mini(普通下载即可) https://ccswust.lanzoui.com/i4mZrhf8ipi 二、VB6-Mini_20160110,放入虚拟机,双击进行安装 三、点开VB6 Mini后,中文乱码(以Win10为例 开始–Settings–Time &…

使用opencv在图像上画带刻度线的十字线,以图像中心点为0点

使用OpenCV在图像上绘制带刻度线的十字线&#xff0c;可以通过以下步骤实现。我们将首先找到图像的中心点&#xff0c;然后绘制水平和垂直线&#xff0c;并在这些线的适当位置绘制刻度线。以下是详细的C代码示例&#xff1a; #include<opencv2\opencv.hpp> //画十字标注…

职场奋斗10年,到此结束,享年38

职场奋斗10年&#xff0c;到此结束&#xff0c;享年38 昨天一个粉丝&#xff0c;上来就给我转2000大洋&#xff0c;说有问题想问我&#xff0c;看完他的问题&#xff0c;直接把钱退给了他&#xff0c;估计又有人要说我脑壳长包了。 主动送上门的钱谁不想要&#xff1f;主要是…

【人工智能】第三部分:ChatGPT的应用场景和挑战

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

深入探索:十种流行的深度神经网络及其运作原理

算法 深入探索&#xff1a;十种流行的深度神经网络及其运作原理一、卷积神经网络&#xff08;CNN&#xff09;基本原理工作方式 二、循环神经网络&#xff08;RNN&#xff09;基本原理工作方式 三、长短期记忆网络&#xff08;LSTM&#xff09;基本原理工作方式 四、门控循环单…

Win10系统无法安装msi文件问题

winR输入services.msc打开服务 找到Windows Installer并启动 输入msiexec /package “msi文件路径”

SpringBoot集成ireport打印,并解决PDF中文显示问题

1、相关jar包引入 <!-- ireport报表相关 start--><dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>4.5.1</version><exclusions><exclusion><groupId…

Django视图层探索:GET/POST请求处理、参数传递与响应方式详解

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

docker pull image 报错 dial tcp 31.13.88.169:443: i/o timeout

一、错误重现 error pulling image configuration: download failed after attempts6: dial tcp 31.13.88.169:443: i/o timeout 在执行docker build构建镜像&#xff0c;拉取镜像时报错 或者直接docker pull镜像时报错 实质都是拉取镜像源超时报错&#xff0c;那么就是镜像源…

[数据集][目标检测]室内积水检测数据集VOC+YOLO格式761张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;761 标注数量(xml文件个数)&#xff1a;761 标注数量(txt文件个数)&#xff1a;761 标注类别…

《接口自动化测试框架》代码片段 - 文件和目录操作封装

抛砖引玉 在Python中&#xff0c;文件和目录的操作是一项基础且频繁的任务。 Python提供了一系列强大的内置函数和模块&#xff0c;使得这些操作变得既简单又高效。 这些工具极大地简化了对文件和目录的各种操作&#xff0c;从创建新文件、读取数据、写入内容&#xff0c;到删除…

易语言QQ机器人2.0源码

易语言QQ机器人2.0 效果图源码说明领取源码下期更新预报 效果图 源码说明 .程序集 Smessage, VJ_DirectUI .程序集变量 Format, StringFormat.子程序 _初始化, , , 当基于本类的对象被创建后&#xff0c;此方法会被自动调用.子程序 _销毁, , , 当基于本类的对象被销毁前&#x…