coursera 吴恩达 Structuring Machine Learning Projects 笔记

本文探讨了机器学习中的核心概念,包括正交化、单一评估指标、偏差与方差分析,以及如何构建有效的训练、开发和测试数据集。文章还深入讲解了误差分析、数据集分布的重要性、多任务学习和端到端深度学习的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发现找不到官网的笔记,简单总结一下。
看的效果不咋地,看的时候超困,精神不集中,讲了很多方法,但是有些暂时用不上,以后有问题再去看看视频吧,这里写得可能有疏漏。

Week 1

1.2 Orthogonalization

正交化。就是说,比如老式电视机调节屏幕水平移动一个旋钮,垂直移动一个旋钮,旋转角度一个旋钮,如果一个旋钮同时操作两个变量的话,那么就会难调好屏幕,这就是正交化的思想,一个旋钮仅调节一个变量。
在这里插入图片描述
然后用在ML啥的也一样,对于每一个xx集有自己一组旋钮,然后不断调整:
在这里插入图片描述
这里大致理解就好了,详细会在下面讲。

1.3 Single number evaluation metric

单一的量化评估指标。
比如判断是不是猫,Precision是指,对于A分类器,给一幅图片,正确判断出是猫的概率是95%,然后Recall是指给一幅猫的图,正确判断出是猫的概率为90%。显然我们希望Precision和Recall两个概率都高,于是我们用F1来衡量(前面的课有提到的比较好的方法,不至于其中一个偏低),然后看出是A分类器更好。
在这里插入图片描述
对于喜欢猫的国家,有前4项预测错误的百分比,我们可以平均一下,采用平均错误最少的那一个算法:
在这里插入图片描述

1.4 Satisficing and Optimizing metric

如果有多项指标,比如有准确率和运行时间两项指标,那么我们可以选其中一个指标为优化指标(Optimizing metric),剩下的为满足指标(Satisficing metric):

对于多项指标的情况下,我们采取的方案是:保证达成满足指标的情况下,选择最好的优化指标。比如要求 running time 在 100ms 内,所以排除C分类器,A和B中B的准确率最高,所以最终我们选择了B分类器。如果有N个指标,那么就以1个 optimizing metric 和 N-1 个 satisficing metric。

1.5 Train/dev/test distributions

如何构建 train/dev/test set。(注:dev就是开发(development)集或者说是之前学到的cv集)比如有8个国家(地区)的数据集,如果取前4个为 dev set,后4个为test set,其实是很不好的,因为算法只拟合了前4个国家(地区),而没有拟合后4个,而后4个和前4个没有必然联系。正确的方法应该是打乱8个国家(地区),然后放到 dev 和 test set 中,这样这两个 set 都有八个国家(地区)的数据了。
在这里插入图片描述
目标选错了就好比一开始瞄准左边的靶子,结果实战的时候其实计算分数的是右边的靶子:
在这里插入图片描述
总结,dev set 和 test set 要服从同一分布:
在这里插入图片描述

1.6 Size of the dev and test sets

如何划分3个set:旧的方法是622开,但是因为现代深度学习中已经能够拿到很多数据,而测试集只需要足够地信服就行了,不需要622,可以使98/1/1这样来划分,比如1000000,就有10000个测试集或者开发集,已经足够了。另外,2个set也行,但是更推荐使用三个set。
在这里插入图片描述

1.7 When to change dev/test sets and metrics

什么时候要修改指标。
比如给用户推送猫猫图的算法中,要去辨认是否是猫,对此,A比B的错误率低,但是A会推送色/qing/图,而B不会,所以B比A好。因此我们这时候会调整公式,比如把(黄图预测成猫的情况)的误差权重设成10或100,这样就能挑出不经常推送黄图且能经常成功辨认出猫猫图的分类器。(这里具体怎么修改公式暂不细讲)
在这里插入图片描述
对此,定义一个指标去给分类器排序,就是正交化的例子(orthogonalization),他有下面两个步骤,一个是定义好计算误差的式子/指标,另一个是分开考虑如何改善系统咋这个指标上的表现。
在这里插入图片描述

1.8 Why human-level performance?

贝叶斯最优误差(Bayes optimal error):理论上可能达到的最优误差,有个别人博客摘抄的,wiki打不开不知道为啥,还有一个掘金的
在这里插入图片描述
在这里插入图片描述
在ai学习的准确率上超过人类之后,上升的速度变慢了,最后到达不了贝叶斯最优误差。一个原因是人类的准确率和贝叶斯比较接近,在两者之间的话,提升的空间不大,另一个是当准确率低于人类的时,可以用一些"工具"来提高,一旦超过人类的,提高就没这么快乐。
在这里插入图片描述
所说的"工具":
在这里插入图片描述
在这里插入图片描述

