吴恩达深度学习:第三课:结构化机器学习项目 第一周:机器学习(ML)策略(1)

1.1 为什么是ML策略?

image
你可能有很多想法去改善你的系统,比如,你可能想我们去收集更多的训练数据吧。或者你会说,可能你的训练集的多样性还不够,你应该收集更多不同姿势的猫咪图片,或者更多样化的反例集。或者你想再用梯度下降训练算法,训练久一点。或者你想尝试用一个完全不同的优化算法,比如Adam优化算法。或者尝试使用规模更大或者更小的神经网络。或者你想试试dropout或者L2正则化。或者你想修改网络的架构,比如修改激活函数,改变隐藏单元的数目之类的方法。

1.2 正交化

image

  • 如果你的算法在成本函数上不能很好地拟合训练集,你可能训练更大的网络,或者可以切换到更好的优化算法,比如Adam优化算法,等等。我们将在本周和下周讨论一些其他选项。
  • 如果发现算法对开发集的拟合很差。
    • 比如说,你的算法在开发集上做的不好,它在训练集上做得很好,但开发集不行,然后你有一组正则化的旋钮可以调节,尝试让系统满足第二个条件。
    • 增大训练集可以是另一个可用的旋钮,它可以帮助你的学习算法更好地归纳开发集的规律。
  • 如果系统在开发集上做的很好,但测试集上做得不好呢?如果是这样,可能是更大的开发集。因为如果它在开发集上做的不错,但测试集不行这可能意味着你对开发集过拟合了,你需要往回退一步,使用更大的开发集。
  • 如果它在测试集上做得很好,但无法给你的猫图片应用用户提供良好的体验,这意味着你需要回去,改变开发集或成本函数。因为如果根据某个成本函数,系统在测试集上做的很好,但它无法反映你的算法在现实世界中的表现,这意味着要么你的开发集分布设置不正确,要么你的成本函数测量的指标不对。

1.3 单一数字评估指标

image

查准率(precision)

在你的分类器标记为猫的例子中,有多少真的是猫。

所以如果分类器A有95%的查准率,这意味着你的分类器说这图有猫的时候,有95%的机会真的是猫。

查全率(recall)

查全率就是,对于所有真猫的图片,你的分类器正确识别出了多少百分比。实际为猫的图片中,有多少被系统识别出来?如果分类器A查全率是90%,这意味着对于所有的图像,比如说你的开发集都是真的猫图,分类器A准确地分辨出了其中的90%。

引入一段西瓜书的内容

理解查准率(precision)& 查全率(recall)

按照周志华《机器学习》中的例子,以西瓜问题为例。

错误率:有多少比例的西瓜被判断错误;

查准率(precision):算法挑出来的西瓜中有多少比例是好西瓜;

查全率(recall):所有的好西瓜中有多少比例被算法跳了出来。

继续按照上述前提,对于二分类问题,我们根据真实类别与算法预测类别会有下面四个名词:

在写下面四个名词前,需要给一些关于T(true)、F(false)、P(positive)、N(negative)的解释:

  • P表示算法预测这个样本为1(好西瓜)、
  • N表示算法预测这个样本为0(坏西瓜);
  • T表示算法预测的和真实情况一样,即算法预测正确,
  • F表示算法预测的和真实情况不一样,即算法预测不对。

  • TP:正确地标记为正,即算法预测它为好西瓜,这个西瓜真实情况也是好西瓜(双重肯定是肯定);
  • FP:错误地标记为正,即算法预测它是好西瓜,但这个西瓜真实情况是坏西瓜;
  • FN:错误地标记为负,即算法预测为坏西瓜,(F算法预测的不对)但这个西瓜真实情况是好西瓜(双重否定也是肯定);
  • TN:正确地标记为负,即算法标记为坏西瓜,(T算法预测的正确)这个西瓜真实情况是坏西瓜。

所以有:
image

