Deeplearning.ai吴恩达笔记之构建机器学习项目1

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35564813/article/details/86477219

Introduction to ML Strategy

Why ML Strategy

当我们最初得到一个深度神经网络模型时,我们可能希望从很多方面来对它进行优化,例如:

  • Collect more data

  • Collect more diverse training set

  • Train algorithm longer with gradient descent

  • Try Adam instead of gradient descent

  • Try bigger network

  • Try smaller network

  • Try dropout

  • Add L2 regularization

  • Network architecture: Activation functions, #hidden units…

可选择的方法很多,也很复杂、繁琐。盲目选择、尝试不仅耗费时间而且可能收效甚微。因此,使用快速、有效的策略来优化机器学习模型是非常必要的。

Orthogonalization

表示在机器学习模型建立的整个流程中,我们需要根据不同部分反映的问题,去做相应的调整,从而更加容易地判断出是在哪一个部分出现了问题,并做相应的解决措施。

正交化或正交性是一种系统设计属性,其确保修改算法的指令或部分不会对系统的其他部分产生或传播副作用。 相互独立地验证使得算法变得更简单,减少了测试和开发的时间。

当在监督学习模型中,以下的4个假设需要真实且是相互正交的:

  • 系统在训练集上表现的好
    • 否则,使用更大的神经网络、更好的优化算法
  • 系统在开发集上表现的好
    • 否则,使用正则化、更大的训练集
  • 系统在测试集上表现的好
    • 否则,使用更大的开发集
  • 在真实的系统环境中表现的好
    • 否则,修改开发测试集、修改代价函数

顺便提一下,early stopping在模型功能调试中并不推荐使用。因为early stopping在提升验证集性能的同时降低了训练集的性能。也就是说early stopping同时影响两个“功能”,不具有独立性、正交性。

Setting up yout goal

Single number evaluation metric

构建、优化机器学习模型时,单值评价指标非常必要。有了量化的单值评价指标后,我们就能根据这一指标比较不同超参数对应的模型的优劣,从而选择最优的那个模型。

举个例子,比如有A和B两个模型,它们的准确率(Precision)和召回率(Recall)分别如下:

在这里插入图片描述

由上表可以看出,以Precision为指标,则分类器A的分类效果好;以Recall为指标,则分类器B的分类效果好。所以在有两个及以上判定指标的时候,我们很难决定出A好还是B好。

这里以Precision和Recall为基础,构成一个综合指标F1 Score,那么我们利用F1 Score便可以更容易的评判出分类器A的效果更好。

指标介绍

在二分类问题中,通过预测我们得到下面的真实值y和预测值ŷ的表:

在这里插入图片描述

  • Precision(查准率):
    P r e c i s i o n = T r u e   p o s i t i v e N u m b e r   o f   p r e d i c t e d   p o s i t i v e × 100 % = T r u e   p o s i t i v e T r u e   p o s i t i v e + F a l s e   p o s i t i v e Precision=\frac{True\ positive}{Number\ of\ predicted\ positive}×100\%=\frac{True\ positive}{True\ positive+False\ positive}

假设在是否为猫的分类问题中,查准率代表:所有模型预测为猫的图片中,确实为猫的概率。

  • Recall(查全率):
    R e c a l l = T r u e   p o s i t i v e N u m b e r   o f   a c t u a l l y   p o s i t i v e × 100 % = T r u e   p o s i t i v e T r u e   p o s i t i v e + F a l s e   n e g a t i v e Recall=\frac{True\ positive}{Number\ of\ actually\ positive}×100\%=\frac{True\ positive}{True\ positive+False\ negative}

假设在是否为猫的分类问题中,查全率代表:真实为猫的图片中,预测正确的概率。

  • F1 Score:
    F 1 S o c r e = 2 1 p + 1 r = 2   p   r p + r F1−Socre=\frac{2}{\frac{1}{p}+\frac{1}{r}}=\frac{2\ *p\ *r}{p+r}
    相当与查准率和查全率的一个特别形式的平均指标。

