深度学习笔记(3):1.3-1.7 建立你的目标(setting up your goal)

1.3 单一值评价指标(single number evaluation matric)

这一节主要是说对于结果我们希望有一个单一评价指标来决定在多个模型中选择哪个,如下图所示:

建立机器学习项目的过程本来就是一个凭借经验不断更新迭代的过程。假设我们现在有两种方案A和B,A的查准率为95%,查全率为90%,而B的查准率为98%,查全率为85%。什么是查准率和查全率简单说一下,查准率就是准确率,即预测为猫的图片中真正的猫图片的概率,而查全率衡量的是图片是否查完全,查全率为预测正确的猫图片占全部猫图片的比例。

查准率和查全率是一种trade-off关系,比如为了提高查全率,我可以将所有的图片都预测为猫图片,这样查全率就是100%,因为所有真正的猫图片我都找到了,但是这样做就会让准确率很低。

面对图中AB两种方案,一个查全率高一些,一个查准率高一些,那么这两个方案我们到底该怎么选呢?这时候,我们就需要一个单一评价指标,比如F1 score,F1 score是查准率和查全率的调和平均数。计算得A方案的F1 score更大,所以选择一方案。

一般的机器学习项目我们都需要有开发集和单一评价指标。有了开发集,我们就可以计算对应的评价指标,然后再选取一个单一评价指标帮助我们快速地更新迭代产品。

再来看一个例子:

假设我们有一个猫app在全球几个地方投入使用,预测误差如上图所示。首先我们可以同时运行好几种方案,然后根据单一评价指标选择最优方案。在这里可以使用平均数,选取使全球多个地区平均误差最小的方案。把平均数作为单一评价指标,这里应选择C方案。

1.4 设定优化指标(satisficing and optimizing matrics)

有时考虑全部的指标,并提出一个单一值评价指标并不是一件容易的事。在已经有这样指标的时候我们可以直接使用,比如F1 score,它的提出是有一定合理性的,但没有确定的单一型指标时我们该怎么办呢?

还是猫学习器的例子。假设现在我们有三个方案,有两个指标,一个是准确率,它可以是F1 score,也可能是基于其他标准确定的准确率,还有一个指标是运行时间。

面对这样的两个指标,在没有单一指标时,我们可以直接将两个指标组合,作一个加权平均,如上图所示,即希望准确率越高越好,希望运行时间越低越好。但在真实情况下,这个组合未必合理,因为也许大家会比较在意准确率,但是运行时间只要低于一个阈值即可,大家并不会关心运行时间到底会有多快。那这样我们的目标就确定了,我们的优化目标就是准确率,但是有限制条件,那就是运行时间要低于一定阈值,这样问题就变得简单多了,也变得实际多了。在这里,准确率是我们要optimizing的,而运行时间是需要satisficing的,所以这个指标称为satisficing and optimizing matrics。

一般有N个指标的情况下,我们只选取一个最重要的指标进行优化(optimizing),而其他指标作为需要满足(satisficing)的条件。

再举一个例子,比如唤醒人工智能的语句,我们希望提高唤醒的准确率。这时我们的优化目标就是提高唤醒的准确率,但是假阳性(未说唤醒词但人工智能自动打开)限制在一定条件下,比如24h内最多犯一次错误。

1.5 训练集、开发集、测试集划分(train/dev/test distributions)

上两小节讲完单一指标的重要性以及如何设定合理指标,接下来我们来讲一下如何划分训练集、开发集和测试集。

这一节主要侧重于如何划分开发集和测试集。

假设我们要对猫分类器划分开发集(dev/development set)和测试集(test set)。现在数据来自8个地方,如上图所示。现在有一种想法是将前四个地方数据作为开发集,而后四个地方数据作为测试集,请问这样划分对吗?显然是不对的,因为不同的地方数据分布不一样。

开发集用来检验训练集拟合得到的模型,计算得到一些判断指标,然后根据这些指标去选取最佳方案。这就好比打靶,开发集和指标的配合使我们的方案越来越接近靶心,而开发集和测试集分布不同就相当于,在我们已经瞄中靶心时突然又换了一个靶,测试集效果当然不会好,因为使劲的方向就错了。

所以在本例中,要想使开发集和测试集分布相同,可以将8个地方数据完全打乱,然后随机从中抽取一部分作为开发集,然后另一部分作为测试集,即一定要保证开发集和测试集数据分布相同。

接下来老师讲了一个真实的故事来强调开发集和测试集数据分布相同的重要性。

这个故事是这样的,开发集是中等阶层收入,需要训练一个模型去判断是否给该客户提供贷款。团队花费3个月作出了这个模型,不料经理希望用该模型去预测低收入群体,那效果当然不会好啊,团队相当于浪费了三个月的时间,就会很崩溃。所以在划分开发集和测试集时,一定要遵循下图中的原则:

首先是开发集和测试集分布一定要相同,其次,测试集也要和真实世界数据分布相同, 所以以后添加数据时,也一定要记得同时添加进开发集和测试集以保证其分布相同。