1.9 Avoidable bias

可避免偏差(avoidable bias)
在猫分类器上,得到了一些结果后,我们要留意人类的错误率。有时候准确率不是越高越好,有时候我们不希望它超过人类,好过头了。比如说图片很模糊,人类也分不清里头有没有猫,这个时候机器分不分得清已经没有意义了(自己的理解)。而且人类的误差接近于贝叶斯误差,贝叶斯误差是无法超越的,除非过拟合,因此我们不会希望超过贝叶斯/人类的误差。下面会讲专注于(focus on)哪块的方法。注意ppt里面focus on bias的意思是降低bias的意思,variance同理。
在这里插入图片描述
我们把 traininng error 与 humans error 之间的差距叫做 avoidable bias,把 training error 与 dev error 之间的差距叫做 variance。因为人类的误差率跟贝叶斯有时比较接近,这是可以用人类的代替贝叶斯的。

左列中,avoidable bias 比 variance 大,所以证明提升的潜力更大,因此我们知道应该专注于 降低 bias 上,得到的回报更多,右列则应该专注于 variance 上。
在这里插入图片描述

1.10 Understanding human-level performance

选择人类(水平)的误差在精确率比较高的时候很重要。在放射性图片的判断中,对于不同人有不同的错误率,怎么选择人类的错误率对于研究是有影响的,特别是你精确率比较高的时候。然后我们知道贝叶斯应该比人类最低的错误率要低,在这里,至少是小于 0.5%的
在这里插入图片描述
左边和中间这两列,选择普通人还是专家团队的错误率都不要紧,因为不管多少,我们都知道要 focus on 的是 bias 还是 variance。但是右边那一列,因为training error和dev error和人类的error都很接近,选择不同的人类error会决定你是 focus on bias 还是 variance,这时候就会难以抉择。所以解释了:在精度比较高的时候,提升速度为什么会停滞不前的问题。
在这里插入图片描述
在这里插入图片描述
其实这一节与之前 最重要的区别 是,以前的bias都是跟0%比较的,就是说把人的误差当做0%,然后看看是bias大还是variance大,然后觉得 focus on 在哪。这个思想对于人类做得很好的事情上没有太多影响,但是对于一些难以分辨的音频等,人类的误差率比0%稍高的话,这个时候就要考虑到更好的贝叶斯误差(人的误差接近于贝叶斯,就是用人的误差代替贝叶斯误差(吧)),帮助你更好地估计可避免误差(avoidable bias)和方差(variance)来做出更好的优化策略。(还不太清楚就再看一次视频8)
在这里插入图片描述

1.11 Surpassing human-level performance

在 scenario A 中,training error比human的都低,然后可以像之前一样得出研究的方向是variance。但是 B 中,因为已经超过了人类,数据不足,所以传统判断方法不行了,优化的速度降低了。然后在非自然感知领域,机器经常超过人类。
在这里插入图片描述

1.12 Improving your model performance

你们已经学过正交化 如何设置开发集和测试集
用人类水平代表贝叶斯误差 以及如何估计可避免偏差和方差 让我们把这些结合成一套准则 用于改进你的学习算法

两个监督学习的基本原则,一个是 train set 做得好(avoidable bias低),另一个是在 train set 做得好后,能够推广到 dev set(开发集)和 test set 也做得好(Variance低)
在这里插入图片描述
最后是方法归纳。
在这里插入图片描述
(更详细的笔记)
在这里插入图片描述

测验

在这里插入图片描述
在这里插入图片描述
虽然加进去会影响分布,但是还是要加。
在这里插入图片描述

在这里插入图片描述
因为是从dev set中挑的分类器做test set,所以"more data"是加在test set上,而不是training set上。
在这里插入图片描述
调整评估指标才是最先需要做的。
在这里插入图片描述
买更好的机器也是可以的。
在这里插入图片描述

Week 2

2.1 Carrying out error analysis

误差分析。
假设在做猫猫图的分类,发现当前效果不好,但有几个地方可以优化的,有的是把狗认成猫,有些是把大猫认成了猫等,有种方法是人工观察100张错误分类的图片,然后把错误的地方记录下来并进行计算百分比,优先解决错因最多的那些。比如下图优先解决第二个和第三个错因。

这个很重要,如果盲目地优化,比如去优化第一个错因,那么及时这个问题很完美地解决了,也只能降低8%的错误率。
在这里插入图片描述

2.2 Cleaning up incorrectly labeled data

监督式学习的问题中,如果你发现有些输出标签Y给标错了,你值得花费时间去修正这些标签吗?
如果只是偶然的,那就可以随意,如果有大量的数据影响,那就有问题了。不管是在train、dev还是test set里面都一样。

