第三门课:结构化机器学习项目-机器学习策略

文章目录

  • 1 机器学习策略一
    • 1.1 为什么是ML策略?
    • 1.2 正交化
    • 1.3 单一数字评估指标
    • 1.4 满足和优化指标
    • 1.5 训练、开发及测试集划分
    • 1.6 开发集和测试集的大小
    • 1.7 什么时候改变开发、测试集和指标?
    • 1.8 为什么是人的表现?
    • 1.9 可避免偏差
    • 1.10 理解人的表现
    • 1.11 超越人的表现
    • 1.12 改善你的模型的表现
  • 2 机器学习策略二
    • 2.1 进行误差分析
    • 2.2 清除标注错误的数据
    • 2.3 快速搭建第一个系统,并进行迭代
    • 2.4 使用来自不同分布的数据进行训练和测试
    • 2.5 数据分布不匹配时的偏差与方差的分析
    • 2.6 处理数据不匹配问题
    • 2.7 迁移学习
    • 2.8 多任务学习
    • 2.9 什么是端到端的深度学习?
    • 2.10 是否要使用端到端的深度学习?

1 机器学习策略一

1.1 为什么是ML策略?

改善系统的策略:
1、收集更多数据
2、训练集多样性(如,识别猫,收集各种姿势的猫,以及反例)
3、训练的时间更长一些
4、尝试不同的优化算法(如 Adam优化)
5、尝试规模 更大 / 更小 的神经网络
6、尝试 DropOut 正则化
7、尝试添加 L2 正则化
8、修改网络架构(修改激活函数,隐藏单元数目)
需要判断哪些是值得一试的,哪些是可以舍弃的

1.2 正交化

1、 要弄好一个监督学习系统,要确保四件事情

1> 确保至少系统在训练集上得到的结果不错,所以训练集上的表现必须通过某种评估,达到能接受的程度。
2> 在训练集上表现不错之后,希望系统也能在开发集上有好的表现
3> 希望系统在测试集上有好的表现
4> 希望系统在测试集上系统的成本函数在实际使用中表现令人满意

2、
1>在成本函数上不能很好地拟合训练集

	可以训练更大的网络可以切换到更好的优化算法<如Adam优化算法>

2>在训练集上做得很好,但开发集<验证集>不行

可以通过正则化进行调节

3>在开发集上做的不错,但测试集不行,意味着对开发集过拟合了

   可以使用更大的开发集

4>在测试集上做得很好,但无法给应用用户提供良好的体验

可以改变开发集或成本函数

注:训练神经网络时,一般不使用early stopping,如果使用,那么对训练集的拟合就不太好,但它同时也用来改善开发集的表现,所以它没那么正交化。

1.3 单一数字评估指标

查准率§和查全率®
查准率:如果分类器A有95%的查准率,这意味着你的分类器说这图有猫的时候,有95%的机会真的是猫。
查全率:如果分类器A查全率是90%,这意味着对于所有的图像,比如说你的开发集都是真的猫图,分类器准确地分辨出了其中的90%。
在这里插入图片描述

结合查准率和查全率的标准方法是F1分数(P和R的调和平均数)
在这里插入图片描述
我们快速选出分类器A,淘汰B
除了F1 分数之外,我们还可以使用平均值作为单值评价指标来对模型进行评估
在这里插入图片描述

总:单实数评估指标可以提高做决策的效率

1.4 满足和优化指标

在这里插入图片描述

Accuracy是优化指标,Running time是满足指标。
只要运行时间小于100毫秒,用户就不在乎运行时间是100毫秒还是50毫秒,在这种情况下分类器B最好,因为在所有运行时间小于100毫秒的分类其中,它的准确度是最高的。
考虑N个指标,有时候选择其中一个作为优化指标是合理的。
尽量优化那个指标,然后剩下 N-1个指标都是满足指标,意味着只要它们达到一定阈值,你不再关心指标在阈值内的大小。

1.5 训练、开发及测试集划分

