7、机器学习策略(一)

1 正交化(Orthogonalization)

1.1 什么是正交化

区别与数学中的正交化是让两向量垂直,在机器学习中,正交化是指使两个功能调节之间独立,互不影响。
下面的两个例子可以让我们对正交有一个形象的理解:

(a)调节电视机
电视遥控器上,我们一般都会用到频道切换、声音加减、亮度调节这些常用的功能按钮,它们都是相互正交的,即各个按钮的功能独立,当调节亮度的时候播放音量是不受影响的,当调节声音的时候频道是不会切换的。若这些功能按钮不是正交的,那么改变其中一个属性的时候其他的属性也会受到影响,从而导致用户很难调节到想要的效果。

(b)驾驶汽车
汽车在驾驶过程中可以通过方向盘来调节前进方向,通过操作杆来调节车速。只有这两个功能部件正交才能保证汽车的正常驾驶,否则,试想一下加挡时行驶方向也会改变,这可能会带来安全事故。

1.2 机器学习中的正交化

在机器学习中,我们需要以下的指标来评定一个学习算法的好坏。

  • 在训练集上的表现。
  • 在验证集上的表现。
  • 在测试集上的表现。
  • 在真实应用场景下的表现。

为了提升这些指标,我们使用一些类似于调节电视机那个例子中的“按钮”,比如正则化、扩充样本集、增加网络深度等。我们在使用正则化提升算法在验证集上的表现时,我们希望算法在训练集上的表现不会因前者而下降,或者说希望不要下降得超过了可接受范围。换句话说,在调节其中一个指标的时候,我们不希望其他指标会因此发生变化(降低),这对我们调参是极为不利的。所以我们需要将正则化、扩充样本集、增加网络深度这些“按钮”正交化,将它们分解成独立的步骤,以此来消除相互影响。

那么如何达到正交化的效果呢?如图,当算法出现问题时,从上到下用对应的决绝方法(右边)依次调节指标(左边),这样就可以排除这些方法之间的相互影响。即:
在这里插入图片描述

2 量化评估指标

2.1 单一的量化评估指标

设置一个单一的量化指标可以让我们评估一个算法的性能好坏,比如正确率 Accuracy。但有时候会同时出现多个指标供我们选择。
在这里插入图片描述
如图,假如我们现在有 A 和 B 两个分类器,并且给出了这两个分类器的查准率 Precision查全率 Recall

查准率:在算法的分类结果为正例的样本中,实际结果也是正例的样本所占的比例。
查全率:在实际结果是正例的样本中,算法的分类结果为正例的样本所占的比例。

我们常常要在这两者之间做权衡,需要同时关注这两个指标。但问题A的召回率比B高,但是查准率却比B低,就不能确定究竟哪个分类器更好了。

与其使用两个数字精准率和召回率来选择分类器,不如找一个同时兼顾了精准率和召回率的新指标。在机器学习领域,标准的方法是使用 F1分数: F 1 _ s c o r e = 2 ∗ P R P + R F1\_score = 2 * \frac{PR}{P+R} F1_score=2P+RPR 在数学里这个方程被称为查准率P和召回率R的调和平均数。通过对 F1 的比较,就可以很快的在这里选择分类器A。

现在来看另一种情况,假设现在有 6 种猫的二分类算法,并且分别给出了这 6 种算法在不同地区的错误率,这些算法在某一个地方表现良好,但在另一个地方表现可能很糟糕。该如何选择出一个最好的算法呢?
在这里插入图片描述
除了追踪这些算法在 4 个不同地区的表现,还应该同时关注它们的平均值。平均表现是一个合理的单一量化评估指标,通过计算平均值,可以很快的看出似乎算法C的错误率最低。

2.2 设置优化指标和满意度指标

将所有我们关心的方方面面组合成一个单一的指标并不总是一件容易的事。因此,在某些情况下建立满足指标(satisficing matrics)优化指标(optimizing matrics) 是很有用的。比如对于猫的二分类算法,我们需要关注分类准确率(accuracy)或者其他的精确度度量,比如 F1分数(F1 score)。但是假设除了准确率之外你还关心运行时间,也就是对一个图像分类需要付出多少时间代价。
在这里插入图片描述
当然可以将准确率和运行时间组合成一个整体评价指标,比如: A c c u r a c y − 0.5 ∗ R u n n i n g _ t i m e Accuracy-0.5*Running\_time Accuracy0.5Running_time,但是将准确率和运行时间用这样的公式整合,就像二者的线性加权和(linear weighted sum),这看起来有些刻意。

很多时候我们可能想要选择出一个分类器,它在确保运行时间的前提下提供最大准确率,比如说它甄别图像所花费的时间必须小于100毫秒。在这个例子中准确率是优化指标,因为我们想要最大化准确率,我们希望准确率尽可能的高。运行时间是满足指标,意味着它必须足够好,必须小于100毫秒,若某个分类器一旦超出100毫秒则不予考虑,至少不大考虑。所以用这种方式对准确率和运行时间进行权衡相当合理。有可能的情况是只要运行时间小于100毫秒,而用户并不在意它是100毫秒还是50毫秒或更快。