比如下面蓝色的例子,左边的话还是去解决别的原因吧,右边的话,因为占比比较多,然后方便操作。。所以优先解决。
在这里插入图片描述
然后如果要修改dev/test set的话有下面要注意的点
第一个要保证dev和test set来自同分布,但是training和 dev/test 稍微分布不同也是可以的,上次作业的第5题,可以把新的分布稍微不同的图片加入training set,但是不能加入test set。
然后是检验判断错误的例子时,也要检验判断正确的例子,有的时候可能是算法运气好,不过通常不这么做,因为数据很大。
然后因为training set很大,不应该把时间花在上面,所以可以不处理。而且因为即使 training set 和 dev/test set 分布稍微不同可以,DL在这方面很鲁棒的。
在这里插入图片描述

2.3 Build your first system quickly, then iterate

如果刚刚接触的话,先迅速打造一个简单的神经网络,然后迭代,尽量不要在第一次尝试就建造很复杂的神经网络。有了结果之后,可以做bias/variance和上两节的误差分析,来找到优先处理的方向并慢慢优化。
在这里插入图片描述

2.4 Training and testing on different distributions

处理 training 和 test set 不同分部的方法。
假设要从app上辨认猫猫图,那么有200000张清晰的网上爬下来的图片,有10000模糊的从app上弄下来的图片。这两个图片分布有些不一样,那么如何分配呢。

方法1不推荐,就是把一个210000张随机分配到3个数据集中,但是这样的话,你的dev/test set的图片大部分是webpage的,其实跟你的目标(app的猫猫图)不一致了。
因此方法2更好,就是把10000张分成一半,5000张放在training set中,2500张放在dev set,2500张放在test set中。也可以5000张放dev,5000放test中,training一张不放也行。
在这里插入图片描述

2.5 Bias and Variance with mismatched data distributions

通过估计学习算法的偏差和方差 能帮你确定下一步工作的优先级 但当你的训练集 开发集 测试集 来自不同的分布时 偏差和方差的分析方法也会相应变化

以上一节的猫猫图为例,如果你的 training data 和 dev data 不同就需要添加一个 training-dev set,这个 training-dev set 和 training set 同分布,但是没有被训练过。在 trainging-dev set 和 dev set 之间的差距称为 data mismatch(problem),数据不匹配(问题),反应你算法擅不擅长处理不同分布的、但你又关心的数据
在这里插入图片描述
不同error之间的所体现的,额,东西
dev 和 test error 的差距说明的是对 dev set 的过拟合程度。如果差距大就需要收集更多 dev data
最后,系统解决 data mismatch 问题的方法还没有,但有些尝试(try)可以使用 在这里插入图片描述

2.6 Addressing data mismatch

出现了数据不匹配后,首先先人工分布不同的原因,然后让 training set 的数据更接近 dev/test set 的数据,或者收集更多接近 dev/test set 的数据。
在这里插入图片描述
比如说车内后视镜对人语音辨认中有数据分布不同的问题,然后发现 dev/test set 有一些噪音,但是training set中是清晰的音频,因此要把清晰的音频加上噪音,如果清晰的音频有10000hours,而car noise有1hours,就是把1hour复制10000份,然后与清晰的音频混合,成为新的training set,现在数据分布就更接近了。不过会有个风险就是算法可能会对这1hour的噪音过拟合,虽然人耳听起来是噪音都差不多,但是对于所有噪音的集合,这1hour的噪音只是其中很小一部分,所以可能容易过拟合,如果是有10000hours的噪音与清晰的音频1比1混合会更好。这种方法叫人工数据合成,很好用但是也有缺点。
在这里插入图片描述

2.7 Transfer learning

迁移学习,可以把一个训练好的神经网络,把输出层(或者输出层及其附近哪几层)换了,去识别一个同类的东西,比如把识别猫的神经网络,最后几层换掉,变成识别放射性图片的神经网络。注意,这里是由大的数据,变成识别小的数据,反过来就不行了。

这个应用是用于,你原本的神经网络有很多数据,比如这里猫猫图有很多,但是放射性图片只有很少,虽然两个是不同的方向,但是猫猫图的神经网络,前期可以给出图形识别的知识,来为你识别放射性图片做铺垫。用语音识别的例子会更好,比如原来是识别人的语音,后面改成识别某个唤醒词,未修改的网络层可以学到人类声音的特征。

如果你只有一个小的放射数据集, 你可以只重新训练最后一层的权值,同时保留其它所有参数。 如果你有足够的数据, 你也可以重新训练神经网络的其余所有层。 我们的经验就是如果你有一个小规模的数据集, 那么就去重新训练最后一层和输出层的神经网络, 或者你也可以训练最后一到两层的神经网络。 但是如果你有大量的数据, 你或许可以对这个神经网络的所有参数都进行重新训练。