如何设立开发集和测试集?
开发集(dev set)有时也叫(development set),有时称为保留交叉验证集(hold out cross validation set)。
机器学习中的工作流程是你尝试很多思路,用训练集训练不同的模型,然后使用开发集来评估不同的思路,然后选择一个,然后不断迭代去改善开发集的性能,直到最后你可以得到一个令你满意的成本,然后你再用测试集去评估。
设立开发集以及评估指标:定义类要瞄准的目标
设立训练集的方式:会影响逼近那个目标有多快
在这里插入图片描述

前四个作为开发集,后四个作为测试集,这个想法非常糟糕,因为开发集与测试集来自不同的分布。
建议:将所有数据随机洗牌,放入开发集和测试集,所以开发集和测试集都有来自八个地区的数据,并且开发集和测试集来自同一分布,这分布就是所有数据混在一起。

1.6 开发集和测试集的大小

在这里插入图片描述

测试集的目的是完成系统开发之后,测试集可以评估投产系统的性能,及评估最终的成本偏差。
不单独分出一个测试集也是可以的,但不建议在搭建系统时省略测试集,因为有个单独的测试集比较安心。因为可以使用这组不带偏差的数据来测量系统的性能。

1.7 什么时候改变开发、测试集和指标?

例:构建一个猫分类器,试图找到很多猫的照片,向爱猫人士用户展示,决定使用的指标是分类错误率。所以算法A和B分别有3%错误率和5%错误率,所以算法A似乎做得更好。但是算法A由于某些原因,把很多色情图片分类成猫了。从用户接受的角度来看,算法B实际上是一个更好的算法,因为它不让任何色情图像通过。
在这里插入图片描述

这个公式就统计了分类错误的样本。这个评估指标的问题在于,它对色情图片和非色情图片一视同仁。

改进:引入一个权重项<赋予色情图片更大的权重,让算法将色情图分类为猫图时,错误率快速变大>
在这里插入图片描述

并进行归一化,使错误率仍保持在0-1之间
在这里插入图片描述

我们定义了一个评估指标帮助我们更好的把分类器排序,能够区分出他们在识别色情图片的不同水平,这实际上是一个正交化的例子

注:在处理机器学习时,分为两个独立的步骤,第一步是设定目标,第二步在逼近目标的时候,也需学习算法对某个成本函数优化,最小化训练集上的损失。
可以修改这个,引入权重,最后修改这个归一化常数。
在这里插入图片描述

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

1.8 为什么是人的表现?

在这里插入图片描述

超越人类表现,进展会慢下来的原因:
1> 人类水平在很多任务中离贝叶斯最优错误率已经不远了,人们非常擅长看图像,分辨里面有没有猫或者听写音频。所以,当你超越人类的表现之后也许没有太多的空间继续改善了。
2> 只要你的表现比人类的表现更差,那么实际上可以使用某些工具来提高性能。一旦你超越了人类的表现,这些工具就没那么好用了。

1.9 可避免偏差

在这里插入图片描述

算法在训练集上的表现和人类水平的表现有很大差距的话,说明算法对训练集的拟合并不好,重点放在减少偏差上。
可避免偏差:贝叶斯错误率或者对贝叶斯错误率的估计和训练错误率之间的差值称为可避免偏差。
即7%的可避免偏差<7%衡量了可避免偏差大小,而2%衡量了方差大小>

1.10 理解人的表现

在这里插入图片描述

最优错误率肯定在5%以下,可以用0.5%来估计贝叶斯错误率

贝叶斯错误率或者说贝叶斯错误率的估计和训练错误率直接的差值就衡量了所谓的可避免偏差,这(训练误差与开发误差之间的差值)可以衡量或者估计你的学习算法的方差问题有多严重。
在这里插入图片描述

1.11 超越人的表现

在这里插入图片描述

一旦超过0.5%这个门槛,要进一步优化机器学习问题就没有明确的选项和前进的方向了。
机器学习超越人类水平的实例:
1> 网络广告:估计某个用户点击广告的可能性
2> 提出产品建议,推荐电影或书籍之类的任务。
3> 物流预测,从A到B开车需要多久,或者预测快递车从A开到B需要多少时间。
4> 预测某人会不会偿还贷款,这样你就能判断是否批准这人的贷款

1.12 改善你的模型的表现

