深度学习教程 | AI应用实践策略(下)

简介: 本节覆盖构建机器学习项目的后半部分内容,包括:错误分析(error analysis),错误标签情况及修正,数据分布和数据不匹配问题及解决办法,迁移学习,多任务学习,端到端学习。

ShowMeAI研究中心

作者:韩信子@ShowMeAI
教程地址http://www.showmeai.tech/tutorials/35
本文地址http://www.showmeai.tech/article-detail/220
声明:版权所有,转载请联系平台与作者并注明出处
收藏ShowMeAI查看更多精彩内容


第3门课 结构化机器学习项目,第2周: 机器学习策略 2
本系列为吴恩达老师《深度学习专项课程(Deep Learning Specialization)》学习与总结整理所得,对应的课程视频可以在这里查看。


引言

ShowMeAI前一篇文章 AI应用实践策略(上) 中我们对以下内容进行了介绍:

  • 正交化方法(Orthogonalization)
  • 建立单值评价指标
  • 数据集划分要点
  • 人类水平误差与可避免偏差(Avoidable Bias)
  • 提高机器学习模型性能总结

本篇是吴恩达老师第3门课《Structuring Machine Learning Projects》(构建机器学习项目)后半部分的总结梳理。内容主要覆盖误差分析、系统迭代、数据匹配与定位、迁移学习、多任务学习、端到端系统等。

1.错误分析

误差分析  Carrying Out Error Analysis

如果希望让学习算法能够胜任人类能做的任务,但学习算法还没有达到人类的表现,那么人工检查一下算法犯的错误可以了解接下来应该做什么,这个过程称为错误分析(error analysis)

假设正在调试猫分类器,取得了 equation?tex=90%20%5C%25 准确率,相当于 equation?tex=10%20%5C%25 错误,注意到算法将一些狗分类为猫,需要对模型的一些部分做相应调整,才能更好地提升分类的精度。

错误分析

1.1 收集错误样例

在开发集(测试集)中,获取大约 equation?tex=100 个错误标记的例子,然后手动检查,一次只看一个,看看开发集里有多少错误标记的样本是狗。

  • equation?tex=100 个数据中有equation?tex=5 个样例是狗,如果对数据集的错误标记做努力去改进模型的精度,可以提升的上限是 equation?tex=5%20%5C%25 ,仅可以达到 equation?tex=9.5%20%5C%25 的错误率,称为性能上限(ceiling on performance)。这种情况下,这样耗时的努力方向不是很值得的事。
  • equation?tex=100 个数据中,有equation?tex=50 多个样例是狗,改进数据集的错误标记是一个值得的改进方向,可以将模型的精确度提升至 equation?tex=95

这种错误分析虽然简单,但是能够避免花费大量的时间精力去做一些对提高模型性能收效甚微的工作,让我们专注解决影响模型正确率的主要问题,十分必要。

错误分析可以同时评估多个影响模型性能的因素,通过各自在错误样本中所占的比例来判断其重要性。例如,猫类识别模型中,可能有以下几个可以优化的影响因素:

错误分析

  • 修改那些被分类成猫的狗狗图片标签。
  • 修改那些被错误分类的大型猫科动物,如:狮子,豹子等。
  • 提升模糊图片的质量。

可以建立表格来做并行的分析。如下图所示:

错误分析

在最左边,人工过一遍想分析的图像集,电子表格的每一列对应要评估的想法,如狗(Dog)的问题、猫科动物(Great cats)的问题、模糊图像(Blurry images)的问题,最后一列写评论(Comments)。

在这个步骤做到一半时,可能会发现其他错误类型,比如可能发现有Instagram滤镜,那些花哨的图像滤镜,干扰了分类器。在这种情况下可以在错误分析途中,增加一列多色滤镜(Instagram滤镜和Snapchat滤镜),再过一遍,并确定新的错误类型百分比,这个分析步骤的结果可以给出一个估计,是否值得去处理每个不同的错误类型。

错误分析