通过定义优化指标和满足指标 你就有了挑选"最优"分类器的明确方向。一般的说,如果有N个关心的指标,有时候选择其中的一个加以优化是个合理的策略。想要它的表现尽可能的好,那么剩下的N-1个就是满足指标,意味着他们只要达到某个阈值就可以了。比如说运行时间比100毫秒快之类的,一旦他们达到了阈值,你就不再费心优化他们了。但是必须保证它们达到了阈值。


3 设置数据集

设置训练集/验证集/测试集的方法, 将会对你或者你的团队在 构建机器学习应用的进展 中产生巨大的影响。 我们在训练集上训练不同的模型, 然后使用验证集来评估不同的算法并最终选择其中一个,并且保持创新,继续提高模型在验证集上的性能,直到最后会在测试集上评估这个算法。

需要注意的是,应该确保验证集和测试集来自相同的分布。否则,辛辛苦苦在验证集上做的努力并不能在测试集上取得良好的表现。比如现在训练一个人脸检测程序,假如验证集的样本全部来自非洲,当经过长时间的训练与调节,程序在验证集上表现得相当棒,但如果测试集的中的人脸主要来自欧洲时,程序在测试集上的表现肯定与在验证集上的表现相差很多。试想这样一款产品拿到欧洲去落地应用时,也会产生很大的误差。

所以这里有一条建议是,我们收集的验证集和测试集要能够反映出算法使用的场景以及你认为重要的数据。特别地,这里的开发和测试集应该来自相同的分布。为了使验证集和测试集的分布相同,有一个常用的办法是,把所有数据随机打乱然后分为开发和测试集,这样开发和测试集就来自相同的分布了。


4 什么时候改变验证集/测试集、评价指标?

我们已经学习了如何设置验证集和评估指标,这就好比确定我们要瞄准的靶子。可有时候,项目进行到一半,我们可能会发现靶子放错了位置。 这时候,就应该移动你的靶子。

举个例子,假设你的公司委托你构建一个猫分类器用于寻找猫的图像并展现给爱猫的用户,你决定使用分类误差作为评估指标。算法 A 和算法 B 分别有 3% 和 5% 的误差,看起来算法A表现得更好,可是当你实际测试和检查这些算法时,发现算法A由于某些原因会将很多色情图片也分类为猫并展现给没有准备的用户,不论是对你的公司还是客户来说,这都是无法容忍的。相比之下算法B有5%的误差,虽然能得到的猫的图片较少,但是不会有色情图片。

无论是从你的公司的角度,还是从用户的角度来看,算法B实际上是一个更好的算法。但在这个例子中,评估指标和开发集却都倾向于选择算法 A,因为根据评估指标,算法A的误差更低 效果更好。在这种情况下,当你的评估指标无法正确地对算法的优劣进行判定时,你就应该修改评估指标,可能也要修改开发集或测试集。

在这个例子中,所使用的分类误差指标,可以写为如下的形式:
在这里插入图片描述
其中,m_dev是开发集中的样例数量,这个评价指标的问题在于,它对色情图片和非色情图片一视同仁。改良这个评估指标的一种方法是,在误差指标中加入一个权重项,称为 W ( i ) W^{(i)} W(i),当 X ( i ) X^{(i)} X(i) 不是色情图片时,令 W ( i ) = 1 W^{(i)}=1 W(i)=1,当 X ( i ) X^{(i)} X(i) 是色情图片时,令 W ( i ) = 10 W^{(i)}=10 W(i)=10 或者更大,比如100。
在这里插入图片描述
这样,你对色情图片的样例赋予了更大的权重,当算法错误地将色情图像分类为猫时,将产生更大的误差值。

实际上,要实现这个权重 W ( i ) W^{(i)} W(i) 的话需要你检查一遍开发集和测试集,将其中的色情图片标记出来,这样才能实现这个权重函数。 如果你对原有的误差指标不满意,那就不要将就着使用这个你不满意的指标,而是定义一个新的指标使其能够更好地反应你的偏好,以符合你对更好的算法的定义。

另外,假设当你在具有非常高质量图片的开发集和测试集上进行评估,且得到了一个好的结果,但却无法正确预测你的应用的实际表现情况,因为实际中大多都是低质量的图片。那么就应该修改你的开发集和测试集了。**也就是说,当验证集和测试集无法反映实际应用场景,此时我们就需要更改验证集/测试集,使其更加接近与实际情况。**在各个那个案例中,为了避免将色情图片识别为猫,或许还可以向数据集中添加一些色情图片作为负样本,使学习算法认识到,类似于这样的图片并不是一张猫。


5 机器学习和人类表现的对比

5.1 人类表现和贝叶斯误差

