zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

日拱一卒,《机器学习实战》,机器学习不是万能的,会遇到哪些挑战?

机器学习 实战 哪些 挑战 遇到 不是 万能
2023-06-13 09:11:29 时间

作者 | 梁唐

出品 | 公众号:Coder梁(ID:Coder_LT)

大家好,日拱一卒,我是梁唐。

我们今天继续来学习《机器学习实战》,今天这篇文章是第一个章节的最后一篇,内容关于当前机器学习在使用过程当中主要遇到的挑战和困难。

一方面了解这些困难可以帮助大家对于这个领域有更深层的了解,另外一方面可以一窥从业者的工作内容以及日常挑战。

训练数据不足

2001年,有微软的研究院做过研究,在相同的问题下,只要训练数据足够多,不同的模型也能得到相似的效果。虽然如今时过境迁,用到的技术和模型设计的方法都大相径庭,但是这一结论依然有参考价值。

如果是个人的机器学习爱好者,经常遇见的问题往往和数据相关,尤其是数据的数量相关。

和人类不同,只需要很少的数据就可以有很好的学习效果。据说有科学家做过实验,人类只需要一张照片,就可以在判断动物物种的问题上取得90%以上的准确率。

但对于机器学习的模型而言,显然不可能有这样的学习能力。算法模型在训练拟合现实中的问题时,需要大量的训练数据,越复杂的问题需要的数据量越大。目前大公司的一些搜索、广告、推荐系统的模型训练往往需要用到上亿条甚至数十亿条训练样本。

不过对于搜索、广告、推荐这样的场景而言,数据量不是主要问题,因为这些场景采集的时候就可以带上label。而其他的场景下,数据是一个很大的问题。

比如图像识别、语句识别、机器翻译、风控、鉴黄等等问题下,都没办法天然获得label,需要依赖人工标注。一旦依赖人工标注,就意味着数据采集的成本巨大。

所以目前大量依赖人工标注数据的领域往往各大公司会采取众包的策略,所谓的众包可以理解成外包。把数据采集封装成一个任务分发给有空闲愿意做兼职的人,这些人完成数据采集任务可以获得一定的佣金。这样可以大大压缩数据采集的成本,不过这种做法得到的数据质量很难控制,尤其是如果涉及主观的话,更加良莠不齐。

数据偏差

无论是通过什么样的方法获得的数据,本身都是有偏差的。有的时候这些偏差会对模型产生非常大的影响,甚至导致很坏的结果。

我们可以举一个很简单的例子,如果我们单纯把人群分成喝咖啡的和不喝咖啡的调查这两拨人的平均寿命,会发现喝咖啡的人群平均寿命更高。那么我们是否可以得出结论,喝咖啡有益健康呢?

答案是不能,因为是否喝咖啡带有偏差。相对来说喝咖啡的人群经济状况要比不喝咖啡的更好,经济状况对于平均寿命是有显著影响的。除了会影响人的生活习惯还会影响人的医疗状况等。如果我们消除掉经济状况的影响,统计相同经济状况下喝咖啡和不喝咖啡的人群平均寿命,就会发现这两拨人的平均寿命几乎没有差别,这就是统计和采样带来的偏差。

这种偏差在机器学习应用领域当中几乎无处不在,凡是涉及到采样、统计的结论,都会涉及到偏差,需要我们处处小心。

再举一个实际一点的例子,比如在电商场景中的点击率模型,我们在训练的时候把用户看过没有点击的商品标为0,用户看过并点击的商品标为1。

这种做法非常普遍,实际上绝大多数电商平台都是这样做的。但是如果我们仔细分析会发现很多问题,比如,我们能保证每一个用户没有点的商品用户都看到了吗?即使用户都看到了,先看到和后看到的商品对应的点击率一样吗?

再比如,用户首次打开app看到商品和用户已经在平台上已经逛了一段时间之后再看到商品,对应的点击率一样吗?

稍微一琢磨就能发现这里面存在大量的偏差,只不过并不是所有的偏差都影响巨大,其中大部分无伤大雅。我们在设计模型的时候需要考虑到这点,尤其是对于其中影响巨大的偏差,要想办法做纠偏,否则一定会影响模型的效果。

数据质量差

在机器学习的应用领域有这么一句话,叫做数据质量决定了最终效果的上限,模型只能逼近上限,而不能越过上限。

数据质量差是一个结果,导致这个结果的原因实际上有很多,我们一个一个来说。

噪声大

首先是噪声的问题,数据当中掺杂了很多脏数据,或者是不够准确的数据。

比如大量特征缺失、标记错误、采样本身存在偏差等。

特征质量差

不合理的原因也有很多,常见的有这么几种:

  • 覆盖度低

大量的样本特征值为空,对于模型来说搜集不到足够的样本用来学习它和label之间的关联。

  • 分布不合理

还有一些特征本身覆盖度很高,和label也相关,但是分布不合理。

比如某个特征值有1到5,五种取值。但80%的样本的取值都是1,剩余20%分布在剩下的四个取值当中。这样的分布也同样很不利于模型的学习,因为对于模型来说,它看到的80%的样本都一样,也会影响效果。

再比如取值的范围非常大,从0到1千万甚至数十亿。特征值范围过大会导致模型的参数很难收敛,在一些模型下更是可能会导致精度越界或者梯度爆炸等问题。

特征设计不合理

  • 和label不相关

有一些特征和label关联度很低自然也就没办法得到很好的效果,比如说我们的目标是预测用户的点击率,但特征确是今天的天气或者是用户使用的手机种类。

除了这些比较明显的case之外,也有一些特征看起来很相关,但实际上不相关。这就需要具体问题具体分析了。

  • 和模型不匹配

这点也很好理解,比如让非神经网络模型去学习embedding。或者是id类特征不做成embedding而是直接onehot等等。

欠拟合与过拟合

即使样本数量充足、特征设计也合理,也并不意味着之后的事情就一帆风顺了。

在模型训练阶段还有两大难关,分别是过拟合与欠拟合,这两种情况刚好相反,我们可以通过下图理解一下情况。

上图中间的情况是比较理想的情况,模型对于样本集有一个不错的拟合,与样本之间的误差也比较小。左侧的图是欠拟合的状态,此时模型与样本之间的误差较大,不能很好地刻画数据当中的特性。而右图是过拟合的情况,模型过度刻画了数据当中的细节,虽然误差很小,但是模型对于没有出现在训练集中的样本刻画能力很差。

我们再来分别说说这两者出现的原因,首先是欠拟合。通常原因是模型过于简单,或者是训练次数过少,使得模型没能充分学习样本中的特性。

与之相反的是过拟合,通常是因为模型设计得过于复杂,参数空间过大,使得过度刻画了数据中的细节。也有可能是数据集中样本太少,使得模型过度关注于某些个别的case。

总结

讲了这么多机器学习应用当中的挑战,说来说去其实都是围绕样本和模型两个核心点。

我们算法工程师的日常工作就是基于我们的逻辑以及对数据和模型的理解和这些问题做对抗。一方面我们要理解模型的原理,领悟数据中的特性和逻辑。另外一方面也要预判可能出现的问题,所谓知己知彼,才能更好地解决问题,得到良好的模型效果。

本文是第一章节的最后一篇,也是关于机器学习理论科普的最后一篇。从下一篇文章开始,我们将会开始实战部分,开始亲自尝试动手从模型到数据,一一体验和学习。