最终汇总到上述这样的表格里,我们可以敲定更有效的优化策略:把团队可以分成两个团队,其中一个改善大猫的识别,另一个改善模糊图片的识别。

1.2 小结

总结一下,进行错误分析时,你应该观察错误标记的例子,看看假阳性和假阴性,统计属于不同错误类型的错误数量(如上图)。在这个过程中,你可能会得到启发,归纳出新的错误类型。总之,通过统计不同错误标记类型占总数的百分比,有助于发现哪些问题亟待解决,或者提供构思新优化方向的灵感。

2.修正错误标记

清除标注错误的数据 Cleaning up Incorrectly Labeled Data

我们用mislabeled examples来表示学习算法输出了错误的 equation?tex=Y 值。而在做错误分析时,有时会发现数据集中有些样本被人为地错误标记(incorrectly labeled)了,这时该如何处理呢?

修正错误标记

2.1 训练集错标

如果是在训练集中,由于机器学习算法对于随机误差的稳健性(Robust)(也称作「鲁棒性」),只要这些出错的样本数量较小,且分布近似随机,就不必花费时间一一修正。

2.2 验证集/测试集错标

如果是验证集与测试集中出现错标样本,该怎么处理呢?

方法很简单,使用上一小节内容介绍的错误分析方法,统计验证集中所有分类错误的样本中错标数据的占比。根据占比大小,决定是否需要修正所有错标数据,还是可以忽略。如下举例说明:

修正错误标记

(1) case1

如果评估算法后,是如下这种情况:

  • 总体验证集错误率equation?tex=10%20%5C%25
  • 错标样本错误率:equation?tex=0.6%20%5C%25
  • 其他原因引起的错误率:equation?tex=9.4%20%5C%25

上面情况下错标样本引起的验证集错误率占比仅为 equation?tex=0.6%20%5C%25 ,占验证集错误情况的 equation?tex=6%20%5C%25 ,而其它类型错误占验证集错误情况的 equation?tex=94%20%5C%25这种情况下,可以忽略错标数据

(2) case2

如果评估算法后,是如下这种情况:

  • 总体验证集错误率equation?tex=2%20%5C%25
  • 错标样本错误率:equation?tex=0.6%20%5C%25
  • 其他原因引起的错误率:equation?tex=1.4%20%5C%25

上面情况下错标样本引起的验证集错误率占比依然为 equation?tex=0.6%20%5C%25 ,但是却占验证集错误情况的 equation?tex=30%20%5C%25 ,而其它类型错误占验证集错误情况的 equation?tex=70%20%5C%25这种情况下,错标数据不可忽略,需要手动修正

通过前面的内容,我们了解到验证集的主要作用是「在不同算法之间进行比较,选择错误率最小的算法模型」。但是,如果验证集有错标数据的存在,当不同算法错误率比较接近的时候,我们无法仅仅根据总体验证集的效果判断哪个算法模型更好,必须修正错标数据。

关于修正错标数据,吴恩达老师还给出了一些建议:

  • 在验证集和测试集上同时使用同样的修正手段,以保证验证集和测试集来自相同的分布。
  • 同时检查判断正确和判断错误的例子(通常不用这么做)。
  • 在修正验证集和测试集时,鉴于训练集的分布不必和验证/测试集完全相同,可以不去修正训练集。

3.快速搭建系统并迭代

快速搭建你的第一个系统,并进行迭代 Build Your First System Quickly, then Iterate

如果我们想搭建一个全新的机器学习系统,吴恩达老师建议根据以下步骤快速搭建好第一个系统,然后反复迭代优化:

快速搭建系统并迭代

  • 设置好训练、验证、测试集及衡量指标,确定目标。
  • 快速训练出一个初步的系统,用训练集来拟合参数,用验证集调参,用测试集评估。
  • 通过偏差/方差分析以及错误分析等方法,决定下一步优先处理的方向。

4.在不同的分布上训练和测试

在不同的分布上的训练集和测试集 Training and Testing on Different Distributions