迁移学习中,如果你对神经网络的所有参数进行重新训练, 那么这样训练的初始化阶段 有时候被我们叫做预训练(pre-training) 原因是,你在是使用图像识别的数据 来预初始化(pre-initialize)或者说预训练神经网络的权重。 然后如果你在之后对所有的权重进行更新, 那么在放射扫描的数据上的训练有时候被我们叫做微调。
在这里插入图片描述
在这里插入图片描述

2.8 Multi-task learning

transfer learning 是单个对单个,任务A迁移到任务B
这里多任务学习是让同一个神经网络同时做几件事情,比如分类出一张图片有没有行人、车、停车标志、交通信号灯4个东西。和 softmax 不同的是,softmax 一张图就是一个分类,比如是一张车的图片,但是多任务学习是一张图片可以打多个 tag
在这里插入图片描述
所以用用4个网络训练出来也行,但是神经网络一些早起特征在识别物体时都会用到,也可以4合1。

然后 Y 有些地方没有给出 0 和 1 也行,因为这里 loss 定义是只有 0 和 1 才会加入计算。
在这里插入图片描述
以下3件事为真时,多分类学习有用

其中第二点不是硬性要求 但我看到很多成功的多任务学习,他们 每个单项任务的数据量非常相似。 你会回想起迁移学习,从任务A 迁移到任务B。 如果任务A中100万个数据,任务B中有1000个 数据,那么从百万个数据中训练的值 能够帮助增强数据集较少的任务B 那么多任务学习呢? 多任务学习中,你一般会有多于两项的任务 前面例子中有四项,我们假设有100个任务。 你通过多任务学习,在同一时间内 试图识别100个类别。 每个任务中你有1000个例子 如果你只关注一个任务的准确率, 让我们看第100个任务,把它叫做A100 如果你想单独地完成这项最后的任务, 你只有1000个例子来训练这一项任务, 这1个任务由其他99个任务进行训练 有9.9万个样本是一个很大的推动, 它们可以给很多的信息来增强,否则在第 100个任务中只靠相对较小的1000个数据。 同样地,其余99个任务也有同样的数据也 得到其他任务信息来帮助训练。
第二点不是硬性要求,但我更倾向于这样 为了增强多任务学习,如果你集中在任一任务上, 其他任务比单一任务合计起来 有更多的数据。 一个方法是如果我们例子中有很多任务 每个任务中的数据也相当相似 但是关键是你在一个任务中已经有1000个例子 在其他任务中合计有远超过1000的数据, 其他任务可帮助你在最后的任务表现更好。

多任务学习唯一会降低性能的情况(和单个神经网络相比)是网络不够大。
在这里插入图片描述
实际上多任务学习要比迁移学习用得少得多。 我看到很多迁移学习的应用,你 你想通过一个小数量的数据来解决问题。 你找一个有大量数据的相关问题来学习 然后转移到这个新的问题。 所以如果你想解决一个机器学习问题 但你有一个相对较小得数据集,迁移学习可以帮助你。

What is end-to-end deep learning?

啥是端到端深度学习捏?
比如语音文本识别,端到端之前是用MFCC提取底层特征,然后是ML找到音位,然后把音位提取出来得到文本,现在端到端就是一步到位直接提取文本,(或者不用分割得很复杂)。
在这里插入图片描述
门禁上的人脸识别分为两个步骤,一个是先在图片上提取人脸,一个是把摄影拍到的人脸和已知的员工人脸做对比。分成两步走是因为两个的数据都很多,但时之前从从拍到的照片到员工人脸的数据却很少,所以分成两个子问题,如果一步到位的数据不多的话。
在这里插入图片描述
端到端和传统把问题分割的方法各有各的好处,如果数据很多的话,可以用端到端(注意也不是一定要一步到位,不过比起传统分割的方法要简化很多),如果数据较少的话,传统方法还是很准的。

2.10 Whether to use end-to-end deep learning

端到端的优缺点和使用的准则

第二个缺点就是 它排除了可能潜在有用的手工设计的成分 如果设计良好,手工设计的成分会带来有很大的帮助 如果它们限制了你算法的表现,它们也会变的有害 例如,当你强迫你的算法去以音素的方式思考 但是它已经自己找到一个更好的表示形式的时候 所以这是一把双刃剑,它又可能有害 也有可能有利,但是它的确倾向于有利的方面 当你在一个很小的训练集上训练的时候,手工设计的成分更有可能帮助到你

在这里插入图片描述
也许我们会想着一步到位(端到端),但是有时候因为数据不足、或是神经网络不够强大,不能够学到很复杂函数(function),还是要把步骤分开。
在这里插入图片描述

测验

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
即使 training set 和 dev/test set 分布稍微不同可以,DL在这方面很鲁棒的。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值