然后得到了A和B模型各自的F1 Score:

在这里插入图片描述

从F1 Score来看,A模型比B模型更好一些。通过引入单值评价指标F1 Score,很方便对不同模型进行比较。

除了F1 Score之外,我们还可以使用平均值作为单值评价指标来对模型进行评估。如下图所示,A, B, C, D, E, F六个模型对不同国家样本的错误率不同,可以计算其平均性能,然后选择平均错误率最小的那个模型(C模型)。

在这里插入图片描述

Satisficing and Optimizing metric

有时候,要把所有的性能指标都综合在一起,构成单值评价指标是比较困难的。解决办法是,我们可以把某些性能作为优化指标(Optimizing metic),寻求最优化值;而某些性能作为满意指标(Satisficing metic),只要满足阈值就行了。

举个猫类识别的例子,有A,B,C三个模型,各个模型的Accuracy和Running time如下表中所示:

在这里插入图片描述

Accuracy和Running time这两个性能不太合适综合成单值评价指标。因此,我们可以将Accuracy作为优化指标(Optimizing metic),将Running time作为满意指标(Satisficing metic)。也就是说,给Running time设定一个阈值,在其满足阈值的情况下,选择Accuracy最大的模型。如果设定Running time必须在100ms以内,那么很明显,模型C不满足阈值条件,首先剔除;模型B相比较模型A而言,Accuracy更高,性能更好。

概括来说,性能指标(Optimizing metic)是需要优化的,越优越好;而满意指标(Satisficing metic)只要满足设定的阈值就好了。

Train/dev/test distributions

Train/dev/test sets如何设置对机器学习的模型训练非常重要,合理设置能够大大提高模型训练效率和模型质量。

原则上应该尽量保证dev sets和test sets来源于同一分布且都反映了实际样本的情况。如果dev sets和test sets不来自同一分布,那么我们从dev sets上选择的“最佳”模型往往不能够在test sets上表现得很好。这就好比我们在dev sets上找到最接近一个靶的靶心的箭,但是我们test sets提供的靶心却远远偏离dev sets上的靶心,结果这支肯定无法射中test sets上的靶心位置。

Size of the dev and test sets

在之前的课程中我们已经介绍过,当样本数量不多(小于一万)的时候,通常将Train/dev/test sets的比例设为60%/20%/20%,在没有dev sets的情况下,Train/test sets的比例设为70%/30%。当样本数量很大(百万级别)的时候,通常将相应的比例设为98%/1%/1%或者99%/1%。

对于dev sets数量的设置,应该遵循的准则是通过dev sets能够检测不同算法或模型的区别,以便选择出更好的模型。

对于test sets数量的设置,应该遵循的准则是通过test sets能够反映出模型在实际中的表现。

实际应用中,可能只有train/dev sets,而没有test sets。这种情况也是允许的,只要算法模型没有对dev sets过拟合。但是,条件允许的话,最好是有test sets,实现无偏估计。

When to change dev/test sets and metrics

算法模型的评价标准有时候需要根据实际情况进行动态调整,目的是让算法模型在实际应用中有更好的效果。

举个猫类识别的例子。初始的评价标准是错误率,算法A错误率为3%,算法B错误率为5%。显然,A更好一些。但是,实际使用时发现算法A会通过一些色情图片,但是B没有出现这种情况。从用户的角度来说,他们可能更倾向选择B模型,虽然B的错误率高一些。这时候,我们就需要改变之前单纯只是使用错误率作为评价标准,而考虑新的情况进行改变。例如增加色情图片的权重,增加其代价。