随着深度学习的发展,机器学习算法的性能迅速提高,使它应用在很多新领域算法和人相比也更有竞争力,其次,在某些领域 用机器学习系统解决问题的效率比用人工的效率要高。因此,很多人热衷于比较机器学习和人类表现孰优孰劣。
在这里插入图片描述
很多的机器学习任务是花大量时间解决一个问题,可能是一些团队,几个月或甚至几年要解决的问题。用横轴代表时间,在机器学习算法误差接近人类的表现之前,它的进展相对较快。过一段时间该算法就会优于人类的表现,然后它的误差优化的速度就减慢了。也许它不断的优化,超越人类级别后它仍然可以得到更好的效果。但是效果的增长速度会越来越慢,理想状态是能达到理论最佳水平,即贝叶斯误差

贝叶斯误差:里轮上最小的误差值

随着时间推移,当你继续训练算法时,也许是用越来越大的网络模型和更多更大的数据,机器学习算法的实际误差会逼近但不会低于贝叶斯误差。贝叶斯误差可能是一个很小的数,但不可能达到 0。例如对于语音识别,一些音频太嘈杂从而无法判断它在讲什么,所以理论准确度可能不是 100%,理论上的最小误差也不会达到 0。

为什么当机器学习算法在超越人类的表现后进展往往放慢?原因之一,人类的表现在许多任务中都离贝叶斯最优误差不远,人类非常擅长看着图像去分辨是否有一只猫,或收听音频并写出字幕。因此,可能算法超越人类的表现之后并没有那么大的改善空间。第二个原因,只要你的表现还不如人类水平,那么实际上你可以用某些工具来提高。而当你超越了人类的水平后,就很难再有工具来提高了。

5.2 与人类表现做对比以找到改进目标

从定义上说,人类误差必然是要大于贝叶斯误差的,但是在某些方面,人类可以做到与贝叶斯误差相比差距不大。比如人类擅长自然感知任务,如图像识别,图像分类,语音识别等。在处理这些任务时,人类的误差是很小很小的。所以对于在人类很擅长的任务,可以把人类的误差看作是贝叶斯误差。但是对于人类不太擅长的领域,比如预测温度,判断堵车时间等,人类在处理这些问题时会存在较大的误差,这时贝叶斯误差是低于人类误差的。

在下例子中,可以把人的水平误差看作是贝叶斯误差,因为人很擅长识别图像。
在这里插入图片描述
方案 A:
算法在训练集上的误差与人类误差之间存在 7% 的差距,而训练误差和验证集误差的差异只有 2%,这意味着该算法在训练集上是欠拟合的。为了解决这个问题,我们应该使用减少偏差的策略,例如训练一个更大的神经网络或训练更长的时间。

方案 B:
算法在训练集上拟合得很好,因为与人的误差仅有 0.5% 的差异。但是训练误差和验证集误差的差异是2%,很明显这是大于 0.5% 的,这说明可能出现了过拟合现象。所以我们这里的首要任务应该是减少方差,因为为了解决这个问题,我们可以加入正则化或收集一个更大的训练集。

总而言之,如果能够理解人类的误差,就能对贝叶斯误差进行估计。我们在提升机器学习算法性能时,不能一昧的着眼于训练集误差或者验证集误差本身,而是应该与贝叶斯误差进行对比。这样才能判断出我们到底应该采取减少偏差,还是减少方差的策略来提高模型的性能。即:

当人类的误差可以代替贝叶斯误差时:

  • 如果人类误差与训练误差之间的差距大于训练误差与验证集误差之间的差距时。重点应该减少偏差。
  • 如果训练误差与验证集误差之间的差距大于人类误差与训练误差之间的差距时。重点应该减少方差。

5.3 机器学习超过人类表现后算法提升较慢

当性能接近或超过人类水平时,提升机器学习算法性能的速度将会越来越慢。我们通过一个例子来看看为什么会这样。
在这里插入图片描述
方案 A:
贝叶斯误差可认为是 0.5%,则训练误差比贝叶斯误差大 0.1%,训练集误差与验证集误差的差距为 0.2%。因此可以通过减少方差来提升算法性能。

方案 B:
你的训练误差为 0.3%,是不是意味着有 0.2% 的过拟合?还是说贝叶斯误差实际上是 0.1% 或 0.2%、0.3% ?基于这个例子给出的信息,实际上你并没有足够的信息来判断应该专注于减少算法的偏差还是方差。所以,你取得进展的效率就降低了。此外,如果你的误差已经比人类团队误差还小,那么你就更难以依靠直觉来判断还能从哪些方面来优化算法的性能了。

这个例子告诉我们,在人类所擅长的领域,如果机器学习算法的性能已经超过了人类,那么对这个机器学习算法进行优化的方法和方向就变得不明确了。但这并不意味机器学习算法已无法取得任何进展,只是难度大了很多。

值得高兴的是,机器学习在一些方面是显著超过人类水平的,尤其对于结构化数据:
a. 在线广告
b. 产品建议
c. 物流(预测运输时间)
d. 贷款批准
由于计算机可以检索海量的数据,由此它比人类更擅长挖掘数据中的统计规律,所以在处理结构化数据方面超过人类,也就不足为奇了。

5.4 小结

在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值