吴恩达【深度学习工程师】专项课程包含以下五门课程:
1、神经网络和深度学习;
2、改善深层神经网络:超参数调试、正则化以及优化;
3、结构化机器学习项目;
4、卷积神经网络;
5、序列模型。
今天介绍《结构化机器学习项目》系列第一讲:机器学习策略(1)。
主要内容:
1、使用ML策略
2、评估指标
3、Train/Dev/Test数据集
4、改变评价标准
5、人类水平表现
1、使用ML策略
当我们一开始得到深度神经网络模型时,我们可以从以下方面来对它进行优化:
-
收集更多的样本数据
-
收集更加多样化的训练集
-
使用梯度下降训练更长的时间
-
使用Adam算法替代梯度下降算法
-
尝试更大更复杂的网络
-
尝试更小的网络
-
使用dropout技术
-
添加L2正则化
-
网络架构:激活函数,隐层神经元…
由于可供选择的方法很多,使用一套快速且有效的策略来优化机器学习模型是非常重要的。
机器学习中有许多参数、超参数需要调试。通过每次只调试一个参数,保持其它参数不变,而得到的模型某一性能改变是一种最常用的调参策略,我们称之为正交化方法(Orthogonalization)。正交化在于每次调试一个参数只会影响模型的某一个性能。
例如老式电视机旋钮,每个旋钮就对应一个功能,调整旋钮会调整对应的功能,而不会影响其它功能。也就是说彼此旋钮之间是互不影响的,是正交的。这种方法能够让我们更快更有效地进行机器学习模型的调试和优化。
对应到机器学习监督式学习模型中,可以大致分成四个独立的“功能”,每个“功能”对应一些可调节的唯一的旋钮。四个“功能”如下:
-
Fit training set well on cost function:优化训练集可以通过使用更复杂NN,使用Adam等优化算法来实现;
-
Fit dev set well on cost function:优化验证集可以通过正则化,采用更多训练样本来实现;
-
Fit test set well on cost function:优化测试集可以通过使用更多的验证集样本来实现;
-
Performs well in real world:提升实际应用模型可以通过更换验证集,使用新的cost function来实现。
总的来说,每一种“功能”对应不同的调节方法。而这些调节方法(旋钮)只会对应一个“功能”,是正交的。
early stopping在模型功能调试中并不推荐使用。因为early stopping在提升验证集性能的同时降低了训练集的性能。即同时影响两个“功能”,不是正交的。
2、评估指标
构建、优化机器学习模型时,单值评价指标是非常必要的。
例如:有A、B两个模型,它们的准确率(Precision)和召回率(Recall)分别如下:
如果只看准确率的话,B模型更好。如果只看召回率的话,A模型更好。
实际应用中,我们通常使用单值评价指标F1 Score来评价模型的好坏。
F1 Score综合了准确率 P 和召回率 R 的大小,计算方法如下:
然后得到了A和B模型各自的F1 Score:
从F1 Score来看,A模型比B模型更好一些。
除了F1 Score之外,我们还可以使用平均值作为单值评价指标来对模型进行评估。
例如:A, B, C, D, E, F六个模型对不同国家样本的错误率不同,计算其平均性能,然后选择平均错误率最小的那个模型(即C模型)为最优模型。
有时候,要把所有的性能指标都综合在一起,构成单值评价指标是比较困难的。
我们可以把某些指标作为优化指标(Optimizing metic),寻求最优化值;而某些指标作为满意指标(Satisficing metic),只要满足阈值就行了。
例如:在猫类识别的例子中,有A、B、C三个模型,各个模型的准确率和运行时间如下表中所示:
我们将准确率作为优化指标,将运行时间作为满意指标。
给运行时间设定一个阈值,在其满足阈值的情况下,选择准确率最大的模型。例如:运行时间必须<100 ms,准确率要尽可能的高,因此满足条件的 B 模型就是最优模型。
总的来说,性能指标是需要优化的,越优越好;而满意指标只要满足设定的阈值就可以了。
3、Train/dev/test 数据集
应该尽量保证Train/dev/test 数据集同分布。
当样本数量很小(<10000)的时候,通常将Train、dev、test sets的比例设为60%、20%、20%或70%、0%、30%;
当样本数量很大(>1000000)的时候,通常将相应的比例设为98%、1%、1%或者99%、0%、1%。
对于dev 数据集数量的设置,应该遵循的准则是通过dev sets能够检测不同算法或模型的区别,以便选择出更好的模型。
对于test 数据集数量的设置,应该遵循的准则是通过test sets能够反映出模型在实际中的表现。
4、改变评价标准
算法模型的评价标准有时候需要根据实际情况进行动态调整,目的是让算法模型在实际应用中有更好的效果。
举个猫类识别的例子。初始的评价标准是错误率,算法A错误率为3%,算法B错误率为5%。显然,A更好一些。但是,实际使用时发现算法A会通过一些色情图片,但是B没有出现这种情况。从用户的角度来说,他们可能更倾向选择B模型,虽然B的错误率高一些。这时候,我们就需要改变之前单纯只是使用错误率作为评价标准,而考虑新的情况进行改变。例如增加色情图片的权重,增加其代价。
原来的cost function:
更改评价标准后的cost function:
概括来说,机器学习可分为两个过程:
-
定义一个标准来评估分类器
-
怎样优化这个标准
5、人类水平表现
机器学习模型的表现通常会跟人类水平表现作比较,如下:
图中,横坐标是训练时间,纵坐标是准确性。
机器学习模型经过训练会不断接近人类水平甚至超过它。但是,超过人类水平之后,准确性会上升得比较缓慢,最终不断接近理想的最优情况,我们称之为bayes optimal error。理论上任何模型都不能超过它,bayes optimal error代表了最佳表现。
实际应用中,要看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。
通常,我们把training error与human-level error之间的差值称为bias,也称作avoidable bias;把dev error与training error之间的差值称为variance。根据bias和variance值的相对大小,可以知道算法模型是否发生了欠拟合或者过拟合。
提高机器学习模型性能主要要解决两个问题:avoidable bias和variance。
解决avoidable bias的常用方法包括:
-
更复杂的模型
-
使用更好的优化器训练更长时间:momentum, RMSprop, Adam
-
更改NN架构/超参数查找
解决variance的常用方法包括:
-
更多的样本数据
-
正则化方法:L2, dropout, data augmentation
-
更改NN架构/超参数查找