吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)

吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)

1 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…

可选择的方法不少,也很复杂、繁琐。盲目选择、尝试不只耗费时间并且可能收效甚微。所以,使用快速、有效的策略来优化机器学习模型是很是必要的。网络

2 Orthogonalization


机器学习中有许多参数、超参数须要调试。经过每次只调试一个参数,保持其它参数不变,而获得的模型某一性能改变是一种最经常使用的调参策略,咱们称之为正交化方法(Orthogonalization)。app

Orthogonalization的核心在于每次调试一个参数只会影响模型的某一个性能。例如老式电视机旋钮,每一个旋钮就对应一个功能,调整旋钮会调整对应的功能,而不会影响其它功能。也就是说彼此旋钮之间是互不影响的,是正交的,这也是Orthogonalization名称的由来。这种方法可以让咱们更快更有效地进行机器学习模型的调试和优化。机器学习

对应到机器学习监督式学习模型中,能够大体分红四个独立的“功能”,每一个“功能”对应一些可调节的惟一的旋钮。四个“功能”以下:ide

  • Fit training set well on cost function
  • Fit dev set well on cost function
  • Fit test set well on cost function
  • Performs well in real world

其中,第一条优化训练集能够经过使用更复杂NN,使用Adam等优化算法来实现;第二条优化验证集能够经过正则化,采用更多训练样原本实现;第三条优化测试集能够经过使用更多的验证集样原本实现;第四条提高实际应用模型能够经过更换验证集,使用新的cost function来实现。归纳来讲,每一种“功能”对应不一样的调节方法。而这些调节方法(旋钮)只会对应一个“功能”,是正交的。性能

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

3 Single Number Evaluation Metric


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

举个例子,好比有A和B两个模型,它们的准确率(Precision)和召回率(Recall)分别以下:
吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)
若是只看Precision的话,B模型更好。若是只看Recall的话,A模型更好。实际应用中,咱们一般使用单值评价指标F1 Score来评价模型的好坏。F1 Score综合了Precision和Recall的大小,计算方法以下:
吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)
而后获得了A和B模型各自的F1 Score:
吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)
从F1 Score来看,A模型比B模型更好一些。经过引入单值评价指标F1 Score,很方便对不一样模型进行比较。优化

除了F1 Score以外,咱们还可使用平均值做为单值评价指标来对模型进行评估。以下图所示,A, B, C, D, E, F六个模型对不一样国家样本的错误率不一样,能够计算其平均性能,而后选择平均错误率最小的那个模型(C模型)。
吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)this

4 Satisficing and Optimizing Metic


有时候,要把全部的性能指标都综合在一块儿,构成单值评价指标是比较困难的。解决办法是,咱们能够把某些性能做为优化指标(Optimizing metic),寻求最优化值;而某些性能做为满意指标(Satisficing metic),只要知足阈值就好了。

举个猫类识别的例子,有A,B,C三个模型,各个模型的Accuracy和Running time以下表中所示:
吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)
Accuracy和Running time这两个性能不太合适综合成单值评价指标。所以,咱们能够将Accuracy做为优化指标(Optimizing metic),将Running time做为满意指标(Satisficing metic)。也就是说,给Running time设定一个阈值,在其知足阈值的状况下,选择Accuracy最大的模型。若是设定Running time必须在100ms之内,那么很明显,模型C不知足阈值条件,首先剔除;模型B相比较模型A而言,Accuracy更高,性能更好。

归纳来讲,性能指标(Optimizing metic)是须要优化的,越优越好;而满意指标(Satisficing metic)只要知足设定的阈值就行了。

5 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上的靶心位置。
吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)

6 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,实现无偏估计。

7 When to Change Dev/Test Sets and Metrics


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

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

原来的cost function:
吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)
更改评价标准后的cost function:
吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)
归纳来讲,机器学习可分为两个过程:

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

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

另一个须要动态改变评价标准的状况是dev/test sets与实际使用的样本分布不一致。好比猫类识别样本图像分辨率差别。
吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)

8 Why Human-level Performance


机器学习模型的表现一般会跟人类水平表现做比较,以下图所示:
吴恩达《构建机器学习项目》精炼笔记(1)-- 机器学习策略(上)
图中,横坐标是训练时间,纵坐标是准确性。机器学习模型通过训练会不断接近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.

9 Avoidable Bias


实际应用中,要看human-level error,training error和dev error的相对值。例如猫类识别的例子中,若是human-level error为1%,training error为8%,dev error为10%。因为training error与human-level error相差7%,dev error与training error只相差2%,因此目标是尽可能在训练过程当中减少training error,即减少误差bias。若是图片很模糊,肉眼也看不太清,human-level error提升到7.5%。这时,因为training error与human-level error只相差0.5%,dev error与training error只相差2%,因此目标是尽可能在训练过程当中减少dev error,即方差variance。这是相对而言的。

对于物体识别这类CV问题,human-level error是很低的,很接近理想状况下的bayes optimal error。所以,上面例子中的1%和7.5%均可以近似当作是两种状况下对应的bayes optimal error。实际应用中,咱们通常会用human-level error表明bayes optimal error。

一般,咱们把training error与human-level error之间的差值称为误差(bias),也称做avoidable bias;把dev error与training error之间的差值称为方差(variance)。根据bias和variance值的相对大小,能够知道算法模型是否发生了欠拟合或者过拟合。

10 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多是比较模糊难以准肯定义的。

11 Surpassing Human-level Performance


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

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

12 Improving Your Model Performance


提升机器学习模型性能主要要解决两个问题:avoidable bias和variance。咱们以前介绍过,training error与human-level error之间的差值反映的是avoidable bias,dev error与training error之间的差值反映的是variance。

解决avoidable bias的经常使用方法包括:

  • Train bigger model
  • Train longer/better optimization algorithms: momentum, RMSprop, Adam
  • NN architecture/hyperparameters search

解决variance的经常使用方法包括:

  • More data
  • Regularization: L2, dropout, data augmentation
  • NN architecture/hyperparameters search
相关文章
相关标签/搜索