有时,我们很难得到来自同一个分布的训练集和验证/测试集。当训练集与验证/测试集不来自同一个分布的时候,我们应该如何解决这一问题,构建准确的机器学习模型呢?

仍以猫识别作为例子,我们的训练集可能由网络爬取得到,图片比较清晰,而且规模较大(例如20万);而验证/测试集可能来自用户手机拍摄,图片比较模糊,且数量较小(例如1万),难以满足作为训练集时的规模需要。

虽然验证集测试集图片质量不高,但是模型最终主要应用在对这些模糊的照片的处理上。有两种解决方法处理训练集和验证/测试集分布不一致:

方法1:将训练集和验证/测试集完全混合,然后再随机选择一部分作为训练集,另一部分作为验证/测试集

训练和测试分布偏差 solution1

例如,混合equation?tex=210000 例样本,然后随机选择 equation?tex=205000 例样本作为训练集,equation?tex=2500 例作为验证集,equation?tex=2500 例作为测试集。

这种做法的优点是实现训练集和验证/测试集分布一致。缺点是验证/测试集中 webpages 图片所占的比重比 mobile app 图片大得多。(例如dev set包含 equation?tex=2500 例样本,大约有 equation?tex=2381 例来自 webpages,只有 equation?tex=119 例来自 mobile app。算法模型对比验证仍然主要由 webpages 决定,实际应用的 mobile app 图片所占比重很小,达不到验证效果。)

方法2:将原来的训练集和一部分验证/测试集组合当成训练集,剩下的验证/测试集分别作为验证集和测试集

训练和测试分布偏差 solution2

例如,equation?tex=200000 例webpages图片和 equation?tex=5000 例mobile app图片组合成训练集,剩下的 equation?tex=2500 例mobile app图片作为验证集,equation?tex=2500 例mobile app图片作为测试集。

这种做法的核心在于验证/测试集全部来自于 mobile app。这样保证了验证集最接近实际应用场合。这种方法较为常用,而且性能表现比较好

5.数据不匹配

数据分布不匹配的偏差与方差分析 Bias and Variance with Mismatched Data Distributions

5.1 数据不匹配问题

ShowMeAI上一篇内容 AI应用实践策略(上) 里介绍过,根据人类表现误差、训练误差和验证误差的相对差异可以判定是否出现了 bias 或者 variance。不过有一个问题:

如果训练集和验证/测试集来源于不同分布,则无法直接根据相对值大小来判断

例如某个模型人类表现误差为 equation?tex=0%20%5C%25 ,训练误差为 equation?tex=1%20%5C%25 ,验证误差为 equation?tex=10%20%5C%25 。按照 AI应用实践策略(上) 里的方法我们会判断该模型出现了 variance。但训练误差与验证误差之间的差值 equation?tex=9%20%5C%25 可能来自算法本身(variance),也可能来自于样本分布不同。(比如dev set都是很模糊的图片样本,本身就难以识别,跟算法模型关系不大。)

这种情况下,不能简单认为出现了variance。

在可能伴有训练集与验证/测试集分布不一致的情况下,定位是否出现 variance 的方法是设置定义一个训练-验证集(Training-dev Set)。训练-验证集和训练集的分布相同(或者是训练集分割出的子集),但是不参与训练过程,而是用于验证

现在,我们有了训练集错误率、训练-验证集错误率,以及验证集错误率。其中,训练集错误率和训练-验证集错误率的差值反映了variance方差;而训练-验证集错误率和验证集错误率的差值反映了样本分布不一致的问题,从而说明模型擅长处理的数据和我们关心的数据来自不同的分布,我们称之为数据不匹配(Data Mismatch)问题

举例说明,如果训练集错误率为 equation?tex=1%20%5C%25 ,训练-验证集错误率为 equation?tex=9%20%5C%25 ,验证集错误率为 equation?tex=10%20%5C%25 ,则 variance 方差问题比较突出。如果训练集错误率为 equation?tex=1%20%5C%25 ,训练-验证集错误率为 equation?tex=1.5%20%5C%25 ,验证集错误率为 equation?tex=10%20%5C%25 ,则数据不匹配比较突出。通过引入训练-验证集,能够比较准确地定位出现了 variance 还是数据不匹配问题。

