←上一篇 ↓↑ 下一篇→
2.4 在不同的划分上进行训练并测试 回到目录 2.6 定位数据不匹配

数据不匹配时,偏差和方差的分析 (Bias and Variance with Mismatched Data Distribution)

估计学习算法的偏差和方差真的可以帮你确定接下来应该优先做的方向,但是,当你的训练集来自和开发集、测试集不同分布时,分析偏差和方差的方式可能不一样,我们来看为什么。

我们继续用猫分类器为例,我们说人类在这个任务上能做到几乎完美,所以贝叶斯错误率或者说贝叶斯最优错误率,我们知道这个问题里几乎是0%。所以要进行错误率分析,你通常需要看训练误差,也要看看开发集的误差。比如说,在这个样本中,你的训练集误差是1%,你的开发集误差是10%,如果你的开发集来自和训练集一样的分布,你可能会说,这里存在很大的方差问题,你的算法不能很好的从训练集出发泛化,它处理训练集很好,但处理开发集就突然间效果很差了。

但如果你的训练数据和开发数据来自不同的分布,你就不能再放心下这个结论了。特别是,也许算法在开发集上做得不错,可能因为训练集很容易识别,因为训练集都是高分辨率图片,很清晰的图像,但开发集要难以识别得多。所以也许软件没有方差问题,这只不过反映了开发集包含更难准确分类的图片。所以这个分析的问题在于,当你看训练误差,再看开发误差,有两件事变了。首先算法只见过训练集数据,没见过开发集数据。第二,开发集数据来自不同的分布。而且因为你同时改变了两件事情,很难确认这增加的9%误差率有多少是因为算法没看到开发集中的数据导致的,这是问题方差的部分,有多少是因为开发集数据就是不一样。

为了弄清楚哪个因素影响更大,如果你完全不懂这两种影响到底是什么,别担心我们马上会再讲一遍。但为了分辨清楚两个因素的影响,定义一组新的数据是有意义的,我们称之为训练-开发集,所以这是一个新的数据子集。我们应该从训练集的分布里挖出来,但你不会用来训练你的网络。

我的意思是我们已经设立过这样的训练集、开发集和测试集了,并且开发集和测试集来自相同的分布,但训练集来自不同的分布。

我们要做的是随机打散训练集,然后分出一部分训练集作为训练-开发集(training-dev),就像开发集和测试集来自同一分布,训练集、训练-开发集也来自同一分布。

但不同的地方是,现在你只在训练集训练你的神经网络,你不会让神经网络在训练-开发集上跑后向传播。为了进行误差分析,你应该做的是看看分类器在训练集上的误差,训练-开发集上的误差,还有开发集上的误差。

比如说这个样本中,训练误差是1%,我们说训练-开发集上的误差是9%,然后开发集误差是10%,和以前一样。你就可以从这里得到结论,当你从训练数据变到训练-开发集数据时,错误率真的上升了很多。而训练数据和训练-开发数据的差异在于,你的神经网络能看到第一部分数据并直接在上面做了训练,但没有在训练-开发集上直接训练,这就告诉你,算法存在方差问题,因为训练-开发集的错误率是在和训练集来自同一分布的数据中测得的。所以你知道,尽管你的神经网络在训练集中表现良好,但无法泛化到来自相同分布的训练-开发集里,它无法很好地泛化推广到来自同一分布,但以前没见过的数据中,所以在这个样本中我们确实有一个方差问题。

我们来看一个不同的样本,假设训练误差为1%,训练-开发误差为1.5%,但当你开始处理开发集时,错误率上升到10%。现在你的方差问题就很小了,因为当你从见过的训练数据转到训练-开发集数据,神经网络还没有看到的数据,错误率只上升了一点点。但当你转到开发集时,错误率就大大上升了,所以这是数据不匹配的问题。因为你的学习算法没有直接在训练-开发集或者开发集训练过,但是这两个数据集来自不同的分布。但不管算法在学习什么,它在训练-开发集上做的很好,但开发集上做的不好,所以总之你的算法擅长处理和你关心的数据不同的分布,我们称之为数据不匹配的问题。

