共计 7006 个字符,预计需要花费 18 分钟才能阅读完成。
- 作者:韩信子 @ShowMeAI
- 教程地址:http://www.showmeai.tech/tutorials/35
- 本文地址:http://www.showmeai.tech/article-detail/220
- 申明:版权所有,转载请分割平台与作者并注明出处
珍藏 ShowMeAI 查看更多精彩内容
本系列为吴恩达老师《深度学习专项课程 (Deep Learning Specialization)》学习与总结整顿所得,对应的课程视频能够在 这里 查看。
引言
在 ShowMeAI 前一篇文章 AI 利用实际策略(上) 中咱们对以下内容进行了介绍:
- 正交化办法(Orthogonalization)
- 建设单值评估指标
- 数据集划分要点
- 人类程度误差与可防止偏差(Avoidable Bias)
- 进步机器学习模型性能总结
本篇 是吴恩达老师第 3 门课《Structuring Machine Learning Projects》(构建机器学习我的项目)后半局部的总结梳理。内容次要笼罩误差剖析、零碎迭代、数据匹配与定位、迁徙学习、多任务学习、端到端系统等。
1. 谬误剖析
如果心愿让学习算法可能胜任人类能做的工作,但学习算法还没有达到人类的体现,那么人工检查一下算法犯的谬误能够理解接下来应该做什么,这个过程称为 谬误剖析(error analysis)。
假如正在调试猫分类器,获得了 90% 准确率,相当于 10% 谬误,留神到算法将一些狗分类为猫,须要对模型的一些局部做相应调整,能力更好地晋升分类的精度。
1.1 收集谬误样例
在开发集 (测试集) 中,获取大概 100 个谬误标记的例子,而后手动查看,一次只看一个,看看开发集里有多少谬误标记的样本是狗。
- 100 个数据中有 5 个样例是狗,如果对数据集的谬误标记做致力去改良模型的精度,能够晋升的下限是 5%,仅能够达到 9.5% 的错误率,称为性能下限(ceiling on performance)。这种状况下,这样耗时的致力方向不是很值得的事。
- 100 个数据中,有 50 多个样例是狗,改良数据集的谬误标记是一个值得的改良方向,能够将模型的精确度晋升至 95。
这种谬误剖析尽管简略,然而可能防止破费大量的工夫精力去做一些对进步模型性能收效甚微的工作,让咱们专一解决影响模型正确率的次要问题,十分必要。
谬误剖析能够同时评估多个影响模型性能的因素,通过各自在谬误样本中所占的比例来判断其重要性。例如,猫类辨认模型中,可能有以下几个能够优化的影响因素:
- 批改那些被分类成猫的狗狗图片标签。
- 批改那些被谬误分类的大型猫科动物,如:狮子,豹子等。
- 晋升含糊图片的品质。
能够建设表格来做并行的剖析。如下图所示:
在最右边,人工过一遍想剖析的图像集,电子表格的每一列对应要评估的想法,如狗 (Dog) 的问题、猫科动物 (Great cats) 的问题、含糊图像 (Blurry images) 的问题,最初一列写评论(Comments)。
在这个步骤做到一半时,可能会发现其余谬误类型,比方可能发现有 Instagram 滤镜,那些花哨的图像滤镜,烦扰了分类器。在这种状况下能够在谬误剖析途中,减少一列多色滤镜(Instagram 滤镜和 Snapchat 滤镜),再过一遍,并确定新的谬误类型百分比,这个剖析步骤的后果能够给出一个预计,是否值得去解决每个不同的谬误类型。
最终汇总到上述这样的表格里,咱们能够敲定更无效的优化策略:把团队能够分成两个团队,其中一个改善大猫的辨认,另一个改善含糊图片的辨认。
1.2 小结
总结一下,进行谬误剖析时,你应该察看谬误标记的例子,看看假阳性和假阴性,统计属于不同谬误类型的谬误数量(如上图)。在这个过程中,你可能会失去启发,演绎出新的谬误类型。总之,通过统计不同谬误标记类型占总数的百分比,有助于发现哪些问题亟待解决,或者提供构思新优化方向的灵感。
2. 修改谬误标记
咱们用 mislabeled examples 来示意学习算法输入了谬误的 \(Y\) 值。而在做谬误剖析时,有时会发现数据集中有些样本被人为地谬误标记 (incorrectly labeled) 了,这时该如何解决呢?
2.1 训练集错标
如果是在训练集中,因为机器学习算法对于随机误差的稳健性(Robust)(也称作「鲁棒性」),只有这些出错的样本数量较小,且散布近似随机,就不用破费工夫一一修改。
2.2 验证集 / 测试集错标
如果是验证集与测试集中呈现错标样本,该怎么解决呢?
办法很简略,应用上一大节内容介绍的谬误分析方法,统计验证集中所有分类谬误的样本中错标数据的占比。依据占比大小,决定是否须要修改所有错标数据,还是能够疏忽。如下举例说明:
(1) case1
如果评估算法后,是如下这种状况:
- 总体验证集错误率:10%
- 错标样本错误率:0.6%
- 其余起因引起的错误率:9.4%
下面状况下错标样本引起的验证集错误率占比仅为 0.6%,占验证集谬误状况的 6%,而其它类型谬误占验证集谬误状况的 94%。这种状况下,能够疏忽错标数据。
(2) case2
如果评估算法后,是如下这种状况:
- 总体验证集错误率:2%
- 错标样本错误率:0.6%
- 其余起因引起的错误率:1.4%
下面状况下错标样本引起的验证集错误率占比仍然为 0.6%,然而却占验证集谬误状况的 30%,而其它类型谬误占验证集谬误状况的 70%。这种状况下,错标数据不可疏忽,须要手动修改。
通过后面的内容,咱们理解到验证集的次要作用是「在不同算法之间进行比拟,抉择错误率最小的算法模型」。然而,如果验证集有错标数据的存在,当不同算法错误率比拟靠近的时候,咱们无奈仅仅依据总体验证集的成果判断哪个算法模型更好,必须修改错标数据。
对于修改错标数据,吴恩达老师还给出了一些倡议:
- 在验证集和测试集上同时应用同样的修改伎俩,以保障验证集和测试集来自雷同的散布。
- 同时查看判断正确和判断谬误的例子(通常不必这么做)。
- 在修改验证集和测试集时,鉴于训练集的散布不用和验证 / 测试集完全相同,能够不去修改训练集。
3. 疾速搭建零碎并迭代
如果咱们想搭建一个全新的机器学习零碎,吴恩达老师倡议依据以下步骤疾速搭建好第一个零碎,而后重复迭代优化:
[外链图片转存失败, 源站可能有防盗链机制, 倡议将图片保留下来间接上传(img-GX2QivZl-1649925346046)(http://image.showmeai.tech/de…)]
- 设置好训练、验证、测试集及掂量指标,确定指标。
- 疾速训练出一个初步的零碎,用训练集来拟合参数,用验证集调参,用测试集评估。
- 通过偏差 / 方差分析以及谬误剖析等办法,决定下一步优先解决的方向。
4. 在不同的散布上训练和测试
有时,咱们很难失去来自同一个散布的训练集和验证 / 测试集。当训练集与验证 / 测试集不来自同一个散布的时候,咱们应该如何解决这一问题,构建精确的机器学习模型呢?
仍以猫辨认作为例子,咱们的 训练集 可能由网络爬获得到,图片比拟清晰,而且规模较大 (例如 20 万);而 验证 / 测试集 可能来自用户手机拍摄,图片比拟含糊,且数量较小(例如 1 万),难以满足作为训练集时的规模须要。
尽管验证集测试集图片品质不高,然而模型最终次要利用在对这些含糊的照片的解决上。有两种解决办法解决训练集和验证 / 测试集散布不统一:
①办法 1:将训练集和验证 / 测试集齐全混合,而后再随机抉择一部分作为训练集,另一部分作为验证 / 测试集。
例如,混合 210000 例样本,而后随机抉择 205000 例样本作为训练集,2500 例作为验证集,2500 例作为测试集。
这种做法的 长处 是实现训练集和验证 / 测试集散布统一。毛病 是验证 / 测试集中 webpages 图片所占的比重比 mobile app 图片大得多。(例如 dev set 蕴含 2500 例样本,大概有 2381 例来自 webpages,只有 119 例来自 mobile app。算法模型比照验证依然次要由 webpages 决定,理论利用的 mobile app 图片所占比重很小,达不到验证成果。)
②办法 2:将原来的训练集和一部分验证 / 测试集组合当成训练集,剩下的验证 / 测试集别离作为验证集和测试集。
例如,200000 例 webpages 图片和 5000 例 mobile app 图片组合成训练集,剩下的 2500 例 mobile app 图片作为验证集,2500 例 mobile app 图片作为测试集。
这种做法的外围在于验证 / 测试集全副来自于 mobile app。这样保障了验证集最靠近理论利用场合。这种办法较为罕用,而且性能体现比拟好。
5. 数据不匹配
5.1 数据不匹配问题
ShowMeAI 上一篇内容 AI 利用实际策略(上) 里介绍过,依据人类体现误差、训练误差和验证误差的绝对差别能够断定是否呈现了 bias 或者 variance。不过有一个问题:
如果训练集和验证 / 测试集来源于不同散布,则无奈间接依据相对值大小来判断。
例如某个模型人类体现误差为 0%,训练误差为 1%,验证误差为 10%。依照 AI 利用实际策略(上) 里的办法咱们会判断该模型呈现了 variance。但训练误差与验证误差之间的差值 9% 可能来自算法自身(variance),也可能来自于样本分布不同。(比方 dev set 都是很含糊的图片样本,自身就难以辨认,跟算法模型关系不大。)
这种状况下,不能简略认为呈现了 variance。
在可能伴有训练集与验证 / 测试集散布不统一的状况下,定位是否呈现 variance 的办法是设置定义一个训练 - 验证集(Training-dev Set)。训练 - 验证集和训练集的散布雷同(或者是训练集宰割出的子集),然而不参加训练过程,而是用于验证。
当初,咱们有了训练集错误率、训练 - 验证集错误率,以及验证集错误率。其中,训练集错误率和训练 - 验证集错误率的差值反映了 variance 方差;而训练 - 验证集错误率和验证集错误率的差值反映了样本分布不统一的问题,从而阐明模型善于解决的数据和咱们关怀的数据来自不同的散布,咱们称之为 数据不匹配 (Data Mismatch) 问题。
举例说明,如果训练集错误率为 1%,训练 - 验证集错误率为 9%,验证集错误率为 10%,则 variance 方差问题比较突出。如果训练集错误率为 1%,训练 - 验证集错误率为 1.5%,验证集错误率为 10%,则数据不匹配比较突出。通过引入训练 - 验证集,可能比拟精确地定位呈现了 variance 还是数据不匹配问题。
总结人类程度误差、训练集错误率、训练 - 验证集错误率、验证集错误率、测试集错误率之间的差值所反映的问题如下图所示:
5.2 解决办法
吴恩达老师给出了 2 条对于解决数据不匹配问题的倡议:
- ① 做谬误剖析,尝试理解训练集和验证 / 测试集的具体差别(次要是人工查看训练集和验证集的样本);
- ② 尝试将训练数据调整得更像验证集,或者收集更多相似于验证 / 测试集的数据。
要将训练数据调整得更像验证集,咱们能够应用 人工数据合成办法(artificial data synthesis)。
以语音辨认问题为例,理论利用场合 (验证 / 测试集) 是蕴含背景噪声的,而作为训练样本的音频很可能是清晰而没有背景噪声的。为了让训练集与验证 / 测试集散布统一,咱们能够给训练集人工增加背景噪声,合成相似理论场景的声音。
人工合成数据可能使数据集匹配,从而晋升模型的成果。但须要留神的是,不能给每段语音都减少同一段背景噪声,因为这样模型会对这段背景乐音呈现过拟合景象,使得成果不佳。
6. 迁徙学习
迁徙学习 (Tranfer Learning) 是通过将已训练好的神经网络模型的一部分网络结构利用到另一模型,将一个神经网络从某个工作中学到的常识和教训使用到另一个工作中,以放慢训练学习速度和晋升模型成果。
例如,咱们将为猫识别器构建的神经网络迁徙利用到医疗影像诊断中。
猫识别器神经网络训练实现后,曾经学习到了一些无关图像的构造和性质等方面的常识,这时候只有先删除神经网络中原有的输入层,退出新的输入层并随机初始化权重系数(\( W^{[L]}\)、\(b^{[L]}\) ),随后用新的训练集进行训练,就实现了以上的迁徙学习。
如果新的数据集很小,可能只须要从新训练输入层前的最初一层的权重,即 \(W^{[L]}\)、\(b^{[L]}\),并放弃其余参数不变;而如果有足够多的数据,能够只保留网络结构,从新训练神经网络中所有层的系数。这时初始权重由之前的模型训练失去,这个过程称为预训练 (Pre-Training),之后的权重更新过程称为 微调(Fine-Tuning)。
上述过程的迁徙学习会无效,是因为神经网络浅层局部可能检测出许多图片固有特征,例如图像边缘、纹理、曲线等。应用之前训练好的神经网络局部后果有助于咱们更快更精确地提取 X 光片特色。二者解决的都是图片,而图片解决是有雷同的中央,第一个训练好的神经网络曾经帮咱们实现如何提取图片有用特色了。因而,即使是行将训练的第二个神经网络样本数目少,依然能够依据第一个神经网络构造和权重系数失去健壮性好的模型。
你也能够不止退出一个新的输入层,而是多加几个新层。
吴恩达老师指出,迁徙学习实用于满足以下条件的场景:
- 两个工作有同样的输出(比方都是图像或者都是音频);
- 领有更多数据的工作迁徙到数据较少的工作;
- 某一工作的低层次特色 (底层神经网络的某些性能) 对另一个工作的学习有帮忙。
7. 多任务学习
除了咱们后面讲到的构建神经网络解决二分类或者多分类工作,神经网络还能够实现多任务学习(Multi-Task Learning),它指的是应用单个神经网络模型,利用共享示意采纳并行训练同时学习多个工作。
多任务学习的根本假如是多个工作之间具备相关性,并且工作之间能够利用相关性相互促进。例如,属性分类中,抹口红和戴耳环有肯定的相关性,独自训练的时候是无奈利用这些信息,多任务学习则能够利用工作相关性联结进步多个属性分类的精度。
上面是一个汽车主动驾驶的例子。这个场景中须要实现的多任务是辨认行人、车辆、交通标志和信号灯。多任务学习模型的老本函数及对应的损失函数为:
其中,\(j\) 代表工作下标,总有 \(c\) 个工作。
多任务学习和 Softmax 回归看上去有些相似,容易混同。它们的区别是,Softmax 回归的输入向量 \(y\) 中只有一个元素为 1;而多任务学习的输入向量 \(y\) 中能够有多个元素为 1。
吴恩达老师指出,多任务学习的利用场景有以下特质:
- 训练的一组工作能够共用低层次特色;
- 通常,每个工作的数据量靠近;
- 可能训练一个足够大的神经网络,以同时做好所有的工作。多任务学习会升高性能的惟一状况 (即和为每个工作训练单个神经网络相比性能更低的状况) 是神经网络还不够大。
在多任务深度网络中,低层次信息的共享有助于缩小计算量,同时共享表示层能够使得几个有共性的工作更好的联合相关性信息,工作特定层则能够独自建模工作特定的信息,实现共享信息和工作特定信息的对立。
在实践中,多任务学习的应用频率要远低于迁徙学习。计算机视觉畛域中的物体辨认是一个多任务学习的例子。
8. 端到端学习
8.1 端到端学习与传统流水线
在传统的机器学习分块模型中,每一个模块解决一种输出,而后其输入作为下一个模块的输出,形成一条流水线。而端到端深度学习 (End-to-end Deep Learning) 将所有不同阶段的数据处理系统或学习零碎模块组合在一起,只用一个繁多的神经网络模型来实现所有的性能。它将所有模块混合在一起,只关怀输出和输入。
如果数据量较少,传统机器学习分块模型所形成的流水线成果也不错。但如果训练样本十分大,利用的神经网络模型比较复杂,那么端到端深度学习模型的性能会比传统机器学习分块模型更好。
而如果数据集规模适中,还是能够应用流水线办法,然而能够混合端到端深度学习,通过神经网络绕过某些模块,间接输入某些特色。
如下是语音辨认模型中传统流水线流程、混合模式和端到端学习模式的比照示意图。
8.2 端到端学习优缺点
如下是端到端学习的优缺点总结:
长处
- 只有有足够多的数据,剩下的全副交给一个足够大的神经网络。比起传统的机器学习分块模型,可能更能捕捉数据中的任何统计信息,而不须要用人类固有的认知 (或者说,偏见) 来进行剖析
- 所需手工设计的组件更少,简化设计工作流程
毛病
- 须要大量的数据
- 排除了可能有用的人工设计组件
总结一下,决定一个问题是否利用端到端学习的关键点是:是否有足够的数据,反对可能间接学习从 \(x\) 映射到 \(y\) 并且足够简单的函数。
ShowMeAI 系列教程举荐
- 图解 Python 编程:从入门到精通系列教程
- 图解数据分析:从入门到精通系列教程
- 图解 AI 数学根底:从入门到精通系列教程
- 图解大数据技术:从入门到精通系列教程
- 图解机器学习算法:从入门到精通系列教程
- 机器学习实战:手把手教你玩转机器学习系列
- 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
举荐文章
- 深度学习教程 | 深度学习概论
- 深度学习教程 | 神经网络根底
- 深度学习教程 | 浅层神经网络
- 深度学习教程 | 深层神经网络
- 深度学习教程 | 深度学习的实用层面
- 深度学习教程 | 神经网络优化算法
- 深度学习教程 | 网络优化:超参数调优、正则化、批归一化和程序框架
- 深度学习教程 | AI 利用实际策略(上)
- 深度学习教程 | AI 利用实际策略(下)
- 深度学习教程 | 卷积神经网络解读
- 深度学习教程 | 经典 CNN 网络实例详解
- 深度学习教程 | CNN 利用:指标检测
- 深度学习教程 | CNN 利用:人脸识别和神经格调转换
- 深度学习教程 | 序列模型与 RNN 网络
- 深度学习教程 | 自然语言解决与词嵌入
- 深度学习教程 | Seq2seq 序列模型和注意力机制