训练集误差与贝叶斯估计误差之间的差距:可避免偏差
训练集误差与开发集误差之间的差距:方差
减少可避免方差:

更大规模的模型
训练更久、迭代次数更多
更好的优化算法(Momentum、RMSprop、Adam)
更好的新的神经网络结构
更好的超参数
改变激活函数、网络层数、隐藏单元数
其他模型(循环神经网络<CNN>,卷积神经网络<RNN>)

改进方差:

收集更多的数据去训练
正则化(L2正则、dropout正则、数据增强)
更好的新的神经网络结构
更好的超参数

2 机器学习策略二

2.1 进行误差分析

<猫分类器中>收集n个预测错误的开发集样本,手动检查
(错误分类的图片里面有多少比例是狗🐶,假如错误率10%,其中狗占5%,那么你完全解决了狗的问题,能降低错误率到 9.5%,结合你花费的时间,评估下值不值当;如果错误分类中,狗占50%,那么解决狗的问题,就能降低错误率到 5%,还是很值得一试的)
通常做法,统计各种误差的比例,检查哪种误差占比较高,优先解决
在这里插入图片描述

2.2 清除标注错误的数据

在这里插入图片描述

倒数第二张是标记错误的图片,即为标记错误的样本。
深度学习算法对于训练集中的随机错误是相当健壮的。如果错误足够随机,那么放着这些错误不管可能也没问题。

如果在开发集和测试集有错误标记的样本:
在这里插入图片描述

如果你要更正标签,请注意:
同时在开发集和测试集上操作(同一分布)
检查了判断错误的样本,也需要考虑到判断正确的样本(可能是标签就错了,恰好预测的一致),但通常此步不会做,太耗时了(比如98%的判对了,检查98%的数据?太多了)

只修正开发集/测试集的标签,而不修正训练集的标签是合理的,训练集通常比前2者大得多,算法是相当健壮的。

2.3 快速搭建第一个系统,并进行迭代

快速设立开发集和测试集还有指标,如果目标定错了,之后改也是可以的
找到训练集,并进行训练
在开发及和测试集,评估指标表现如何
建立好第一个系统之后,就可以用到偏差方差分析,还有错误分析来确定下一步优先做什么。

2.4 使用来自不同分布的数据进行训练和测试

在这里插入图片描述

第一种选择:随机分配到训练、开发和测试集中,开发集、测试集各包含2500个样本,训练集有205000个样本。
结果:观察开发集,2500个样本很多都是来自网页下载的图片,并不是真正关心的 数据分布,真正要处理的是来自手机的图片。建立开发集的目的是瞄准目标,而这个选择瞄准目标的方式,大部分精力用于优化来自网页下载的图片。

第二种选择:训练集包含来自网页的20万图片以及来自手机拍摄5000张图片,开发集是2500张来自应用的图片,测试集也是2500张来自应用的图片。
结果:好处:瞄准的目标就是想要处理的目标。训练集和开发集、测试集的分布不一样,在长期能够给你带来更好的系统性能。

2.5 数据分布不匹配时的偏差与方差的分析

在这里插入图片描述

训练-开发集是从训练集的分布中挖出来的,因此训练-开发集与训练集具有相同的分布。即开发集与测试集来自同一分布,而训练集与训练-开发集来自同一分布。

训练误差&训练-开发误差,差距 8 %,但是两者数据是同分布的,所以问题是泛化性能差,高方差问题
训练误差&训练-开发误差,差距0.5 %,方差问题很小,但是在开发集上误差为 10%,训练-开发集&开发集上的数据,模型都没有在上面训练过,由于他们是不同分布,模型擅长前者,而你关心的开发集,模型表现不好,这称之为数据不匹配
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.6 处理数据不匹配问题

发现有严重的数据不匹配,亲自做误差分析,了解训练集和开发集/测试集的具体差异
为了避免对测试集过拟合,要做误差分析,应该人工去看开发集而不是测试集
例:
1、开发一个语音激活的后视镜应用,你可能要听一下开发集的样本,弄清楚开发集和训练集有什么不同:发现很多开发集样本汽车噪音很多,后视镜经常识别错误街道号码。
2、如果你发现车辆背景噪音是主要误差来源,那么你可以模拟车辆噪声数据;
或者你发现很难识别街道号码,你可以有意识地收集更多人们说数字的音频数据,加到你的训练集里
3、如果目标是让训练数据更接近开发集,其中一种技术是人工合成数据