我们再来看几个样本,我会在下一行里写出来,因上面没空间了。所以训练误差、训练-开发误差、还有开发误差,我们说训练误差是10%,训练-开发误差是11%,开发误差为12%,要记住,人类水平对贝叶斯错误率的估计大概是0%,如果你得到了这种等级的表现,那就真的存在偏差问题了。存在可避免偏差问题,因为算法做的比人类水平差很多,所以这里的偏差真的很高。

最后一个例子,如果你的训练集错误率是10%,你的训练-开发错误率是11%,开发错误率是20%,那么这其实有两个问题。第一,可避免偏差相当高,因为你在训练集上都没有做得很好,而人类能做到接近0%错误率,但你的算法在训练集上错误率为10%。这里方差似乎很小,但数据不匹配问题很大。所以对于这个样本,我说,如果你有很大的偏差或者可避免偏差问题,还有数据不匹配问题。

我们看看这张幻灯片里做了什么,然后写出一般的原则,我们要看的关键数据是人类水平错误率,你的训练集错误率,训练-开发集错误率,所以这分布和训练集一样,但你没有直接在上面训练。根据这些错误率之间差距有多大,你可以大概知道,可避免偏差、方差数据不匹配问题各自有多大。

我们说人类水平错误率是4%的话,你的训练错误率是7%,而你的训练-开发错误率是10%,而开发错误率是12%,这样你就大概知道可避免偏差有多大。因为你知道,你希望你的算法至少要在训练集上的表现接近人类。而这大概表明了方差大小,所以你从训练集泛化推广到训练-开发集时效果如何?而这告诉你数据不匹配的问题大概有多大。技术上你还可以再加入一个数字,就是测试集表现,我们写成测试集错误率,你不应该在测试集上开发,因为你不希望对测试集过拟合。但如果你看看这个,那么这里的差距就说明你对开发集过拟合的程度。所以如果开发集表现和测试集表现有很大差距,那么你可能对开发集过拟合了,所以也许你需要一个更大的开发集,对吧?要记住,你的开发集和测试集来自同一分布,所以这里存在很大差距的话。如果算法在开发集上做的很好,比测试集好得多,那么你就可能对开发集过拟合了。如果是这种情况,那么你可能要往回退一步,然后收集更多开发集数据。现在我写出这些数字,这数字列表越往后数字越大。

这里还有个例子,其中数字并没有一直变大,也许人类的表现是4%,训练错误率是7%,训练-开发错误率是10%。但我们看看开发集,你发现,很意外,算法在开发集上做的更好,也许是6%。所以如果你见到这种现象,比如说在处理语音识别任务时发现这样,其中训练数据其实比你的开发集和测试集难识别得多。所以这两个(7%,10%)是从训练集分布评估的,而这两个(6%,6%)是从开发测试集分布评估的。所以有时候如果你的开发测试集分布比你应用实际处理的数据要容易得多,那么这些错误率可能真的会下降。所以如果你看到这样的有趣的事情,可能需要比这个分析更普适的分析,我在下一张幻灯片里快速解释一下。

所以,我们就以语音激活后视镜为例子,事实证明,我们一直写出的数字可以放到一张表里,在水平轴上,我要放入不同的数据集。比如说,你可能从一般语音识别任务里得到很多数据,所以你可能会有一堆数据,来自小型智能音箱的语音识别问题的数据,你购买的数据等等。然后你收集了和后视镜有关的语音数据,在车里录的。所以这是表格的轴,不同的数据集。在另一条轴上,我要标记处理数据不同的方式或算法。

首先,人类水平,人类处理这些数据集时准确度是多少。然后这是神经网络训练过的数据集上达到的错误率,然后还有神经网络没有训练过的数据集上达到的错误率。所以结果我们上一张幻灯片说是人类水平的错误率,数字填入这个单元格里(第二行第二列),人类对这一类数据处理得有多好,比如来自各种语音识别系统的数据,那些进入你的训练集的成千上万的语音片段,而上一张幻灯片中的例子是4%。这个数字(7%),可能是我们的训练错误率,在上一张幻灯片中的例子中是7%。是的,如果你的学习算法见过这个样本,在这个样本上跑过梯度下降,这个样本来自你的训练集分布或一般的语音识别数据分布,你的算法在训练过的数据中表现如何呢?然后这就是训练-开发集错误率,通常来自这个分布的错误率会高一点,一般的语音识别数据,如果你的算法没在来自这个分布的样本上训练过,它的表现如何呢?这就是我们说的训练-开发集错误率。

