帖子

[经验分享] AI 搬运工 | 如何缩小机器学习最终模型的方差?

[复制链接]

该用户从未签到

41780  楼主| AI 搬运工 发表于 2019-1-11 09:06:44 1#

机器学习的最终模型会在所有可用数据中进行训练,然后再投入到新的数据集中进行预测。但大部分最终的模型在进行预测时都会存在方差。这也就意味着,当你每次适配好了一个模型时,你会得到一组略有差异的参数,而这些参数反过来又会影响你的模型预测,使其存在方差问题。这种影响偶尔会高于你的预期,偶尔也会低于你的预期。

怎么说呢,这类问题就真的很令人沮丧了,尤其是当你准备将这个模型部署到运行环境中时。

透过本文,你将会知道,在最终模型中如何考虑模型方差问题,以及你可以使用哪些技巧来缩小最终模型的预测方差。

读完本文,你将会了解到:
1. 最终模型预测中的方差问题
2. 如何衡量模型方差以及在预测参数时通常是如何解决方差问题的
3. 有哪些技巧可以用来缩小最终模型预测中的方差问题

好吧,接下来我们就一一来看看。

最终模型
当你发现了在现有数据集上表现最好的模型和超参时,你就可以准备最终模型了。

最终模型是在所有可用数据中训练出来的,包括训练集和测试集。之后,你将会使用该模型在新的数据集中进行预测,而你此时并不会知道结果。

最终模型是应用机器学习项目的产物。

偏差与方差
偏差-方差权衡是应用机器学习中的一个概念,用于帮助理解模型误差的来源。

偏差指的是学习算法中的一种假设,这种假设可以缩小学习范围。同时,可以加快学习速度,并输出稳定的结果,因此十分有用。但问题是这种假设与现实情况有所出入。

方差指的是学习算法对训练数据在细节上的敏感度,如噪音和细节观察。方差的优势在于训练的模型可以专门用来处理数据,但问题是,需要学习在不同训练数据中的随机噪音以及每次变化的噪音。

偏差-方差权衡是一种概念工具,可分析出误差来源和权衡方式。

在算法模型中,偏差越大,方差越小,反之亦然。

但是你可以控制这个平衡。因为多数的机器学习算法模型都含有可以允许你直接或间接地控制偏差-方差权衡的超级参数。

最终模型里的方差问题

大多数最终模型都会遇到方差问题。每次在高方差算法中训练模型时,结果都会略微有所不同。而这轻微的区别反过来也会导致模型预测结果的略微不同,或好或坏。

最终模型训练中常会遇到这个问题,因为我们需要利用模型来对哪些我们并不知道答案的真实数据进行预测,我们当然希望这些预测越准确越好。

因此我们希望我们得到的模型是最好的版本,希望方差可以尽可能缩小。
如果做不到这点,至少是,希望方差不会影响我们的预测。

最终模型里的方差衡量
最终模型方差有两个常见来源:1)训练数据中的噪音;2)机器学习算法中随机算法的使用。

第一种来源我们上述已经讨论过。
第二种来源会影响那些在学习中利用随机性的算法。

在使用训练数据时,你可以测量特定模型种的这两种方差来源。
1)测量算法方差:因算法的随机性带来的方差可以通过在同一个训练数据集上重复评估算法和计算模型方差或标准偏差来测量。
2)测量训练数据方差:因训练数据带来的方差可以通过在不同训练数据样本种重复评估算法来测量,但同时需要固定伪随机数发生器的种子来计算模型方差或标准偏差。

缩小最终模型方差
1. 根据多个最终模型分别做预测
你可以适配多个最终模型,而不是单一最终模型。那么最终模型群组就称之为一个集合(Ensemble)。

在给定输入值的情况下,集合种的每个模型都可以做出一个预测,而最终的输出预测值取自于模型集合预测值的平均值。

灵敏度分析可用于衡量集合大小对预测方差的影响。

2. 最终模型的集合参数
如上所述,我们可以创建多个最终模型,而非单一最终模型。

除了从多个模型计算预测的平均值,我们还可以根据多个模型的参数来构建出一个最终的模型。

那么,这就可以解释的通为什么每个模型的参数数量是相同的了,比如神经网络权重或回归系数。

举个例子:假设一个线性回归模型有三个系数[b0, b1, b2],我们可以适配一个线性回归模型群组,计算最终的b0值,并将其作为每个模型中b0的平均值,那么针对b1b2也可以重复此步骤。

同样,灵敏度分析也可以用于衡量集合大小对预测方差的影响。

3. 增加训练数据集的大小

依靠大数定律,缩小模型方差最简单的办法或许是根据更多的训练数据来适配模型。
在没有更多数据可用的情况下,我们可以采用数据增强法。

同时,我也建议利用训练数据集大小对预测方差的灵敏度分析法来找出收益递减点。

一些思考:
也有一些方法可以准备最终模型,以促使最终模型的方差为你所用。

这些方法的共同之处就是他们都寻求一个最佳的单一最终模型。

举两个例子:
1)为什么不修复随机种子呢?你可以在适配最终模型时修复随机种子。这样一来,因算法的随机性导致的方差影响会有所限制。
2)为什么不采用提前终止法呢?你可以在训练期间利用验证集来检验模型的好坏,当模型的性能开始下降时,立即停止训练。

但我认为,这些方法都不是很有用。或许你可以赌一把,促使方差对你产生有利影响。再机器学习比赛中,这个方法或许还不错,毕竟在比赛中,赌输了也不算啥大事。

当然了,我不会这么做。我认为比较安全的做法还是寻求最佳平均性能,并限制其负面影响。
我想,最终模型的偏差-方差权衡的处理是在样本中思考的,而不是在单一模型中。