查准率(precision)& 查全率(recall)的关系

  1. 查准率和查全率是一对矛盾的指标,一般说,当查准率高的时候,查全率一般很低;查全率高时,查准率一般很低。比如:若我们希望选出的西瓜中好瓜尽可能多,即查准率高,则只挑选最优把握的西瓜,算法挑选出来的西瓜(TP+FP)会减少,相对挑选出的西瓜确实是好瓜(TP)也相应减少,但是分母(TP+FP)减少的更快,所以查准率变大;在查全率公式中,分母(所有好瓜的总数)是不会变的,分子(TP)在减小,所以查全率变小。
  2. 在实际的模型评估中,单用Precision或者Recall来评价模型是不完整的,评价模型时必须用Precision/Recall两个值。这里介绍三种使用方法:平衡点(Break-Even Point,BEP)、F1度量、F1度量的一般化形式
  • BEP是产准率和查全率曲线中查准率=查全率时的取值,如下:
    image
    P-R曲线与平衡点

    从图中明显看出算法效果:A>B>C

  • F1度量的准则是:F1值越大算法性能越好。
    image

  • 在一些实际使用中,可能会对查准率或者查全率有偏重,比如:逃犯信息检索系统中,更希望尽量少的漏掉逃犯,此时的查全率比较重要。会有下面F1的一般形式。
    image
    当beta>1时查全率重要,beta<1时查准率重要

通过F1数值来选取最优的模型

通过F1是常用的方法,可以看机器学习中对于F1算法的描述。

1.4 满足和优化指标

其中N个指标,对于N-1个指标来说只要满足了即可。但对于其中一个准确率,尽最大能力优化。

1.5 训练/开发/测试集划分

开发(dev)集:也叫做(development set),有时称为保留交叉验证集(hold out cross validation set
image
开发,测试集应来自同一分布,也就是同一靶心去优化。

所以我建议你们在设立开发集和测试集时,要选择这样的开发集和测试集,能够反映你未来会得到的数据,认为很重要的数据,必须得到好结果的数据,特别是,这里的开发集和测试集可能来自同一个分布。所以不管你未来会得到什么样的数据,一旦你的算法效果不错,要尝试收集类似的数据,而且,不管那些数据是什么,都要随机分配到开发集和测试集上。因为这样,你才能将瞄准想要的目标,让你的团队高效迭代来逼近同一个目标,希望最好是同一个目标

1.6 开发集和测试集的大小

对于大数据时代,数据集的划分应该是这样:

比如说你有1百万个训练样本,这样分可能更合理,98%作为训练集,1%开发集,1%测试集

因为如果你有1百万个样本,那么1%就是10,000个样本,这对于开发集和测试集来说可能已经够了

所以在现代深度学习时代,有时我们拥有大得多的数据集,所以使用小于20%的比例或者小于30%比例的数据作为开发集和测试集也是合理的。

概念方面:
测试集的目的是完成系统开发之后,测试集可以帮你评估投产系统的性能

所以测试集不用来迭代模型,优化参数。当训练集训练完之后,会用开发集(dev)做这个后续优化参数。

1.7 什么时候该改变开发/测试集和指标?

问题描述

image
假设是关于猫的分类器,第一个虽然误差有3%,但是会将色情图片识别为猫,第二个误差是5%,但是不会将色情图片识别为猫。

所以当误差不是你想要的时候,你需要重新定义损失函数。(给色情图片增加权重)

解决方法

结果:
在你构建模型的时候要分两步骤:

  • 第一步就是设定目标。所以要定义你要瞄准的目标,这是完全独立的一步,这是你可以调节的一个旋钮。如何设立目标是一个完全独立的问题,把它看成是一个单独的旋钮,可以调试算法表现的旋钮,如何精确瞄准,如何命中目标,定义指标是第一步。
    J = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) J=\frac{1}{m} \sum_{i=1}^{m} L\left(\hat{y}^{(i)}, y^{(i)}\right) J=m1i=1mL(y^(i),y(i))
  • 第二步是独立的瞄准和射击目标,在逼近目标的时候,也许你的学习算法针对上面公式的成本函数优化。但在最小化训练集上的损失。你可以做的其中一件事是,修改这个,为了引入这些权重,也许最后需要修改这个归一化常数
    J = 1 ∑ w ( i ) ∑ i = 1 m w ( i ) L ( y ^ ( i ) , y ( i ) ) J=\frac{1}{\sum w^{(i)}} \sum_{i=1}^{m} w^{(i)} L\left(\hat{y}^{(i)}, y^{(i)}\right) J=w(i)1i=1mw(i)L(y^(i),y(i))