人工数据合成有一个潜在问题:你在安静的背景里录得 10000小时 音频数据,你只录了1小时车辆背景噪音,将这1小时汽车噪音循环放10000次,并叠加到上面的语音,结果:人听起来,这个音频没什么问题,但是有一个风险,有可能你的学习算法对这1小时汽车噪音过拟合,你只录了1小时汽车噪音,只模拟了全部数据空间的一小部分(噪声过于单一),所以找 10000 小时不同的噪声叠加在音频上是合理的。

2.7 迁移学习

在这里插入图片描述

如果放射科数据很小,则需要重新训练最后一层的权重,就是w[L]和b[L],并保持其他参数不变。即只需训练输出层前的最后一层,或者也许是最后一两层。
如果有很多数据,也许可以重新训练网络中的所有参数。

如果你重新训练神经网络中的所有参数,那么这个在图像识别数据的初期训练阶段,有时称为预训练,因为你在用图像识别数据去预先初始化,或者预训练神经网络的权重。然后,如果你以后更新所有权重,然后在放射科数据上训练,有时这个过程叫微调
在这里插入图片描述

迁移学习发挥作用的场合:
在迁移来源问题中有很多数据,但迁移目标问题没有那么多数据。(例如:你有100万张图像识别数据,而只有100张X射线图像)
数据量如果反过来了,迁移学习可能就没有意义了(没有太大的帮助)

2.8 多任务学习

在这里插入图片描述

输入图像x(i),这里有4个标签,即y(i)是一个4*1向量。整体来看这个训练集标签和以前类似,我们将训练集的标签水平堆叠起来
在这里插入图片描述

则对于整个训练集的平均损失:
在这里插入图片描述

L指的是logistic损失:
在这里插入图片描述

整个训练集的平均损失和之前分类猫的例子主要区别在于,现在你要对j=1到4求和
与softmax回归的主要区别在于,与softmax回归不同,softmax将单个标签分配给单个样本

多任务学习什么时候有意义?

1>	如果你训练的一组任务,可以共用低层次特征
2>	单项任务可以从多任务学习得到很大性能提升,前提:其他任务数据总量加起来必须比单个任务的数据量大的多
3>	训练一个足够大的神经网络,多任务学习肯定不会或者很少会降低性能,比单独训练神经网络来单独完成各个任务性能要更好

注:多任务学习 的使用频率要低于迁移学习计算机视觉
一个例外是物体检测,人们经常训练一个神经网络同时检测很多不同物体,这比训练单独的神经网络来检测视觉物体要更好。

2.9 什么是端到端的深度学习?

以前有一些数据处理系统或者学习系统,它们需要多个阶段的处理。那么端到端深度学习就是忽略所有这些不同的阶段,用单个神经网络代替它
例:语音识别为例,端到端深度学习做的是,训练一个巨大的神经网络,输入就是一段音频,输出直接是听写文本。

端到端深度学习的挑战之一:需要大量数据才能让系统表现良好。

人脸识别门禁:
比起一步到位,把这个问题分解为两个更简单的步骤。
首先,弄清楚脸在哪里:观察一张图,找出人脸所在的位置,把人脸图像框出来,有很多标签数据(x,y),x是图片,y是人脸的位置
第二步,看着脸,弄清楚这是谁:(x,y)其中x是门禁系统拍摄的图像,y是那人的身份。

2.10 是否要使用端到端的深度学习?

端到端深度学习的好处:

1>首先端到端(end-to-end)学习真的只是让数据说话。如果有足够多的数据,直接输入去训练神经网络,更能捕获数据中的信息,而不是引入人类的成见
2>所需手工设计的组件更少,所以这也许能够简化你的设计工作流程,你不需要花太多时间去手工设计功能。

端到端深度学习的缺点:

1>它可能需要大量的数据。
2>它排除了可能有用的手工设计组件