这一小节主要讲了开发集和测试集分布一定要相同,还未讲述训练集划分原则, 以及开发集和测试集划分比例。详见后续。

1.6 确定开发集和测试集的大小(size of dev and test sets)

随着深度学习的流行和时代的改变,数据集划分原则也发生了改变,如下图所示:

以前,若只有训练集和测试集,我们习惯将数据7-3分,若有训练集、开发集和测试集,我们习惯将其6-2-2分。这样分是因为以前的数据不多,比如100、1000、10000我们都可以按这样的比例划分。但现在数据量级都是百万级别的,这时开发集和测试集只取1%也能够有10000个,作为开发集和测试集来讲足够了,所以面对现在的数据量级,训练集、开发集和测试集的划分变为98-1-1。

那么开发集和测试集的大小该如何确定呢?

其实这跟二者的作用有关,二者的大小足够大到能完成其作用即可。

开发集的作用就是评估不同方案,搭配指标选择最优方案。所以开发集的大小要足够大到能够反映不同方案的差距,比如A方案和B方案指标仅差0.1%,所以这时开发集大小要能够精确反映两种方案在0.1%上的差距,若仅是大到能反映1%上的差距,那二者都是97%,也就无从比较优劣了。

测试集的大小安排也是同理,需要大到实现其作用。

测试集的大小要足够大到能够给你要做的项目的性能指标一定的置信度,也许10000或100000就够了,也许远小于旧的划分标准30%。

对一些不需要置信度那么高的系统,可能不需要测试集,只有训练集和开发集,有些人会称这时的开发集为测试集,即这时候测试集干的是开发集的工作,即训练集拟合模型,通过测试集的表现去改进模型。老师非常不建议这样做,因为有了测试集,你就可以使用这组不带偏差的数据来测量系统的性能。

最后总结一下现在流行的划分开发集和测试集的方法,即把大量数据分到训练集,少量数据分到开发集和测试集,特别是你有一个非常大的数据集时。以前的经验法则其实是为了保证开发集足够大至达到目的,即帮你评估不同方案的好坏去选择最优方案,而测试集的目的是评估最终的损失偏差,只要设置足够大的测试集至能达到目的就可以,可能这个数据远远小于原数据集的30%。

1.7 何时改变开发集、测试集及评估指标(when to change dev/test sets and metrics)

前几小节我们已经学会了如何划分开发集和测试集,也知道了如何设定评估指标,而开发集和评估指标的设定相当于给了你的团队一个指标去瞄准,但是在做项目过程中,有时你会意识到目标放错了,这种情况下,你需要移动目标,接下来我们讨论的就是这种情况。

还是猫的那个例子,如下图所示:

假设现在有两个方案,评估标准是错误率,A方案错误率为3%,B为5%。按照错误率这个评估标准,理应选择A方案。但是A方案投入使用之后,发现A方案虽然能够更好识别猫图片提供给用户,但是提供错误时经常会提供一些色情图片,而B方案虽然错误率较高,但是不输出色情图片。从用户满意度来看,显然B方案比A方案好很多,此时的评估指标已经不受用了。

那就需要改变评估指标,怎么改呢?之前每一个样本犯错误权重都是一样的,现在我可以使输出色情图片的惩罚权重高一些,即若输出图片不是猫也不是色情图片,其权重为1,若输出图片是色情图片,则惩罚权重为10。通过这样的改进再来计算误差,如上图所示,I为示性函数,1/\sum_{i=1}^{m}w^{i}实现归一化,保证error在0-1之间。

当然这样做就要求我们对开发集和测试集进行标签标注,即不仅对图片是不是猫图片进行标注,还要标注图片是否是色情图片,这样才能够计算改进后的error。

在移动目标这个过程中,其实我们使用的也是正交化步骤,如下图所示:

当知道目标改变时,比如在上例中,接下来要做的就是分两步走。首先设定一个正确的评估指标,这样我们就有了目标,然后就是不断逼近目标,根据开发集和评估指标选择最优方案。

刚才的例子只涉及到了评估指标的改变,我们也会遇到需要同时改变评估指标和数据集的例子,如下图所示:

还是这个学习器,A算法错误率为3%,B为5%,所以我们自然选择A方案,但是实际上B方案表现更好,这是为什么?因为我们在测试算法性能时,开发集和测试集都是在网上找到的分辨率很高的猫图片,而用户上传的图片分辨率没有高,可能图片有的地方有些奇怪,或者是图片模糊导致其实B方案更好,其实也可以理解,因为训练时我们使用的是高清图片,但实际样本中包含模糊图片,这样训练出来的算法相当于有些过拟合了,这时误差大一些的算法可能泛化效果更好。

面对这样的情况,我们应该怎么样处理呢?这时我们的目标其实从很好识别猫图片变为提高用户体验,希望模型也能够很好识别用户上传的模糊不清的猫图片。所以我们需要改变评价指标,或者改变开发集和测试集,加入模糊猫图片,使开发集和测试集分布尽量和实际情况下数据分布一致。

 

版权声明:尊重博主原创文章,转载请注明出处https://blog.csdn.net/kkkkkiko/article/details/81667399

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值