如果你移到右边去,这个单元格是开发集错误率,也可能是测试集错误,在刚刚的例子中是6%。而开发集和测试集,实际上是两个数字,但都可以放入这个单元格里。如果你有来自后视镜的数据,来自从后视镜应用在车里实际录得的数据,但你的神经网络没有在这些数据上做过反向传播,那么错误率是多少呢?

我们在上一张幻灯片作的分析是观察这两个数字之间的差异(Human level 4%和Training error 7%),还有这两个数字之间(Training error 7%和Training-dev error 10%),这两个数字之间(Training-dev error 10%和Dev/Test dev 6%)。这个差距(Human level 4%和Training error 7%)衡量了可避免偏差大小,这个差距Training error 7%和Training-dev error 10%)衡量了方差大小,而这个差距(Training-dev error 10%和Dev/Test dev 6%)衡量了数据不匹配问题的大小。

事实证明,把剩下的两个数字(rearview mirror speech data 6%和Error on examples trained on 6%),也放到这个表格里也是有用的。如果结果这也是6%,那么你获得这个数字的方式是你让一些人自己标记他们的后视镜语音识别数据,看看人类在这个任务里能做多好,也许结果也是6%。做法就是,你收集一些后视镜语音识别数据,把它放在训练集中,让神经网络去学习,然后测量那个数据子集上的错误率,但如果你得到这样的结果,好吧,那就是说你已经在后视镜语音数据上达到人类水平了,所以也许你对那个数据分布做的已经不错了。

当你继续进行更多分析时,分析并不一定会给你指明一条前进道路,但有时候你可能洞察到一些特征。比如比较这两个数字(General speech recognition Human level 4%和rearview mirror speech data 6%),告诉我们对于人类来说,后视镜的语音数据实际上比一般语音识别更难,因为人类都有6%的错误,而不是4%的错误,但看看这个差值,你就可以了解到偏差和方差,还有数据不匹配这些问题的不同程度。所以更一般的分析方法是,我已经用过几次了。我还没用过,但对于很多问题来说检查这个子集的条目,看看这些差值,已经足够让你往相对有希望的方向前进了。但有时候填满整个表格,你可能会洞察到更多特征。

最后,我们以前讲过很多处理偏差的手段,讲过处理方差的手段,但怎么处理数据不匹配呢?特别是开发集、测试集和你的训练集数据来自不同分布时,这样可以用更多训练数据,真正帮你提高学习算法性能。但是,如果问题不仅来自偏差和方差,你现在又有了这个潜在的新问题,数据不匹配,有什么好办法可以处理数据不匹配的呢?实话说,并没有很通用,或者至少说是系统解决数据不匹配问题的方法,但你可以做一些尝试,可能会有帮助,我们在下一个视频里看看这些尝试。

所以我们讲了如何使用来自和开发集、测试集不同分布的训练数据,这可以给你提供更多训练数据,因此有助于提高你的学习算法的性能,但是,潜在问题就不只是偏差和方差问题,这样做会引入第三个潜在问题,数据不匹配。如果你做了错误分析,并发现数据不匹配是大量错误的来源,那么你怎么解决这个问题呢?但结果很不幸,并没有特别系统的方法去解决数据不匹配问题,但你可以做一些尝试,可能会有帮助,我们来看下一段视频。

课程板书





←上一篇 ↓↑ 下一篇→
2.4 在不同的划分上进行训练并测试 回到目录 2.6 定位数据不匹配

