2020-7-2 吴恩达DL学习-C3结构化ML项目-w1 ML策略1(1.7 什么时候该改变开发/测试集和指标--无法正确衡量算法间的优劣时候修改。修改的方针)

274 篇文章 24 订阅
233 篇文章 0 订阅

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

1.7 什么时候该改变开发/测试集和指标 When to change dev/test sets and metrics

在前面几节课中我们已经学过如何设置开发集和评估指标,就像是把目标定在某个位置,让你的团队瞄准。但有时候在项目进行途中,你可能意识到,目标的位置放错了。这种情况下,你应该移动你的目标。
在这里插入图片描述

我们来看一个例子。如上图。
假设你在构建一个猫分类器,试图找到很多猫的照片,向你的爱猫人士用户展示,你决定使用的指标是分类错误率。算法 A A A B B B分别有3%错误率和5%错误率,所以算法 A A A似乎做得更好。

现在我们实际试一下这些算法。
你观察一下这些算法,算法 A A A由于某些原因,把很多色情图像分类成猫了。如果你部署算法 A A A,那么用户就会看到更多猫图,因为它识别猫的错误率只有3%,但它同时也会给用户推送一些色情图像,这是你的公司完全不能接受的,你的用户也完全不能接受。相比之下,算法 B B B有5%的错误率,这样分类器就得到较少的图像,但它不会推送色情图像。所以从你们公司的角度来看,以及从用户接受的角度来看,算法实际上是一个更好的算法,因为它不让任何色情图像通过。

在这个例子中,发生的事情就是,算法 A A A在评估指标上做得更好,它的错误率达到3%,但实际上是个更糟糕的算法。评估指标加上开发集它们都倾向于选择算法 A A A,因为它们会说,算法 A A A的错误率较低,这是你们自己定下来的指标评估出来的。

但你和你的用户更倾向于使用算法 B B B,因为它不会将色情图像分类为猫。所以当这种情况发生时,你的评估指标无法正确衡量算法之间的优劣排序时,在这种情况下,你应该要改变评估指标,或者要改变开发集或测试集。

你用的分类错误率指标可以写成这样:
E r r o r = 1 m d e v ∑ i = 1 m d e v I { y p r e d ( i ) ≠ y ( i ) } Error=\frac 1{m_{dev}}\sum_{i=1}^{m_{dev}}I\{y^{(i)}_{pred}\neq y^{(i)} \} Error=mdev1i=1mdevI{ypred(i)=y(i)}

这个公式统计了分类错误的样本

  • m d e v m_{dev} mdev是你的开发集样本数
  • y p r e d ( i ) y^{(i)}_{pred} ypred(i)表示预测值,其值为0或1
  • 符号 I I I表示一个函数,统计出表达式为真的样本数

这个评估指标的问题在于,它对色情图片和非色情图片一视同仁,但你其实真的希望你的分类器不会错误标记色情图像。

修改这个评估指标的一个方法是,加个权重项,即:
E r r o r = 1 m d e v ∑ i = 1 m d e v w ( i ) I { y p r e d ( i ) ≠ y ( i ) } Error=\frac 1{m_{dev}}\sum_{i=1}^{m_{dev}}w^{(i)}I\{y^{(i)}_{pred}\neq y^{(i)} \} Error=mdev1i=1mdevw(i)I{ypred(i)=y(i)}

如果图片 x ( i ) x^{(i)} x(i)不是色情图片,则 w ( i ) = 1 w^{(i)}=1 w(i)=1。如果是色情图片, w ( i ) w^{(i)} w(i)可能就是10甚至100。这样你赋予了色情图片更大的权重,让算法将色情图分类为猫图时,错误率这个项快速变大。在这个例子里,你把色情图片分类成猫这一错误的惩罚权重加大了10倍。
在这里插入图片描述

如果你希望得到归一化常数,在技术上,就是 w ( i ) w^{(i)} w(i)对所有 i i i求和,这样错误率仍然在0和1之间,即:
E r r o r = 1 w ( i ) ∑ i = 1 m d e v w ( i ) I { y p r e d ( i ) ≠ y ( i ) } Error=\frac 1{w^{(i)}}\sum_{i=1}^{m_{dev}}w^{(i)}I\{y^{(i)}_{pred}\neq y^{(i)} \} Error=w(i)1i=1mdevw(i)I{ypred(i)=y(i)}
加权的细节并不重要,实际上要使用这种加权,你必须自己过一遍开发集和测试集,在开发集和测试集里,自己把色情图片标记出来,这样你才能使用这个加权函数。