总结人类水平误差、训练集错误率、训练-验证集错误率、验证集错误率、测试集错误率之间的差值所反映的问题如下图所示

模型问题诊断

5.2 处理方法

处理数据不匹配问题 Addressing Data Mismatch

吴恩达老师给出了2条关于解决数据不匹配问题的建议:

  • ① 做错误分析,尝试了解训练集和验证/测试集的具体差异(主要是人工查看训练集和验证集的样本);
  • ② 尝试将训练数据调整得更像验证集,或者收集更多类似于验证/测试集的数据。

要将训练数据调整得更像验证集,我们可以使用人工数据合成方法(artificial data synthesis)

数据不匹配solution

以语音识别问题为例,实际应用场合(验证/测试集)是包含背景噪声的,而作为训练样本的音频很可能是清晰而没有背景噪声的。为了让训练集与验证/测试集分布一致,我们可以给训练集人工添加背景噪声,合成类似实际场景的声音。

人工合成数据能够使数据集匹配,从而提升模型的效果。但需要注意的是,不能给每段语音都增加同一段背景噪声,因为这样模型会对这段背景噪音出现过拟合现象,使得效果不佳。

6.迁移学习

迁移学习  Transfer Learning

迁移学习(Tranfer Learning)是通过将已训练好的神经网络模型的一部分网络结构应用到另一模型,将一个神经网络从某个任务中学到的知识和经验运用到另一个任务中,以加快训练学习速度和提升模型效果。

迁移学习

例如,我们将为猫识别器构建的神经网络迁移应用到医疗影像诊断中。

迁移学习

猫识别器神经网络训练完成后,已经学习到了一些有关图像的结构和性质等方面的知识,这时候只要先删除神经网络中原有的输出层,加入新的输出层并随机初始化权重系数 equation?tex=(W%5E%7B%5BL%5D%7D%2Cb%5E%7B%5BL%5D%7D),随后用新的训练集进行训练,就完成了以上的迁移学习。

如果新的数据集很小,可能只需要重新训练输出层前的最后一层的权重,即 equation?tex=W%5E%7B%5BL%5D%7Dequation?tex=b%5E%7B%5BL%5D%7D,并保持其他参数不变;而如果有足够多的数据,可以只保留网络结构,重新训练神经网络中所有层的系数。这时初始权重由之前的模型训练得到,这个过程称为预训练(Pre-Training),之后的权重更新过程称为微调(Fine-Tuning)


上述过程的迁移学习会有效,是因为神经网络浅层部分能够检测出许多图片固有特征,例如图像边缘、纹理、曲线等。使用之前训练好的神经网络部分结果有助于我们更快更准确地提取 equation?tex=X 光片特征。二者处理的都是图片,而图片处理是有相同的地方,第一个训练好的神经网络已经帮我们实现如何提取图片有用特征了。因此,即便是即将训练的第二个神经网络样本数目少,仍然可以根据第一个神经网络结构和权重系数得到健壮性好的模型

你也可以不止加入一个新的输出层,而是多加几个新层。

迁移学习

吴恩达老师指出,迁移学习适用于满足以下条件的场景:

  • 两个任务有同样的输入 (比如都是图像或者都是音频);
  • 拥有更多数据的任务迁移到数据较少的任务;
  • 某一任务的低层次特征 (底层神经网络的某些功能) 对另一个任务的学习有帮助。

7.多任务学习

多任务学习 Multi-task Learning

除了我们前面讲到的构建神经网络解决二分类或者多分类任务,神经网络还可以完成多任务学习 (Multi-Task Learning),它指的是使用单个神经网络模型,利用共享表示采用并行训练同时学习多个任务。

多任务学习的基本假设是多个任务之间具有相关性,并且任务之间可以利用相关性相互促进。例如,属性分类中,抹口红和戴耳环有一定的相关性,单独训练的时候是无法利用这些信息,多任务学习则可以利用任务相关性联合提高多个属性分类的精度。