2.5 数据不匹配时,偏差和方差的分析-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授相关推荐

  1. 2.10 数据增强-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.9 迁移学习 回到目录 2.11 计算机视觉现状 数据增强 (Data Augmentation) 大部分的计算机视觉任务使用很多的数据,所以数据扩充是经常使用的一种技巧 ...

  2. 2.4 使用来自不同分布的数据,进行训练和测试-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.3 快速搭建你的第一个系统,并进行迭代 回到目录 2.5 不匹配数据划分的偏差和误差 使用来自不同分布的数据,进行训练和测试 (Training and Testing ...

  3. 2.2 清除标注错误的数据-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.1 误差分析 回到目录 2.3 快速搭建你的第一个系统,并进行迭代 清除标注错误的数据 (Cleaning Up Incorrectly Labeled Data) 你的 ...

  4. 1.2 偏差/方差-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 1.1 训练/开发/测试集 回到目录 1.3 机器学习基础 偏差/方差 (Bias/Variance) 我注意到,几乎所有机器学习从业人员都期望深刻理解偏差和方差,这两个概念 ...

  5. 4.3 偏差与方差-机器学习笔记-斯坦福吴恩达教授

    偏差与方差 在机器学习中,偏差(bias) 反映了模型无法描述数据规律,而 方差(variance) 反映了模型对训练集过度敏感,而丢失了数据规律,高偏差和高方差都会造成新数据到来时,模型给出错误的预 ...

  6. 2.6 处理数据不匹配问题-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.5 不匹配数据划分的偏差和误差 回到目录 2.7 迁移学习 处理数据不匹配问题 (Addressing Data Mismatch) 如果您的训练集来自和开发测试集不同的 ...

  7. 2.5 指数加权平均的偏差修正-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 2.4 理解指数加权平均 回到目录 2.6 动量梯度下降法 指数加权平均的偏差修正 (Bias Correction in Exponentially Weighted Av ...

  8. 11.3 人工合成数据-机器学习笔记-斯坦福吴恩达教授

    人工合成数据 在字符识别阶段,为了更好的完成分类识别任务,我们就需要给系统提供尽可能多的训练图像,如果我们手头上拥有的图像不多,就需要人工合成更多的数据.例如,我们可以收集不同的字体,并为每种字体的每 ...

  9. 10.1 掌握大数据-机器学习笔记-斯坦福吴恩达教授

    掌握大数据 在算法分析与优化一节中,我们就提到,在机器学习界流传着这样一句话: It's not who has the best algorithm that wins. It's who has ...

最新文章

  1. 你写代码,难道是因为热爱吗?
  2. python编写木马攻击_用Python写一个自动木马程序
  3. 用html5做一个简单的作品,html5 canvas 简单画板实现代码
  4. 集成开放平台标准化连接器之基于OAS3.0的API管理能力
  5. jsp数据 foreach 循环遍历 (含效果图)- 代码篇
  6. 百度地图 截图java_[Java教程]百度地图API 简单使用
  7. linux系统上不去网,linux 上不去网
  8. 获取应用名字、版本号
  9. QQ 微信转链,如何实现淘宝京东苏宁唯品会拼多多,返利转链思路
  10. 毕业前写了20万行代码,让我从成为同学眼里的面霸
  11. 广东工业大学2020级年ACM第一次月赛
  12. QTableView 例三(代理)
  13. Hadoop配置历史服务器、日志聚集、常用端口号(2.x/3.x)
  14. python是什么类型需要_python数据类型是什么
  15. 简述驱动桥的动力传递路线_驱动桥
  16. 2013年08月威海之旅
  17. 多个主机节点上的Hyperledger Fabric
  18. docker搭建searx_Searx
  19. android 9.0系统下载地址,安卓9.0发布(有下载地址)!你会去用吗?
  20. 亚稳态的产生机理、消除办法

热门文章

  1. JavaScript的类型、值和变量
  2. 3.1_栈_顺序存储结构(数组形式)
  3. 连载《一个程序猿的生命周期》-《发展篇》 - 3.农民与软件工程师,农业与IT业...
  4. 数据库集群技术 -摘自网络
  5. UA MATH567 高维统计I 概率不等式3 亚高斯性与亚高斯范数
  6. Split-plot设计 SAS实践
  7. 矩阵分析与多元统计11 Kronecker乘积
  8. 一些SqlServer常见和入门操作
  9. windbg !htrace 学习总结
  10. 经典算法问题 - 最大连续子数列和