为什么应重新整理数据以进行机器学习任务


30

在机器学习任务中,通常将数据混洗并规范化。标准化的目的很明确(具有相同范围的特征值)。但是,经过很多努力之后,我没有发现任何改组数据的有价值的原因。

我在这里阅读了这篇文章讨论了何时需要重新整理数据,但是不清楚为什么我们应该重新整理数据。此外,我经常在诸如Adam或SGD之类的算法中看到我们需要批量梯度下降(应将数据分离为小批量,并且必须指定批量大小)。根据这篇文章,至关重要的是将每个时期的数据混排以使每个批次具有不同的数据。因此,也许数据被改组并且更重要地被更改。

我们为什么要做这个?


1
确切说明第一个链接中的答案为何无济于事可能会很有用。否则,我们冒着重复几乎没有说过的内容的风险。
E_net4说要

正如我已经说过的,我想知道为什么不在何时,您知道为什么吗?那里真的有解释吗?我根本没有看过任何纸质文件
媒体

1
有关示例订购的影响的更多信息,请阅读课程学习 [pdf]。
Emre

1
我将此发布在CrossValidated上,我认为这是相关的。stats.stackexchange.com/a/311318/89653
Josh

@Emre实际上这篇论文是反对改组的,谢谢,我没有听说过这种学习。
媒体

Answers:


18