下面是一个汽车自动驾驶的例子。这个场景中需要实现的多任务是识别行人、车辆、交通标志和信号灯。多任务学习模型的成本函数及对应的损失函数为:

多任务学习

其中,equation?tex=j 代表任务下标,总有equation?tex=c 个任务。

多任务学习和 Softmax 回归看上去有些类似,容易混淆。它们的区别是,Softmax 回归的输出向量 equation?tex=y 中只有一个元素为 equation?tex=1 ;而多任务学习的输出向量 equation?tex=y 中可以有多个元素为 equation?tex=1

吴恩达老师指出,多任务学习的应用场景有以下特质:

  • 训练的一组任务可以共用低层次特征;
  • 通常,每个任务的数据量接近;
  • 能够训练一个足够大的神经网络,以同时做好所有的工作。多任务学习会降低性能的唯一情况(即和为每个任务训练单个神经网络相比性能更低的情况)是神经网络还不够大。

多任务学习

在多任务深度网络中,低层次信息的共享有助于减少计算量,同时共享表示层可以使得几个有共性的任务更好的结合相关性信息,任务特定层则可以单独建模任务特定的信息,实现共享信息和任务特定信息的统一。

在实践中,多任务学习的使用频率要远低于迁移学习。计算机视觉领域中的物体识别是一个多任务学习的例子。

8.端到端学习

什么是端到端的深度学习? What is End-to-end Deep Learning?

8.1 端到端学习与传统流水线

在传统的机器学习分块模型中,每一个模块处理一种输入,然后其输出作为下一个模块的输入,构成一条流水线。而端到端深度学习(End-to-end Deep Learning)将所有不同阶段的数据处理系统或学习系统模块组合在一起,只用一个单一的神经网络模型来实现所有的功能。它将所有模块混合在一起,只关心输入和输出。

如果数据量较少,传统机器学习分块模型所构成的流水线效果也不错。但如果训练样本非常大,应用的神经网络模型比较复杂,那么端到端深度学习模型的性能会比传统机器学习分块模型更好。

而如果数据集规模适中,还是可以使用流水线方法,但是可以混合端到端深度学习,通过神经网络绕过某些模块,直接输出某些特征。

如下是语音识别模型中传统流水线流程、混合模式和端到端学习模式的对比示意图

端到端学习

8.2 端到端学习优缺点

是否使用端到端的深度学习方法 Whether to use end-to-end deep learning

如下是端到端学习的优缺点总结:

优点

  • 只要有足够多的数据,剩下的全部交给一个足够大的神经网络。比起传统的机器学习分块模型,可能更能捕获数据中的任何统计信息,而不需要用人类固有的认知(或者说,成见)来进行分析
  • 所需手工设计的组件更少,简化设计工作流程

缺点

  • 需要大量的数据
  • 排除了可能有用的人工设计组件

总结一下,决定一个问题是否应用端到端学习的关键点是:是否有足够的数据,支持能够直接学习从$$x$$映射到$$y$$并且足够复杂的函数。

ShowMeAI系列教程推荐

推荐文章

ShowMeAI用知识加速每一次技术成长

