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

目录

  • 第三门课 结构化机器学习项目(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,就是从𝑥到𝑦映射的理论最优函数,永远不会被超越。所以你们应该不会感到意外,这紫色线,无论你在一个问题上工作多少年,你永远不会超越贝叶斯错误率,贝叶斯最佳错误率。

在这里插入图片描述

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

智能视频监控平台LntonCVS视频融合共享平台保障露营安全解决方案

在当今社会,都市生活的快节奏和压力使得越来越多的人渴望逃离城市的喧嚣,寻求一种短暂的慢生活体验。他们向往在壮丽的山河之间或宁静的乡村中露营,享受大自然的宁静与美好。随着露营活动的普及,露营地的场景也变得更加丰富多样&a…

Three.js和Babylon.js,webGL中的对比效果分析!

hello,今天分享一些three.js和babylon.js常识,为大家选择three.js还是babylon.js做个分析,欢迎点赞评论转发。 一、Babylon.js是什么 Babylon.js是一个基于WebGL技术的开源3D游戏引擎和渲染引擎。它提供了一套简单易用的API,使开发…

UFS Explorer Professional Recovery: 如何从启用了 mSATA 缓存的 Drobo 设备中恢复数据

天津鸿萌科贸发展有限公司是 UFS Explorer Professional Recovery 数据恢复软件的授权代理商。 UFS Explorer Professional Recovery 数据恢复软件提供综合性的解决方案,用于解决复杂的数据恢复案例,包括那些采用特殊存储技术的案例,或介质受…

如何解决访问网站时IP被限制的问题?

在互联网上,用户可能会面临一个令人困扰的问题——当尝试访问某个特定的网站时,却发现自己的IP地址被该网站屏蔽。 IP地址被网站屏蔽是一个相对常见的现象,而导致这种情况的原因多种多样,包括恶意行为、违规访问等。本文将解释IP地…

jupyter notebook默认工作目录修改

jupyter notebook默认工作目录修改 1、问题2、如何修改jupyter notebook默认工作目录 1、问题 anaconda安装好之后,我们启动jupyter notebook会发现其默认工作目录是在C盘,将工作目录放在C盘会让C盘很快被撑爆,我们应该将jupyter notebook默…

日志分析集群最新版

日志分析集群-8版本 作者:行癫(盗版必究) 第一部分:Elasticsearch 一:环境准备 1.简介 ​ 部署模式:es集群采用无主模式 ​ es版本:8.13.4 ​ jdk版本:使用es内嵌的jdk21&#x…

易语言QQ机器人2.0源码

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

【论文阅读】MODELING AND SOLVING THE TRAVELING SALESMAN PROBLEM WITH PRIORITY PRIZES

文章目录 论文基本信息摘要1.引言2. INTEGER QUADRATIC PROGRAM FOR TSPPP3. MIXED INTEGER LINEAR PROGRAMS FOR TSPPP4. TABU SEARCH ALGORITHM FOR TSPPP5. COMPUTATIONAL RESULTS6. CONCLUDING REMARKS补充 论文基本信息 《MODELING AND SOLVING THE TRAVELING SALESMAN P…

鸿蒙开发教程:新手入门必看

一 开发设备要求 Windows环境运行要求: 根据华为官方文档,为了开发基于鸿蒙系统的应用,电脑的配置需求如下: 操作系统:建议至少为Windows 10 64位或Windows 11 64位版本。内存:至少需要8GB以上。硬盘空间…

MyBatis中 set标签

1、set标签特点: set标签用于更新语句中set标签解析为set关键字set可以去除跟新语句中无用的逗号通常是和if标签一起使用 2、set标签的使用 编写接口方法编写sql语句 注意 当set标签中有条件成立时就会附加set关键字,字段为null时该列不会被更新。se…

usock: No such file or directory

在搭建T113的tina系统时,运行ubusd报错,“usock: No such file or directory” rootTinaLinux:/# ifup -a Failed to connect to ubus /sbin/ifup: line 51: /sbin/wifi: not foundrootTinaLinux:/# ubusd usock: No such file or directory因为运行 ubu…

坐实了!“神坛企业”也是草台班子

越接近真相,越觉得荒诞!这次就算删稿也得说两句,KP基于BMC的“可信计算”,正在沦为业内笑柄。戳破那层保护色,施施然端坐神坛的某厂,内里可能也是个草台班子。 近期,网上流传着几页HW给客户洗脑…

HTML静态网页成品作业(HTML+CSS)—— 金宝贝儿童教育机构介绍网页(2个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有2个页面。 二、作品演示 三、代…

图解通用网络IO底层原理、Socket、epoll、用户态内核态······

LInux 操作系统中断 什么是系统中断 这个没啥可说的,大家都知道; CPU 在执行任务途中接收到中断请求,需要保存现场后去处理中断请求!保存现场称为中断处理程序!处理中断请求也就是唤醒对应的任务进程来持有CPU进行需要…

2024下《系统集成项目管理工程师》50个高频考点汇总!值得收藏

宝子们!5月软考考完了,终于可以考系统集成了! 整理了50个高频考点,涵盖全书90%考点,先把这个存下!再慢慢看书,边看书边背这个 1、信息安全的基本要素有: (1&#xff09…

游戏开发指南,一个充满想象力和机遇的职业领域!

游戏是软件里常见的一种类型,是常见的一种计算机娱乐方式。以前的游戏偏中大型游戏居多,现在发展为小型游戏较多,尤其是微信游戏的出现更加体现了这个特点。 随着游戏产业的蓬勃发展,越来越多的公司开始考虑将游戏制作外包给专业…

项目进度管理必备:15款最佳项目进度跟踪工具推荐

15好用的款主流项目进度管理软件:PingCode、Worktile、Trello、Tower、Asana、Smartsheet、Teambition、ClickUp、Wrike、Monday.com、Notion、禅道、飞书、云效、蓝凌。 严格的进度管理有助于更好地控制项目进展,提升团队效率,最终实现项目成…

使用 Django 构建动态网页

文章目录 创建 Django 项目和应用程序创建 HTML 模板创建视图函数配置 URL 路由运行 Django 服务器使用 Django 模板语言 Django 是一个流行的 Python Web 框架,它能够帮助开发人员快速构建强大的 Web 应用程序。在 Django 中,HTML 是用于呈现网页内容的…

Linux C语言:指针和指针变量

一、指针的作用 使程序简洁、紧凑、高效有效地表示复杂的数据结构动态分配内存能直接访问硬件能够方便的处理字符串得到多于一个的函数返回值 二、内存、地址和变量 1、内存地址 2、变量和地址 1)变量用来在程序中保存数据 比如: int k 58; //声明一个int变…