在构建一个新的机器学习问题时,在决定是否使用端到端深度学习,关键问题(key question)是,你有足够的数据能够直接学到从x映射到y足够复杂的函数吗?

注:纯粹的端到端深度学习方法,前景不如更复杂的多步方法(比如人脸识别,人脸每次的位置是变化的,先识别出有人脸,然后把人脸区域截取出来,再对其进行预测,分步进行)。因为目前能收集到的数据,还有我们现在训练神经网络的能力是有局限的。

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

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

相关文章

Unity UGUI之Toggle基本了解

在Unity中&#xff0c;Toggle一般用于两种状态之间的切换&#xff0c;通常用于开关或复选框等功能。 它的基本属性如图&#xff1a; 其中&#xff0c; Interactable&#xff08;可交互&#xff09;&#xff1a;指示Toggle是否可以与用户交互。设置为false时&#xff0c;禁用To…

在Linux系统中如何查询日志?

在工作中&#xff0c;我们有时候会定位问题&#xff0c;这时候就需要查询日志了&#xff0c;那么查询日志的命令有哪些呢&#xff1f; cat 查看某个日志文件中的所有内容。 使用示例&#xff1a;cat file.txt 显示 file.txt 文件的所有内容。 如果要对查询的结果进行筛选&am…

17双体系Java学习之数组的长度

数组的长度 //获取数组长度 arrays.lengthfor (int i 0; i <nums.length; i) {sum sum nums[i];}System.out.println("总和为&#xff1b;"sum);

免费阅读篇 | 芒果YOLOv8改进110:注意力机制GAM:用于保留信息以增强渠道空间互动

&#x1f4a1;&#x1f680;&#x1f680;&#x1f680;本博客 改进源代码改进 适用于 YOLOv8 按步骤操作运行改进后的代码即可 该专栏完整目录链接&#xff1a; 芒果YOLOv8深度改进教程 该篇博客为免费阅读内容&#xff0c;直接改进即可&#x1f680;&#x1f680;&#x1f…

Java八股文(XXL-JOB)

Java八股文のXXL-JOB XXL-JOB XXL-JOB xxl-job 是什么&#xff1f;它的主要作用是什么&#xff1f; xxl-job 是一款分布式任务调度平台&#xff0c;用于解决分布式系统中的定时任务和异步任务调度问题。 它提供了任务的注册、调度、执行和监控等功能&#xff0c;能够帮助开发者…

MindGraph:文字生成知识图

欢迎来到MindGraph&#xff0c;这是一个概念验证、开源的、以API为先的基于图形的项目&#xff0c;旨在通过自然语言的交互&#xff08;输入和输出&#xff09;来构建和定制CRM解决方案。该原型旨在便于集成和扩展。以下是关于X的公告&#xff0c;提供更多背景信息。开始之前&a…

Python错题集-9PermissionError:[Errno 13] (权限错误)

1问题描述 Traceback (most recent call last): File "D:\pycharm\projects\5-《Python数学建模算法与应用》程序和数据\02第2章 Python使用入门\ex2_38_1.py", line 9, in <module> fpd.ExcelWriter(data2_38_3.xlsx) #创建文件对象 File "D:…

机器学习----特征缩放

目录 一、什么是特征缩放&#xff1a; 二、为什么要进行特征缩放&#xff1f; 三、如何进行特征缩放&#xff1a; 1、归一化&#xff1a; 2、均值归一化&#xff1a; 3、标准化&#xff08;数据需要符合正态分布&#xff09;&#xff1a; 一、什么是特征缩放&#xff1a; 通…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之二 素描画风格效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之二 素描画风格效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之二 素描画风格效果 一、简单介绍 二、素描画风格效果实现原理 三、案例简单实现步骤 一、简单介绍 Python是一种跨…

react native 实现自定义底部导航与路由文件配置

首先先把需要的一些库引入 yarn install react-navigation/native yarn install react-native-screens react-native-safe-area-context yarn install react-navigation/native-stack yarn add react-navigation/bottom-tabs 创建路由文件及四个底部导航页面 router文件下的bot…

python 深度学习 记录遇到的报错问题12