目录
相关文章
|
6天前
|
机器学习/深度学习 人工智能 运维
深度学习在流量监控中的革命性应用
深度学习在流量监控中的革命性应用
69 40
|
16天前
|
人工智能 自然语言处理 搜索推荐
【上篇】-分两篇步骤介绍-如何用topview生成和自定义数字人-关于AI的使用和应用-如何生成数字人-优雅草卓伊凡-如何生成AI数字人
【上篇】-分两篇步骤介绍-如何用topview生成和自定义数字人-关于AI的使用和应用-如何生成数字人-优雅草卓伊凡-如何生成AI数字人
93 24
【上篇】-分两篇步骤介绍-如何用topview生成和自定义数字人-关于AI的使用和应用-如何生成数字人-优雅草卓伊凡-如何生成AI数字人
|
10天前
|
机器学习/深度学习 存储 人工智能
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
MNN-LLM App 是阿里巴巴基于 MNN-LLM 框架开发的 Android 应用,支持多模态交互、多种主流模型选择、离线运行及性能优化。
847 14
MNN-LLM App:在手机上离线运行大模型,阿里巴巴开源基于 MNN-LLM 框架开发的手机 AI 助手应用
|
7天前
|
人工智能 开发框架 数据可视化
Eino:字节跳动开源基于Golang的AI应用开发框架,组件化设计助力构建AI应用
Eino 是字节跳动开源的大模型应用开发框架,帮助开发者高效构建基于大模型的 AI 应用。支持组件化设计、流式处理和可视化开发工具。
133 27
|
6天前
|
存储 人工智能 NoSQL
Airweave:快速集成应用数据打造AI知识库的开源平台,支持多源整合和自动同步数据
Airweave 是一个开源工具,能够将应用程序的数据同步到图数据库和向量数据库中,实现智能代理检索。它支持无代码集成、多租户支持和自动同步等功能。
66 14
|
10天前
|
人工智能 自然语言处理 数据可视化
Cursor 为低代码加速,AI 生成应用新体验!
通过连接 Cursor,打破了传统低代码开发的局限,我们无需编写一行代码,甚至连拖拉拽这种操作都可以抛诸脑后。只需通过与 Cursor 进行自然语言对话,用清晰的文字描述自己的应用需求,就能轻松创建出一个完整的低代码应用。
605 8
|
8天前
|
人工智能 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 7.4 应用实践之 AI大模型外脑
PolarDB向量数据库插件通过实现通义大模型AI的外脑,解决了通用大模型无法触达私有知识库和产生幻觉的问题。该插件允许用户将新发现的知识和未训练的私有知识分段并转换为向量,存储在向量数据库中,并创建索引以加速相似搜索。当用户提问时,系统将问题向量化并与数据库中的向量进行匹配,找到最相似的内容发送给大模型,从而提高回答的准确性和相关性。此外,PolarDB支持多种编程语言接口,如Python,使数据库具备内置AI能力,极大提升了数据处理和分析的效率。
32 4
|
8天前
|
人工智能 自然语言处理 搜索推荐
现在最火的AI是怎么应用到体育行业的
AI在体育行业的应用日益广泛,涵盖数据分析、伤病预防、观众体验、裁判辅助等多个领域。通过传感器和可穿戴设备,AI分析运动员表现,提供个性化训练建议;预测伤病风险,制定康复方案;优化比赛预测和博彩指数;提升观众的个性化内容推荐和沉浸式观赛体验;辅助裁判判罚,提高准确性;发掘青训人才,优化训练计划;智能管理场馆运营和票务;自动生成媒体内容,提供实时翻译;支持电竞分析和虚拟体育赛事;并为运动员提供个性化营养和健康管理方案。未来,随着技术进步,AI的应用将更加深入和多样化。
|
1月前
|
人工智能 运维 物联网
云大使 X 函数计算 FC 专属活动上线!享返佣,一键打造 AI 应用
如今,AI 技术已经成为推动业务创新和增长的重要力量。但对于许多企业和开发者来说,如何高效、便捷地部署和管理 AI 应用仍然是一个挑战。阿里云函数计算 FC 以其免运维的特点,大大降低了 AI 应用部署的复杂性。用户无需担心底层资源的管理和运维问题,可以专注于应用的创新和开发,并且用户可以通过一键部署功能,迅速将 AI 大模型部署到云端,实现快速上线和迭代。函数计算目前推出了多种规格的云资源优惠套餐,用户可以根据实际需求灵活选择。
|
30天前
|
人工智能 算法 前端开发
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备
OmAgent 是 Om AI 与浙江大学联合开源的多模态语言代理框架,支持多设备连接、高效模型集成,助力开发者快速构建复杂的多模态代理应用。
194 72
OmAgent:轻松构建在终端设备上运行的 AI 应用,赋能手机、穿戴设备、摄像头等多种设备

热门文章

最新文章