粗略的结论是,如果你的评估指标无法正确评估好算法的排名,那么就需要花时间定义一个新的评估指标。这是定义评估指标的其中一种可能方式(上述加权法)。

评估指标的意义在于,准确告诉你已知两个分类器,哪一个更适合你的应用。就本课程的内容而言,我们不需要太注重新错误率指标是怎么定义的,关键在于,如果你对旧的错误率指标不满意,那就不要一直沿用你不满意的错误率指标,而应该尝试定义一个新的指标,能够更加符合你的偏好,定义出实际更适合的算法。

你可能注意到了,到目前为止我们只讨论了如何定义一个指标去评估分类器,也就是说,我们定义了一个评估指标帮助我们更好的把分类器排序,能够区分出它们在识别色情图片的不同水平,这实际上是一个正交化的例子。

我想你处理ML问题时,应该把它切分成独立的步骤。

第一步是弄清楚如何定义一个指标来衡量你想做的事情的表现,然后我们可以分开考虑如何改善系统在这个指标上的表现。所以定义你要瞄准的目标,这是完全独立的一步,你可以把它看成是一个单独的旋钮,可以调试算法表现的旋钮。如何精确瞄准,如何命中目标,定义指标是第一步。

然后第二步要做别的事情,在逼近目标的时候,也许你的学习算法针对如下长这样的成本函数优化
J = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) J=\frac 1m\sum_{i=1}^mL(\hat y^{(i)},y^{(i)}) J=m1i=1mL(y^(i),y(i))
你要最小化训练集上的损失。引入权重,也许最后需要修改归一化常数m,即:
J = 1 ∑ w ( i ) ∑ i = 1 m w ( i ) L ( y ^ ( i ) , y ( i ) ) J=\frac 1{\sum w^{(i)}}\sum_{i=1}^mw{(i)}L(\hat y^{(i)},y^{(i)}) J=w(i)1i=1mw(i)L(y^(i),y(i))

强调一下,如何定义 J J J并不重要,关键在于正交化的思路

把设立目标定为第一步,然后瞄准和射击目标是独立的第二步。换种说法,我鼓励你们将定义指标看成一步,然后在定义了指标之后,你才能想如何优化系统来提高这个指标评分。比如改变你NN要优化的成本函数 J J J

在继续之前,我们再讲一个例子。

假设你的两个猫分类器 A A A B B B,分别有用开发集评估得到3%的错误率和5%的错误率。你的测试集用在网上下载的图片构成,这些是高质量,取景框很专业的图像。但也许你在部署算法产品时,你发现算法 B B B看起来表现更好,即使 A A A在开发集上表现不错。在这里插入图片描述

你发现你一直在用从网上下载的高质量图片训练算法。但当你部署到手机应用时,算法作用到用户上传的图片时,那些图片取景不专业,没有把猫完整拍下来,或者猫的表情很古怪,也许图像很模糊,此时你发现算法 B B B表现其实更好。

这是另一个指标和开发集测试集出问题的例子。
问题在于,你做评估用的是很漂亮的高分辨率的开发集和测试集,图片取景很专业。但你的用户真正关心的是,他们上传的图片能不能被正确识别。那些图片可能是没那么专业的照片,有点模糊,取景很业余。

改变指标的方针

所以方针是,如果你在指标上表现很好,在当前开发集或者开发集和测试集分布中表现很好,但你的实际应用程序,你真正关注的地方表现不好,那么就需要修改指标或者你的开发测试集。

换句话说,如果你发现你的开发测试集都是这些高质量图像,但在开发测试集上做的评估无法预测你的应用实际的表现。因为你的应用处理的是低质量图像,那么就应该改变你的开发测试集,让你的数据更能反映你实际需要处理好的数据。

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

有一个评估指标和开发集可以让你更快做出决策,判断算法 A A A还是算法 B B B更优,加速你和你的团队迭代的速度。

所以我的建议是,即使你无法定义出一个很完美的评估指标和开发集,你可以先快速设立出来,然后使用它们来驱动你们团队的迭代速度。如果在这之后,你发现选的不好,你有更好的想法,那么完全可以马上改。

对于大多数团队,我建议最好不要在没有评估指标和开发集时跑太久,因为那样可能会减慢你的团队迭代和改善算法的速度。

本节课讲的是什么时候需要改变你的评估指标和开发测试集,我希望这些方针能让你的整个团队设立一个明确的目标,一个你们可以高效迭代,改善性能的目标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值