在机器学习任务中,通常将数据混洗并规范化。标准化的目的很明确(具有相同范围的特征值)。但是,经过很多努力之后,我没有发现任何改组数据的有价值的原因。
我在这里阅读了这篇文章,讨论了何时需要重新整理数据,但是不清楚为什么我们应该重新整理数据。此外,我经常在诸如Adam或SGD之类的算法中看到我们需要批量梯度下降(应将数据分离为小批量,并且必须指定批量大小)。根据这篇文章,至关重要的是将每个时期的数据混排以使每个批次具有不同的数据。因此,也许数据被改组并且更重要地被更改。
我们为什么要做这个?
在机器学习任务中,通常将数据混洗并规范化。标准化的目的很明确(具有相同范围的特征值)。但是,经过很多努力之后,我没有发现任何改组数据的有价值的原因。
我在这里阅读了这篇文章,讨论了何时需要重新整理数据,但是不清楚为什么我们应该重新整理数据。此外,我经常在诸如Adam或SGD之类的算法中看到我们需要批量梯度下降(应将数据分离为小批量,并且必须指定批量大小)。根据这篇文章,至关重要的是将每个时期的数据混排以使每个批次具有不同的数据。因此,也许数据被改组并且更重要地被更改。
我们为什么要做这个?
Answers:
根据,当DataScience上发布的问题与CrossValidated上发布的问题重复时,我们该怎么办?,我将对在CrossValidated(https://stats.stackexchange.com/a/311318/89653)上问的相同问题的答案重新发布。
注意:在此答案中,我指的是使训练损失最小化,并且我不讨论诸如验证损失之类的停止标准。停止条件的选择不会影响下面描述的过程/概念。
训练神经网络的过程是找到损失函数的最小值,其中代表神经元之间权重的矩阵(或几个矩阵),代表训练数据集。我使用的是标为,以表明我们的最小化只发生在权重(也就是我们正在寻找这样最小化),而是固定的。
现在,如果我们假设我们有中的元素(即,有在网络中的权重),处于一个表面P + 1个维空间。为了给出一个视觉模拟,假设我们只有两个神经元权重(P = 2)。然后ℒ具有易于几何解释:它是在一个3维空间中的表面。这是由于以下事实:对于任何给定的权重矩阵W,损失函数都可以在X上求值,并且该值成为表面的高程。w ^ P ℒ
但是存在不凸的问题。我所描述的表面将具有许多局部最小值,因此梯度下降算法很容易在这些最小值中“卡住”,而更深/更低/更好的解决方案可能位于附近。如果在所有训练迭代中均未更改,则可能会发生这种情况,因为对于给定的X,曲面是固定的;它的所有功能都是静态的,包括各种最小值。
解决方案是将小批量训练与改组相结合。通过在给定迭代中对行进行混排并仅对其进行训练,会随每次迭代而改变,实际上很有可能在训练迭代和历元的整个序列上不会执行完全相同的X上的两次迭代。结果是,求解器可以轻松地从局部最小值中“反弹”。想象一下,在迭代i的训练小批量X i中,求解器陷入局部最小值。该局部最小值对应于ℒ在权重的特定值来评价; 我们把它叫做ℒ X 我(w ^。在接下来的迭代我们的损失面的形状,实际上改变,因为我们使用的是 X 我+ 1,也就是 ℒ X 我+ 1(w ^ 我)可能会从一个非常不同的值 ℒ X 我(w ^ 我),它它很可能与局部最小值不符!现在,我们可以计算梯度更新并继续进行训练。需要明确的是:形状 ℒ X 我+ 1将-一般-是从不同 ℒ X 我。注意,这里我指的是丧失功能在训练集评估X ; 它是在W的所有可能值上定义的完整表面,而不是对于W的特定值对该损耗的评估(只是一个标量)。还请注意,如果使用迷你批处理而不进行混洗,则损失曲面仍然存在一定程度的“多样化”,但是求解器会看到有限(且相对较小)数量的唯一错误曲面(具体而言,它将看到在每个时期都具有相同的一组精确的迷你批处理-因此也有丢失表面)。
我特意避免的一件事是讨论小批量大小,因为对此有上百万种意见,并且它具有重大的实际意义(使用大批量可以实现更大的并行化)。但是,我相信以下几点值得一提。因为是通过计算一个值中的每一行计算X为一组给定的权重矩阵的;(即,可交换操作符和求和或取平均)w ^,的行的排列X不起作用使用全时批处理梯度下降(也就是说,当每个批处理都是完整的X时,迭代和历元是同一件事)。
改组数据的目的是减少方差,并确保模型保持通用性并减少过拟合。
洗牌数据的明显情况是,数据是按其类/目标排序的。在这里,您将需要改组以确保您的训练/测试/验证集代表数据的整体分布。
对于批次梯度下降,适用相同的逻辑。批处理梯度下降背后的想法是,通过计算单个批处理中的梯度,您通常会获得“真实”梯度的相当不错的估计。这样,您不必每次都在整个数据集中计算“真实”梯度,从而节省了计算时间。
您想在每个时期之后重新整理数据,因为您总是有创建不代表整体数据集的批次的风险,因此,您对梯度的估计将不可用。在每个时期之后对数据进行混排,以确保您不会因过多的不良批次而被“卡住”。
在常规的随机梯度下降中,当每个批次的大小为1时,您仍然希望在每个时期之后重新整理数据,以保持学习的一般性。实际上,如果总是在数据点16之后使用数据点17,则其自身的坡度将因数据点16在模型上进行的任何更新而有偏差。通过对数据进行混排,可以确保每个数据点在模型上创建一个“独立”的更改,而不会受到之前相同点的影响。