机器学习策略
一、为什么是ML策略
当我们训练一个神经网络模型时,可以通过很多方法进行优化,优化的想法如下图所示:
但是如果选择了错误的优化方法,会花费大量的时间,且效果并不显著。因此,应该选用正确的ML策略十分重要。
二、正交化
-
什么是正交化呢?举一个例子
有一台电视机,有几个按钮可以调整画面位置,例如上下平移、左右平移、左右拉伸、旋转等等。
若存在一个按钮,扭动可以同时调整0.1上下平移、0.3左右平移、-1.7*左右平移,那么也许永远都调整不到正常的视频画面。
在这种情况下,正交化指的是设计出多个独立的按钮,每个按钮都只调整一个性质,这样调整电视图像就很容易调整到正常的视频画面。
-
机器学习中的正交化方法是指,在模型算法优化的过程需要调整一些参数,
每次调整只调整其中的一个参数
,从而使模型某一个方面得到改变的调参策略。
【即每次只调整电视机的一个按钮】 -
在机器学习中,可以将模型优化目标分为四个模块:
(1)拟合训练集,训练集代价函数值小
(2)拟合验证集,验证集代价函数值小
(3)拟合测试集,测试集代价函数值小
(4)模型在真实的世界中也有很好的表现
调整这四个模块,我们需要分布单独旋转电视机的四个按钮;如为了满足(1),可以使用更大的神经网络、采用adam优化算法;为了满足(2),可以使用正则化、扩展训练集样本;为了满足(3),可以扩展验证集样本;为了满足(4),可以更换训练集或者选择其他的代价函数。
early stopping不推荐使用,因为它可能会同时影响(1)和(2),也许比较拟合训练集数据,但是在验证集表现会比较差。
三、单一数字评估指标
单实数评估指标可以很快的判断新尝试的手段比以前的手段好还是坏。
例如对于一个算法,Precision和Recall是重要的评判指标,但是两个评估指标很难去判断A和B模型哪个更好;这时候F1 Score就很有用了,它是单一数字评估指标,还能综合考虑Precision和Recall,可以直接判断A模型相对与B模型更好。
四、满足和优化指标
假设你在选择一个分类模型,准确率和运行时间是两个重要的考虑因素:
-
这里有两个指标,可以通过两个指标的综合在一起成为一个单一评估指标,但是综合成一个合理的评估指标比较困难
-
另一种方法:可以将Accuracy当作
优化指标
,即希望准确率能够达到最大;将Running time当作满足指标
,即只要运行时间≤100ms就行。 -
所以可以将一些指标当作优化指标,希望这些指标能够尽可能的达到最优值;剩下的指标当作满足指标,只要达到阈值就可以了。
五、训练、开发、测试集的划分
- dev也叫开发集,有时也称作保留交叉验证集。他的工作是:对训练集评估出来的模型进行评估,通过评估结果对模型进行优化。
- 假设你在训练一个猫狗分类器,在许多国家进行投入使用。
如何划分开发集和测试集呢?一个直接得想法就是按照国家进行划分,如US、UK、Europe当作开发集,其他的当作测试集。但这样效果并不好,因为开发集的数据和测试集的数据并不属于同一分布,即开发集选出的最优模型不一定能够在测试集上有很好的表现。
当我们在开发集上设置了一个实数评估指标,开发人员就会很快的根据这个指标去优化模型;这个指标就像靶心,需要做的是在开发集上将模型移动到靶心上的位置;但dev和test属于不同分布,所以dev和test的靶心会存在偏差。可能发生的情况是,花费了6个月去调整在dev上的靶心,但没有命中test上的靶心。
因此,要保证dev和test要属于同一分布
,我们可以将许多国家的数据集进行打乱,然后随机抽取当作dev和test;这样dev和test都会包含所有国家的数据。
六、开发集和测试集的大小
- 当数据集不多(小于一万),可以将数据样本划分为:【7:3 = 训练集:测试集】或【6:2:2=训练集:验证集:测试集】
- 对于大规模数据,通常设置的比例是:【99:9 = 训练集:测试集】或【98:1:1=训练集:验证集:测试集】;因为数据集很大,百分之1的dev和test就已经够用了。
- 测试集的大小足够去高置信度来评估算法的表现就即可。在实际应用时,可能只会将数据分成train和dev,没有test,但使用不带偏差的测试集来测量系统性能会更加放心;因为测试集可以避免模型在dev上的过拟合。
七、什么时候该改变dev/test和指标
- 在模型训练的过程中需要动态的对评估指标进行调整,即调整靶心。
例如在进行猫图片的识别时,有两个模型A和B;A有3%的错误率,但是很多暴力图片会被识别成猫,所以在使用时会推送很多暴力的图片;B有5%的错误率,错误率高于A,但是不会推送暴力的图片。
这个例子中A在评估指标上表现得更好,但实际上并不是一个很好的算法。指标上会倾向于选择A,但用户和开发者会更倾向于选择B。这种情况下指标错误的指向了A模型,所以需要改变评估指标或者改变开发测试集。
在这里可以在评估指标上进行修改,在函数L前加上一个权重w,当错误的分类了暴力图片时的error数值会被放大:
- ML可以分成两个过程(正交化):
(1)选择如何选择合适的指标去评估分类模型(选择靶心)
(2)向评估指标靠近(向靶心移动)
八、为什么要与人的表现相对比
在机器学习中,模型通常会和人类的表现进行比较。下图的蓝色线条表示人类的表现水平,绿色表示bayes optimal error,即理论上的最佳表现。
在模型开始训练时,经过一段时间就会达到人类的水平;随后性能表现就会缓慢的上升,逐渐的靠近bayes optimal error;bayes optimal error是理论上最优的,永远不会被超越。
为什么超过人类表现水平后,性能上升的就变的缓慢了呢?一个原因是人类水平在很多任务中离bayes optimal error已经不远了;人们非常擅长于分辨图像和听写音频;所以当你超过人类水平后,也许没有太多的空间继续改善了。
在靠近人类水平前,可以使用下图的方法使模型靠近人类表现:
九、可避免偏差
我们需要通过人类的水平去判断训练集和验证集的表现水平。
例如在猫识别分类器中,人的水平可以达到1%,但是在训练集中error是8%,验证集中是10%;这种与人类水平存在差距的情况,也许是模型还不够拟合训练集数据,一般会将焦点放在训练集的bias上,我们需要做的是训练更大的神经网络或者梯度下降的时间久一些。
人的水平可以达到7.5%,在训练集中error是8%,验证集中是10%;这种与人类水平接近的情况,说明我们也许已经在训练集上做的很好了,一般把焦点放在train和dev之间的variance上,让开发集误差接近训练集误差。
【可避免偏差:在到达人类水平前,可以避免的偏差。如通人为分析,多标注数据集来减少错误率】
十、理解人的表现水平
在图片识别、听写音频等领域,可以使用人类水平近似的代替bayes optimal error;因为人类在这方面表现得很好,无限接近于理论上的最高水平了。
在医学图像处理过程中,普通人的识别错误率可以达到3%,普通医生可以达到1%,有经验的医生可以达到0.7%,专家团队可以达到0.5%。那么哪一个才是人类水平呢?
若考虑人类水平用于估计bayes optimal error,那么采用0.5%是比较合理的。即根据实际应用进行选择。
选择什么样的human-level error,有时候会影响bias和variance值的相对变化,从而影响优化方式,是选择采用更大的神经网络去减小训练集的bias,还是使用正则化减小dev和trian之间的variance。
十一、超过人的表现
当训练集的错误率已经低于专家团队的错误率,这时候通过人的直觉来判断算法还能往什么方向优化就很难了。
在一些领域,它们的表现已经超过了人类水平了:
(1)预估用户点击在线广告的概率
(2)产品推荐
(3)物流预测
(4)贷款评估
十二、改善你的模型表现
- 当想让一个监督学习算法有较好的表现,需要完成两件事情:
(1)算法很好的拟合了训练集,即如何降低可避免偏差;
(2)算法很好的推广到验证集和测试集上,即降低方差。
采用正交化的实现,项目两个事情相当于两个独立的按钮。第一个按钮可以进行使用更大的神经网络或者训练更久;第二个按钮可以进行正则化、收集更多训练数据。
总结之前学到的,如果想要提升机器学习系统的性能:
(1)首先观察训练误差和bayes optimal error之间的距离,让我们知道可避免偏差有多大,即知道训练集能够做的有多好。【这一步可以1.使用更复杂的模型;2.使用优化算法;3.采用更好的神经网络框架或更好的超参数】
(2)然后看看dev和train之间的距离,就可以知道方差的问题有多大,即知道应该做多少努力让算法表现能够从训练集推广到开发集。【这一步可以1.使用更多的数据;2.正则化;3.采用更好的神经网络框架或更好的超参数】