根据,当DataScience上发布的问题与CrossValidated上发布的问题重复时,我们该怎么办?,我将对在CrossValidated(https://stats.stackexchange.com/a/311318/89653)上问的相同问题的答案重新发布。

注意:在此答案中,我指的是使训练损失最小化,并且我不讨论诸如验证损失之类的停止标准。停止条件的选择不会影响下面描述的过程/概念。

训练神经网络的过程是找到损失函数的最小值,其中代表神经元之间权重的矩阵(或几个矩阵),代表训练数据集。我使用的是标为,以表明我们的最小化只发生在权重(也就是我们正在寻找这样最小化),而是固定的。X(W)WXXWWX

现在,如果我们假设我们有中的元素(即,有在网络中的权重),处于一个表面P + 1个维空间。为了给出一个视觉模拟,假设我们只有两个神经元权重(P = 2)。然后具有易于几何解释:它是在一个3维空间中的表面。这是由于以下事实:对于任何给定的权重矩阵W,损失函数都可以在X上求值,并且该值成为表面的高程。w ^ P PWPP+1P=2WX

但是存在不凸的问题。我所描述的表面将具有许多局部最小值,因此梯度下降算法很容易在这些最小值中“卡住”,而更深/更低/更好的解决方案可能位于附近。如果在所有训练迭代中均未更改,则可能会发生这种情况,因为对于给定的X,曲面是固定的;它的所有功能都是静态的,包括各种最小值。XX

解决方案是将小批量训练与改组相结合。通过在给定迭代中对行进行混排并仅对其进行训练,会随每次迭代而改变,实际上很有可能在训练迭代和历元的整个序列上不会执行完全相同的X上的两次迭代。结果是,求解器可以轻松地从局部最小值中“反弹”。想象一下,在迭代i的训练小批量X i中,求解器陷入局部最小值。该局部最小值对应于在权重的特定值来评价; 我们把它叫做X w ^XXiXi。在接下来的迭代我们的损失面的形状,实际上改变,因为我们使用的是 X + 1,也就是X + 1w ^ 可能会从一个非常不同的值X w ^ ,它它很可能与局部最小值不符!现在,我们可以计算梯度更新并继续进行训练。需要明确的是:形状X + 1将-一般-是从不同X Xi(Wi)Xi+1Xi+1(Wi)Xi(Wi)Xi+1Xi。注意,这里我指的是丧失功能在训练集评估X ; 它是在W的所有可能值上定义的完整表面,而不是对于W的特定值对该损耗的评估(只是一个标量)。还请注意,如果使用迷你批处理而不进行混洗,则损失曲面仍然存在一定程度的“多样化”,但是求解器会看到有限(且相对较小)数量的唯一错误曲面(具体而言,它将看到在每个时期都具有相同的一组精确的迷你批处理-因此也有丢失表面)。XWW

我特意避免的一件事是讨论小批量大小,因为对此有上百万种意见,并且它具有重大的实际意义(使用大批量可以实现更大的并行化)。但是,我相信以下几点值得一提。因为是通过计算一个值中的每一行计算X为一组给定的权重矩阵的;(即,可交换操作符和求和或取平均)w ^,的行的排列X不起作用使用全时批处理梯度下降(也就是说,当每个批处理都是完整的X时,迭代和历元是同一件事)。XWX X


+1。从技术上讲,该答案比其他具有更高投票数的答案更好。
Gokul NC

29

改组数据的目的是减少方差,并确保模型保持通用性并减少过拟合。

洗牌数据的明显情况是,数据是按其类/目标排序的。在这里,您将需要改组以确保您的训练/测试/验证集代表数据的整体分布。

对于批次梯度下降,适用相同的逻辑。批处理梯度下降背后的想法是,通过计算单个批处理中的梯度,您通常会获得“真实”梯度的相当不错的估计。这样,您不必每次都在整个数据集中计算“真实”梯度,从而节省了计算时间。

您想在每个时期之后重新整理数据,因为您总是有创建不代表整体数据集的批次的风险,因此,您对梯度的估计将不可用。在每个时期之后对数据进行混排,以确保您不会因过多的不良批次而被“卡住”。

在常规的随机梯度下降中,当每个批次的大小为1时,您仍然希望在每个时期之后重新整理数据,以保持学习的一般性。实际上,如果总是在数据点16之后使用数据点17,则其自身的坡度将因数据点16在模型上进行的任何更新而有偏差。通过对数据进行混排,可以确保每个数据点在模型上创建一个“独立”的更改,而不会受到之前相同点的影响。


1
正如我所解释的,您对数据进行混洗以确保您的训练/测试集具有代表性。在回归中,使用改组是因为您要确保您不仅仅训练例如小的值。改组主要是一种保护措施,在最坏的情况下,它没有用,但这样做不会让您损失任何东西。对于随机梯度下降部分,要再次确认,该模型是不是这是因为在你喂养它的数据顺序的方式,所以一定要避免这种情况,你得洗
瓦伦丁Calomme

2
我认为改组会减少方差,并可能会增加偏差(即,它会减少数据过度拟合的趋势)。想象一下,我们正在进行全批次梯度下降,因此历元和迭代是同一回事。然后存在一个全局最小值(并非我们一定能找到它),我们的求解器正在尝试定位该最小值。如果我们使用的是MSE损失,那么如果每次都能达到此解决方案,我们将使偏差最小化。但是由于可能在不同的位置针对不同的训练集找到此全局最小值,因此该解决方案将趋向于具有较高的方差。
乔什(Josh)

2
通过改组,我们不太可能收敛到整个训练集的全局最小值的解决方案(较高的偏见),但更有可能找到一种概括性更好的解决方案(方差较小)。
乔什(Josh)

7

假设数据按指定顺序排序。例如,根据其类别排序的数据集。因此,如果在不考虑该主题的情况下选择用于训练,验证和测试的数据,则将为每个类别选择不同的任务,这将使该过程失败。

因此,为了阻止此类问题,一种简单的解决方案是对数据进行改组以获得不同的训练,验证和测试数据集。

关于小批量,此帖子的答案可以解决您的问题。


1
@Media在提供的链接中最相关的答案是:“混洗迷你批处理使渐变更具可变性,这有助于收敛,因为它增加了击中方向的可能性”
OmG

实际上,我在SGD的论文中已经看到了这一点,但正如该论文的作者声称的那样,这是趋同的原因而不是改组。我看到了链接,对此感到有些怀疑。为了更加清晰,请看这张惊人的论文。作者已经有提到这一点,但你会看到有洗牌没有确切的理由
媒体

1

我们仅需要针对小批量/ SGD进行混洗,而无需进行批次梯度下降。

如果不对数据进行混洗,则可以对数据进行排序,否则类似的数据点将彼此相邻放置,从而导致收敛缓慢:

  • 相似的样本将产生相似的曲面(1个样本的1个损失函数的曲面)->梯度将指向相似的方向,但该方向很少指向最小值->可能使梯度远离最小值
  • “最佳方向”:直接指向最小值的所有曲面的所有梯度的平均值(批梯度下降)
  • “最小批量方向”:各种方向的平均值将指向更接近最小值的方向,尽管没有一个方向指向最小值
  • “ 1-采样方向”:与小批量相比,指向更远的最小值

我画了L-2损失函数的曲线线性回归对y=2x 这里



1

为了使模型具有最佳的准确性,始终建议训练数据应具有所有类型的数据。

改组训练数据有助于我们实现这一目标。


1

通过在给定的迭代过程中对行进行混排并仅对其中的一个子集进行训练,每次迭代都会改变,,实际上很有可能在完全相同的训练迭代和历元序列上不会执行两次迭代

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.