吴恩达深度学习之三《结构化机器学习项目》学习笔记
一、机器学习(ML)策略(1)
1.1 为什么要ML策略
当模型效果不够时,你可能想到很多好点子,究竟哪个有效呢,吴恩达表示见过一个团队用了六个月收集更多数据,结果对模型提升不大,浪费了六个月。一般深度学习课程中是不会讲到这些的,这些可以说是吴恩达的独家经验
1.2 正交化
比如开车,我们知道我们用方向盘控制左右,用油门和刹车控制速度,方向和速度是正交化的。如果一个赛车游戏,两个旋钮,一个是0.8*速度+0.2*转向,另一个是0.4*速度+0.6*转向,那么这个游戏将会非常难玩,这就是正交化的意义
正交化在ML策略中的应用分四步走
第一步,训练集拟合得好不好,通过增大神经网络规模,或选用其他优化算法比如Adam,等等,来调整
第二步,训练集拟合好了后,验证集拟合得好不好,可以通过正则化,或增大训练集规模来调整
第三步,验证集拟合好了后,测试集拟合得好不好,不好则证明在验证集上过拟合了,可以增大验证集规模来调整
第四步,训练集拟合好了后,在现实世界中表现效果如何,不好则说明验证集分布设置不正确或代价函数测量的指标不对,要通过改变验证集和代价函数来调整
需要注意的是,这也是为什么 early stopping 吴恩达不推荐用,因为同时影响一二步
1.3 单一数字评估指标
回忆机器学习学的内容,比如癌症预测,我们只要预测所有人都没有癌症,就可能得到99.5%以上的准确率,但这是没有意义的,所以需要其他评估指标
查准率(精确率、Precision):宁可漏掉,也不错杀,希望查出来的都是对的,我们预测为1的里,实际为 1 的是多少
查全率(召唤率、Recall):宁可错杀,也不漏掉,希望把对的都给查出来,实际为 1 的里,我们预测为 1 的是多少
根据你的需求可以选择其中一个指标
但是你可能会想综合考察这两个指标,然而事实证明这两个指标是矛盾的,一个升高,另一个就会降低
于是这就是单一数字评估指标原则,我们要用一个指标来判断
这是就是用 P 和 R 的调和平均数(倒数平均),称作 F1 分数
再比如对不同预测猫的模型,在中、美、日等不同地区效果不同,比方说算数平均很好,那就可以对所有地区做算数平均,用这个平均值来评估这些模型
最后我们来回顾一下机器学习学过的有关 P、R、F分数 的公式
1 | 0 | |
---|---|---|
预测为 1 | True Positive | False Positive |
预测为 0 | False Negative | True Negative |
这里的 True/False 表示正确与否,即预测的和实际的对不对
这里的 Positive/Negative 表示你预测的是 1 还是 0
F 分数,又称 Fβ 分数,当 β = 1 时,就是常用的 F1 分数
减小 β,可以增加 P 的重要性。增大 β,可以增加 R 的重要性。虽然不知道怎么推的,姑且当结论记下来。
1.4 满足和优化指标
有时候把一些指标加和并不容易,比如准确率和运行时间。
而且可能比方说运行时间在100ms内用户就不会在意这个运行时间,那也没有优化的意义,无需加入优化指标中
于是这就是把指标分为 优化指标 和 满足指标
上例中,运行时间就是满足指标,达到 100ms 内即可,然后尽全力去优化准确率这个优化指标
1.5 训练/开发/测试集划分
验证集又叫开发集QAQ,这个要了解。
本节课实际上就一个问题,验证集和测试集一定要同分布,不同分布就和换了一个目标无异。
一定要把整个数据集随机打散,再去划分。
1.6 开发集和测试集的大小
这个讲过了,很重要,一定要回去看,第二个课程的第一节课就是
1.7 什么时候该改变开发/测试集和指标
比方说识别猫的模型,验证集上,模型 A 准确率 3%,模型 B 准确率 5 %,但模型 A 会推送一些色情图片。那么显然 A 是我们无法接受了,应该选 B 更好。
既然直接按准确率来的指标我们无法满意,那就应当设计新的指标,这时就要设计新的验证集指标
比方说对
我们可以加入一个参数,比方说对 porn 惩罚 10 倍,或者 100 倍这样
当然,如果你想对 error 归一化也是没所谓的,毕竟倍数乘法该多少倍还是多少倍,如下所示
下一个例子还是,猫的识别,在验证集和测试集上表现都很好,你用的数据都是高分辨率的猫的图片,然而你的用户只关心能不能识别猫,随便拍的低分辨率图片,然后你的模型效果就不好,于是这时候你就要调整 验证和测试集 本身及其指标
1.8 为什么比较人的表现
如图所示,蓝线是人类一般的误差,绿线是贝叶斯最优误差
贝叶斯最优误差,可以简写作贝叶斯误差,是理论最小误差,是基于概率统计理论的这一分布的理想状态下的最小误差,即一个理论上限
在准确率小于人类水平时,提升起来很快,超过人类水平时,提升起来越来越难,原因如下
低于人类水平时,
人类可以标记数据,增大数据规模;
人类可以观察算法处理的例子,分析为什么算法做错了;
你也可以更好地分析误差和偏差。
1.9 可避免偏差
这节课主要讲的是工作重心放在降低偏差还是降低方差
有时候,尤其是在CV领域,人类误差和贝叶斯误差差别不是很大,我们可以把人类误差近似看作贝叶斯误差。
你在训练集上的偏差 与 我们理论上能达到的误差即贝叶斯误差间的差距,称作可避免偏差
例如 人类误差 2%,训练集误差 8%,验证集误差 10%,那么 可避免误差是 6%,方差的提升空间是 2%,于是这时候应该降低偏差
再例如 人类误差 7.5%,训练集误差 8%,验证集误差 10%,可避免误差只有 0.5%,于是这时候应该降低方差、降低过拟合
1.10 理解人的表现
例如,看一张放射科图片判断有无骨折,一般人类误差 3%,一般医生误差 1%,一个有经验的医生 0.7%,一个有经验的医生团队 0.5%
如果你要严格估计贝叶斯误差是多少,那么显然贝叶斯误差一定<=0.5%,可以拿0.5%估计
如果你要发表研究性论文或是部署系统,那么 1%基本就差不多了,可以把 1%看作贝叶斯误差的估计
一般来讲,可避免偏差和方差差距明显的话,我们很清楚该调哪个
那么举个例子,现在在训练集上误差0.7%,在验证集上误差0.8%,那么你该把那种人类误差看作贝叶斯误差呢,按0.7%,那么你可避免偏差是0,那应该调方差。按0.5%,那么你可避免偏差是0.2%,那应该调误差。实际上,这种情况已经是模型已经比较优秀的情况了,你的目标你的要求本身就是更高的,很显然可优化空间还有>=0.2%,此时应按0.2%估计。
吴恩达还指出,比如识别猫,可能人类表现非常好,误差接近0,这种情况下直接看偏差和方差就可以轻松判断我该怎么优化。比如,嘈杂音源中的语音识别,那这种盲目降低偏差肯定是不对的,像这种就很明显有着弄清人类误差的必要性,从而让你能够更加明确该调偏差还是方差。
1.11 超过人的表现
比如专家误差0.5%,一般人误差1%,训练集误差0.6%,验证集误差0.8%,那么这时可避免误差>=0.1%,方差0.2%,应当优化方差。
但是如果超过了人的表现呢,比如现在训练集误差0.3%,验证集误差0.4%。我们知道贝叶斯误差<=0.5%。可究竟是多少,我们距离这个上限究竟有多少,是0.1%还是0.2%还是0.3%呢,这就不清楚了,事实就是,这时候就完全没有明确的选项和前进方向了。
1.12 改善模型表现
总结,偏差和方差要正交化地去优化
首先是减小偏差,方法有训练更大的网络模型、训练更久、使用更好的优化算法(momentum、RMSprop、Adam)、寻找更好的新神经网络架构(CNN、RNN)、更好的超参数(激活函数、层数、隐藏单元数)
其次是减小方差,方法有用更多的训练数据、正则化(L2、dropout、数据增强)、试用更好的神经网络架构或超参数
二、机器学习(ML)策略(2)
2.1 进行误差分析
比如现在对猫识别准确率90%,效果不够好,你发现有好多狗被预测成猫了,那么要不要专门开一个项目做几个月来优化对狗的错误预测呢
可以这样做,取100张图片样本,假设有 5 个狗,可以视作做错的样本里有 5% 狗,如果全都做对,那么你的准确率也才只有90.5%,所以这是不值得的。假设有 50% 狗,那么狗处理好了就可以到95%,这是合适的。
这是一个人工分析差错的过程。
具体来说我们可以抽取少量样本并做一个excel表统计
比如你发现有狗、大猫(狮子老虎等)、模糊导致错误预测成猫,那你就可以抽样做上面这样一个表格,统计占比。
顺便也在 comments 里记录影响因素或原因等,比如具体来说是比特犬这个狗的类型被预测成猫,再比如模糊的实际原因是雨天。
然后分析的过程中,你可能会发现一些额外的类别,比如你发现好多是开了滤镜干扰了你的分类器,于是你可以把它加入进去记下来。
上面的例子中,可以看到,我们可以专门处理大猫和模糊,可以很好地提高性能。
2.2 清楚标注错误的数据
有时候预测错误也可能是标注数据的人真实标签标注的不对
这时候要不要处理,可以用误差分析的方法,就是抽取错误预测的样本做上面那样的表格
看百分比,占了明显一部分,那就优先修正,否则就不着急,当然最后想修正完全可以去做
修正时,需要注意的几个问题是
你要对验证集和测试集都修正,以确保二者来自同一分布
一般来讲,预测错误的比较少,预测正确的比较多,我们可能懒得一个一个查预测正确的样本,但是如果修正了预测错误的部分后效果不是很好,或者你觉得占比太大,那么有必要考虑对预测正确的样本也一个一个地查
训练集太大了,没有一个一个查的可能性,于是你的 训练集 将和 验证集/测试集 来自于不同分布。学习算法其实非常鲁棒,训练集的分布稍稍不同一般来讲没太大关系,验证集和测试集肯定要保证同一分布。具体有关训练集分布不同的问题如何处理,之后会在本课程进行讲解
2.3 快速搭建你的第一个系统,并进行迭代
没啥好说的,主要就是讲标题这句话
2.4 在不同的划分上进行训练并测试
我们知道深度学习对训练数据的胃口很大,许多团队往往用尽一切办法收集数据
而这些数据来自不同分布时,该怎么办
比如识别猫,用户上传的有10000张图片,你从网页下载了200000张图片
一种方式是把所有这些照片混合,然后划分训练集验证集测试集
然而你真正关心的预测目标是用户上传的这种可能有点模糊的图片
所以这种方式不好
一般推荐用下面这种方式
如果你觉得验证/测试集用不上 10000,你可以抽出一半
划分成 200000+5000 / 2500 / 2500
如果你觉得 10000 对于验证和测试并不算多
那就直接 200000 / 5000 / 5000
2.5 不匹配数据划分的偏差和方差
对于 偏差/方差分析
不妨思考,训练集上误差1%,验证集上误差10%,如果不同分布,那么真的是方差大过拟合了吗
不一定,也可能单纯是数据不匹配导致的
那要怎么判断
把训练集再划出一部分做一次验证,这部分来自原训练集里,同分布,于是可以判断是否真的过拟合
即 训练集、训练-验证集、验证集
比如在这三个集合上分别 1%、2%、10%,那么说明没过拟合,但是数据不匹配要解决
比如在这三个几何上分别 1%、9%、10%,那么说明过拟合了,首先解决过拟合,可能完全由过拟合导致的在验证集上误差大。如果解决过拟合后,验证集表现好了,那就说明完全过拟合导致,这样解决完就OK了。如果解决过拟合后,验证集方差依然很大,那说明除了过拟合,数据不匹配问题也是有着影响的,也要解决。
2.6 定位数据不匹配
首先要,人工误差分析,理解数据不匹配的原因
然后,我们要让训练集变得更像验证集和测试集,一种方法就是多收集类似于验证集和测试集的数据
另一种方法就是人工合成数据
比如语音识别,既然没有噪音,那就制造噪音
把你没噪音的数据 和 比方说汽车鸣笛噪音 合成一下,就大功告成,这是完全可行的
但是比方说10000个小时的语音数据,你反复使用 1 个小时的汽车噪音,其问题是你将对这一个小时的汽车噪音过拟合
再比如汽车图像,你找了好多游戏里的车,实际上很多在画面特点上十分近似的,而真实的车千奇百怪。你感觉找了挺多,但打个比方你游戏里的车可能就相当于现实的二十种,实际上就只是一个非常非常小的子集,很容易过拟合
包括上面噪音的例子,不是时间长就有意义。当然这里 1 个小时指的是不重复的 1 个小时,而显然这样是不够用的。
2.7 迁移学习
比如对一个已经训练好的识别猫的神经网络,现在想对放射科图片是否骨折预测,那么直接拿这个网络(有些可以变更的超参数想变更可以变更)要怎么做,首先是更换(X,y)来训练,直接把输出层换成随机参数,然后你可能考虑对输出层前的一层或两层的参数继续训练,其他层参数不变,这样就可以了。
这个原理是什么呢,你在猫识别中已经训练学会的一些知识可以迁移,前面一些层可能实现了一些点、线或简单图案的识别,可以接着拿来用。
对猫的识别叫作 预训练,进一步对放射科图像识别叫作 微调。
迁移学习的意义是什么呢,放射科的图片可能很少,而猫的图片可能很多,放射科图片太少以至于直接训练效果很不好,所以可以用猫预训练,完成二者共通的知识的学习。
另一个例子是语音识别,最后你可能想要的是唤醒词触发,前者数据很多,后者很少。你已经学会了识别语音内容,只需要更进一步更好地识别唤醒语,那这时候,首先微调肯定要重新随机一个输出层参数,然后你可能考虑前面的知识全都有意义都不用变了,于是在输出层前新增两层隐藏层来训练。
总结一下迁移学习的条件
第一,任务A和任务B有相同的输入
第二,任务A有比任务B多得多得数据
第三,任务A得低层特征对任务B的训练有帮助
2.8 多任务学习
迁移学习是串行的,而多任务学习是并行的
多任务学习只需要最后输出层几个任务就几个单元多标签即可
和 Softmax 多分类区分
多任务学习不是一个结果,而是多个结果,比如你预测一张图有没有人、有没有车、有没有红绿灯,这不是互斥的
多任务学习的条件是
第一,多个任务间有共同的低层特征
第二,多个任务间的数据量差不多大
输入不同可以靠合并解决
然后需要了解的是多任务学习效果一般来讲一定不会比独立来做的差,不妨想象一下你的输入可能更多了或者合并维度更大了,尤其是共通的低层,训练得一定更好,所以最后结果肯定要好的
能使得多任务效果比独立差的唯一原因只有网络规模不够大
2.9 什么是端到端的深度学习
端到端就是流水线,分成多任务多步骤进行,打破了常规的一步搞定思维,非常好用
打个比方,百度上班打卡的人脸识别
直接一步搞定行吗?挺大一个人训练预测人脸这样效果并不好,那么我们怎么做的呢
第一步,预测人脸位置,把人脸那一块图片截出来放大,然后第二步做人脸识别,这样效果就很好
吴恩达还举了很多例子,这里就不一一列举了,理解怎么回事就行了
2.10 是否要使用端到端的深度学习
是否使用端到端的深度学习,关键在于了解它的优缺点
所谓端到端,就是 X->U->V->W->...->y,从 X 端到 y 端的映射
其优点是:
第一,让数据说话:X 适合预测 U,你是让数据自己学习,并且你是确切地表示成 U,而不是你直接 X 预测 y 为了利用到一个隐藏的 U 而加入的 M、N 之类的人工设计的过程。自己学习如何到 U 肯定更好。M、N可能并不合适,并含有一些人为偏见,比如 cat,你认为中间表示成 科 哎 特 这样的音节比较好,实际上这毫无意义,这就是人工过程的偏见。
第二,就像上面所说的那样,一步步分阶段分步骤分任务地预测,因此你不需要花太多时间取人工设计功能、人工设计中间表示方式。
其缺点是:
第一,可能需要大量的数据。比如百度上班打卡人脸识别,不用端到端,那你就只需要人身照、以及是否匹配的标签。而端到端,那你第一步就要有框出人脸部分的标签数据。你想一想分任务过程中的真实标签肯定全都要人工标记的,用预测的来做下一轮训练那就没意义了。而且当你选择端到端,就是放弃了许多手工设计,全靠预测意味着小样本学习效果肯定不好。中间任务为了效果更好,你也可能针对性地再去收集一些额外数据。所以说数据量肯定要很大的。
第二,端到端的学习排除了可能有用的手工设计组件。机器学习研究人员一般很鄙视手工设计。但是如果你数据量不够大,人工特征工程就很有意义。而且人工特征工程也是把人类知识注入模型的一种途径,尤其在小样本学习中非常有用。当然优缺点中我们都说过这个,人工过程就是一把双刃剑。
吴恩达指出,是否使用端到端学习,关键在于相比于 X 到 y 映射的复杂度,我们用于训练的数据是否充足。
吴恩达深度学习之三《结构化机器学习项目》学习笔记相关推荐
- 【深度学习】吴恩达深度学习-Course3结构化机器学习项目-第一周机器学习(ML)策略(1)作业
题目仅含中文!! 视频链接:[中英字幕]吴恩达深度学习课程第三课 - 结构化机器学习项目 参考链接: [中英][吴恩达课后测验]Course 3 - 结构化机器学习项目 - 第一周测验 吴恩达< ...
- 吴恩达深度学习 | (15) 结构化机器学习项目专项课程第二周学习笔记
课程视频 第二周PPT汇总 吴恩达深度学习专项课程共分为五个部分,本篇博客将介绍第三部分结构化机器学习项目专项的第二周课程:机器学习(ML)策略(2) . 目录 1. 进行误差分析 2. 清除标注错误 ...
- 深度学习-吴恩达(C3)结构化你的机器学习工程
结构化你的机器学习工程改变了深度学习的错误 比如你分割数据的方法,分割成train,development(dev)或叫valid,test,所以最好的实践方法是什么?了解更多端对端的深度学习,进而了 ...
- 0.0 目录-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
文章目录 第五课 第四课 第三课 第二课 第一课 第五课 <序列模型> 笔记列表 Week 1 循环序列模型 Week 1 传送门 -> 1.1 为什么选择序列模型 1.2 数学符号 ...
- 花书+吴恩达深度学习(二三)结构化概率模型(贝叶斯网络、马尔可夫随机场)
文章目录 0. 前言 1. 有向模型 2. 无向模型 3. 因子图 4. 分离和d-分离 5. 从图模型中采样 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 花书+吴恩达深 ...
- 吴恩达深度学习笔记——结构化机器学习项目(Structuring Machine Learning Projects)
深度学习笔记导航 前言 传送门 结构化机器学习项目(Machine Learning Strategy) 机器学习策略概述 正交化(orthogonalization) 评价指标 数字评估指标的单一性 ...
- 花书+吴恩达深度学习(十一)卷积神经网络 CNN 之池化层
目录 0. 前言 1. 最大池化(max pooling) 2. 平移不变形 3. 其他池化函数 4. 卷积和池化作为一种无限强的先验 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常 ...
- 吴恩达深度学习笔记1-Course1-Week1【深度学习概论】
2018.5.7 吴恩达深度学习视频教程网址 网易云课堂:https://mooc.study.163.com/smartSpec/detail/1001319001.htm Coursera:htt ...
- 360题带你走进深度学习!吴恩达深度学习课程测试题中英对照版发布
吴恩达的深度学习课程(deepLearning.ai)是公认的入门深度学习的宝典,本站将课程的课后测试题进行了翻译,建议初学者学习.所有题目都翻译完毕,适合英文不好的同学学习. 主要翻译者:黄海广 内 ...
最新文章
- 【Python初级】009-错误与异常
- linux yun 安装 redis,Linux系统安装NoSQL(MongoDB和Redis)步骤及问题解决办法(总结篇)...
- 参考文献中会议名称怎么缩写_期刊缩写查询总结
- nginx反向代理初探
- android之TCP客户端框架
- mysql 查询和修改组合_## 超详细MySQL常用语句,增删查改
- php格式化输出字_PHP 输出格式化字符串
- tcp和udp的优缺点
- Bootstrap框架下按钮的禁用
- Eclipse中直接执行sql语句(图文说明)
- mac os 录屏快捷键_录制视频软件哪个好用?分享专业的录屏神器
- layer mobile使用方法
- 2022年,互联网上赚钱真的有那么难吗?
- SQL SELECT完整语法
- 跑步健身戴什么耳机合适?五款高性价比运动耳机推荐
- 训练集、验证集、测试集划分
- dir file list.file list.dirs
- stemwin 实现显示屏幕滑动
- Web点播播放器1.0——腾讯sdk网页点播播放器
- Oracle 常用函数练习题含答案