原来的cost function:
J = 1 m i = 1 m L ( y ^ ( i ) , y ( i ) ) J=\frac{1}{m}\sum_{i=1}^mL(ŷ^{(i)},y^{(i)})
更改评价标准后的cost function:
J = 1 w ( i ) i = 1 m w ( i ) L ( y ^ ( i ) , y ( i ) ) J=\frac{1}{w^{(i)}}\sum_{i=1}^mw^{(i)}L(ŷ^{(i)},y^{(i)})
w ( i ) = { 1 , x ( i )   i s   n o n p o r n 100 , x ( i )   i s   p o r n w^{(i)}=\begin{cases} ​ 1, {x^{(i)}\ is\ non−porn}\\ ​ 100,{x^{(i)}\ is\ porn} ​\end{cases}
概括来说,机器学习可分为两个过程:

  • Define a metric to evaluate classifiers
  • How to do well on this metric

也就是说,第一步是找靶心,第二步是通过训练,射中靶心。但是在训练的过程中可能会根据实际情况改变算法模型的评价标准,进行动态调整。

在这里插入图片描述

Comparing to human-level performance

Why human-level performance?

机器学习模型的表现通常会跟人类水平表现作比较,如下图所示:

在这里插入图片描述

图中,横坐标是训练时间,纵坐标是准确性。机器学习模型经过训练会不断接近human-level performance甚至超过它。但是,超过human-level performance之后,准确性会上升得比较缓慢,最终不断接近理想的最优情况,我们称之为bayes optimal error。理论上任何模型都不能超过它,bayes optimal error代表了最佳表现。

实际上,human-level performance在某些方面有不俗的表现。例如图像识别、语音识别等领域,人类是很擅长的。所以,让机器学习模型性能不断接近human-level performance非常必要也做出很多努力:

  • Get labeled data from humans.
  • Gain insight from manual error analysis: Why did a person get this right?
  • Better analysis of bias/variance.

Avoidable bias

在这里插入图片描述

  • 对于图中左半部分,人类误差为1%,可避免误差为7%,训练误差达8%,方差为2%,那么应该着手减少偏差
  • 对于图中右半部分,人类误差为7.5%,可避免误差为0.5%,训练误差达8%,方差为2%,那么应该着手减少方差

Understanding human-level performance

我们说过human-level performance能够代表bayes optimal error。但是,human-level performance如何定义呢?举个医学图像识别的例子,不同人群的error有所不同:

  • Typical human : 3% error
  • Typical doctor : 1% error
  • Experienced doctor : 0.7% error
  • Team of experienced doctors : 0.5% error

不同人群他们的错误率不同。一般来说,我们将表现最好的那一组,即Team of experienced doctors作为human-level performance。那么,这个例子中,human-level error就为0.5%。但是实际应用中,不同人可能选择的human-level performance基准是不同的,这会带来一些影响。

假如该模型training error为0.7%,dev error为0.8%。如果选择Team of experienced doctors,即human-level error为0.5%,则bias比variance更加突出。如果选择Experienced doctor,即human-level error为0.7%,则variance更加突出。也就是说,选择什么样的human-level error,有时候会影响bias和variance值的相对变化。当然这种情况一般只会在模型表现很好,接近bayes optimal error的时候出现。越接近bayes optimal error,模型越难继续优化,因为这时候的human-level performance可能是比较模糊难以准确定义的。

Surpassing human-level performance

对于自然感知类问题,例如视觉、听觉等,机器学习的表现不及人类。但是在很多其它方面,机器学习模型的表现已经超过人类了,包括:

  • Online advertising
  • Product recommendations
  • Logistics(predicting transit time)
  • Loan approvals

实际上,机器学习模型超过human-level performance是比较困难的。但是只要提供足够多的样本数据,训练复杂的神经网络,模型预测准确性会大大提高,很有可能接近甚至超过human-level performance。值得一提的是当算法模型的表现超过human-level performance时,很难再通过人的直觉来解决如何继续提高算法模型性能的问题。

Improving your model performance

监督学习基本假设:

  • 模型在训练集上有很好的表现;
  • 模型推广到开发和测试集也会给你也有很好的表现。

关于减少偏差和方差的方法如下:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_35564813/article/details/86477219