总结

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

即使你无法定义出一个很完美的评估指标和开发集,你直接快速设立出来,然后使用它们来驱动你们团队的迭代速度。如果在这之后,你发现选的不好,你有更好的想法,那么完全可以马上改。对于大多数团队,我建议最好不要在没有评估指标和开发集时跑太久,因为那样可能会减慢你的团队迭代和改善算法的速度。

1.8 为什么是人的表现?

发现贝叶斯最优错误率

image
当你开始往人类水平努力时,进展是很快的。但是过了一段时间,当这个算法表现比人类更好时,那么进展和精确度的提升就变得更慢了

贝叶斯最优错误率 |绿线:随着时间的推移,当您继续训练算法时,可能模型越来越大,数据越来越多,但是性能无法超过某个理论上限。上限及贝叶斯最优错误率。

为什么当你超越人类的表现时,进展会慢下来?

  • 人类水平在很多任务中离贝叶斯最优错误率已经不远了,人们非常擅长看图像,分辨里面有没有猫或者听写音频。所以,当你超越人类的表现之后也许没有太多的空间继续改善了。
  • 只要你的表现比人类的表现更差,那么实际上可以使用某些工具来提高性能。一旦你超越了人类的表现,这些工具就没那么好用。

1.9 可避免偏差

可避免偏差的含义:目前模型与贝叶斯错误率(最优错误率)之间的差距。如果模型错误率小于贝叶斯错误率并不一定是个好事情,因为可能过拟合。

那么三组偏差

  • 人类水平错误率(接近贝叶斯错误率)
  • 训练集错误率
  • 开发集错误率

这3组偏差,就可以确定我们的优化策略,首先应该先减少那组数据的错误率

  • 如果前面2组差距过大,先增加训练集数量,减少训练集误差
  • 如果后两组差距过大,过拟合,减少开发集误差

1.10 理解人的表现

如何界定人类水平错误率

拿人类最好团队的误差率作为人类水平错误率。

而如果误差到达了人类的普通水准,那么系统就存在着部署价值。

1.11 超过人的表现

在结构数据面前,机器学习更容易超过人(因为可以访问大量的数据)
但是在自然感知任务中往往没有人类表现的好

还有一些超越人类行为的系统
语音识别
图像识别
医学方面,放射科特定区域的读图表现

1.12 改善你的模型的表现

想要一个监督学习算法达到实用的地步,分两步

  1. 对于训练集表现很好,偏差很低
  2. 在正交化的帮助下,使开发集和测试集误差也很小

总结一下
看问题在哪里

  1. 看看训练错误率和贝叶斯错误率估计值之间的距离,让你知道可避免偏差有多大。
  2. 然后看看你的开发错误率和训练错误率之间的距离,就知道你的方差问题有多大

使用解决的方法策略,想用尽一切办法减少可避免偏差:

  • 使用规模更大的模型,这样算法在训练集上的表现会更好,或者训练更久。
  • 使用更好的优化算法,比如说加入momentum或者RMSprop,或者使用更好的算法,比如Adam。
  • 你还可以试试寻找更好的新神经网络架构,或者说更好的超参数。
  • 可以改变激活函数,改变层数或者隐藏单位数,虽然你这么做可能会让模型规模变大。
  • 者试用其他模型,其他架构,如循环神经网络和卷积神经网络。

解决方差的办法:

  • 收集更多数据,因为收集更多数据去训练可以帮你更好地推广到系统看不到的开发集数据。
  • 尝试正则化,包括L2正则化,dropout正则化或者我们在之前课程中提到的数据增强。
  • 可以试用不同的神经网络架构,超参数搜索,看看能不能帮助你,找到一个更适合你的问题的神经网络架构。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值