本篇继python 深度学习 记录遇到的报错问题11_undefined symbol: __nvjitlinkadddata_12_1, version-CSDN博客 目录 一、AttributeError: module ‘tensorflow‘ has no attribute ‘app‘ 二、AttributeError: module tensorflow has no attribute placeholder 三、Attribu…

掘根宝典之C++RTTI和类型转换运算符

什么是RTTI RTTI是运行阶段类型识别的简称。 哪些是RTTI? C有3个支持RTTI的元素。 1.dynamic_cast运算符将使用一个指向基类的指针来生成一个指向派生类的指针&#xff0c;否则该运算符返回0——空指针。 2.typeid运算符返回一个指出对象类型的信息 3.type_info结构存储…

el-form 的表单校验,如何验证某一项或者多项;validateField 的使用

通常对form表单的校验都是整体校验&#xff1a; this.$refs.form.validate( valid > {if (valid) {// 校验通过&#xff0c;业务逻辑代码...} }); 如果需要对表单里的特定一项或几项进行校验&#xff0c;应该如何实现&#xff1f; 业务场景&#xff1a;下图点探测按钮时…

Python 井字棋游戏

井字棋是一种在3 * 3格子上进行的连珠游戏&#xff0c;又称井字游戏。井字棋的游戏有两名玩家&#xff0c;其中一个玩家画圈&#xff0c;另一个玩家画叉&#xff0c;轮流在3 * 3格子上画上自己的符号&#xff0c;最先在横向、纵向、或斜线方向连成一条线的人为胜利方。如图1所示…

【数据可信流通,从运维信任到技术信任】

1. 数据可信流通体系 信任的基石&#xff1a; 身份的可确认利益可依赖能力有预期行为有后果 2.内循环——>外循环 内循环&#xff1a;数据持有方在自己的运维安全域内队自己的数据使用和安全拥有全责。 外循环&#xff1a;数据要素在离开持有方安全域后&#xff0c;持有方…

Linux内存管理笔记----TLB

1. TLB介绍 TLB是Translation Lookaside Buffer的简称&#xff0c;可翻译为“地址转换后援缓冲器”&#xff0c;也可简称为“快表”。 简单地说&#xff0c;TLB就是页表的Cache&#xff0c;属于MMU的一部分&#xff0c;其中存储了当前最可能被访问到的页表项&#xff0c;其内…

2023年度VSCode主题推荐(个人常用主题存档)

前言 早在2018年的时候发了一篇关于VSCode主题风格推荐——VS Code 主题风格设置&#xff0c;时过境迁&#xff0c;如今常用的主题皮肤早已更替。 今天下午在整理VSCode插件的时候&#xff0c;不小心把常用的那款&#xff08;亮色&#xff09;主题插件给删除了&#xff0c;无…

202444读书笔记|《作家榜名著:菜根谭》——大聪明的人,小事必朦胧,大懵懂的人,小事必伺察

202444读书笔记|《作家榜名著&#xff1a;菜根谭》——大聪明的人&#xff0c;小事必朦胧&#xff0c;大懵懂的人&#xff0c;小事必伺察 修省篇&#xff08;三八则&#xff09;应酬篇&#xff08;五一则&#xff09;评议篇&#xff08;四八则&#xff09;闲适篇&#xff08;四…

添可、希亦、追觅洗地机好不好用?实物终极PK测评分享!

随着人们对家庭生活品质的追求不断地提高&#xff0c;对智能清洁家电的需求也不断地上涨。作为在智能清洁家电领域的资深研究员&#xff0c;结合我八年的使用经验以及专业的眼光&#xff0c;今天就给大家一起来聊聊希亦、追觅、添可洗地机好不好用&#xff0c;以及三款洗地机产…

科技成果鉴定测试如何进行?第三方检测机构进行鉴定测试的好处

科技成果鉴定测试&#xff0c;作为科技领域中一项重要的质量检验手段&#xff0c;具有广泛的应用范围。旨在为科技成果的研发者和使用者提供客观、科学、权威的鉴定结果&#xff0c;从而评估科技成果的技术水平和市场竞争力。   科技成果鉴定测试是对科技成果进行系统、全面的…