为什么我们在训练神经网络时需要洗牌?


15

在神经网络的小批量训练中,我听说一种重要的做法是在每个时期之前对训练数据进行洗牌。有人可以解释为什么每个时期的改组都有帮助吗?

从Google搜索中,我找到了以下答案:

  • 它有助于培训快速收敛
  • 它可以防止训练期间出现任何偏见
  • 它阻止模型学习训练的顺序

但是,我很难理解为什么这些影响都是由随机改组引起的。有人可以提供直观的解释吗?

Answers:


8

尝试给出另一个解释:

关于神经网络,最强大的功能之一是它们可以是非常复杂的功能,从而使人们可以了解输入和输出数据之间非常复杂的关系。这些关系可能包括您料想不到的事情,例如每个时期馈入数据的顺序。如果每个时期内的数据顺序相同,则模型可以将其用作减少训练误差的一种方法,这是一种过度拟合。

关于速度:迷你批量方法依赖于随机梯度下降(及其改进),这意味着它们依赖于随机性来找到最小值。混叠迷你批处理使渐变更具可变性,这可以帮助收敛,因为它增加了击中正确方向的可能性(或者至少这是我理解的方式)。


1
神经网络如何学习每个时期的数据馈送顺序?
罗马教皇

1
总之,他们做不到。如果使用小批量训练(即每个时期多于一个批处理),则数据的特定顺序可能会影响训练,在某种意义上,首先通过在一个小批量训练上,求解器可以进入某个区域(可能包含一个区域)。局部最小值...),而不是另一个。但是要说前馈NN“学习”数据的顺序并不是真正正确的,因为每个预测都是独立于其他预测进行的,并且迷你批的顺序当然也不会起作用。
乔什

6

从一个非常简单的点,该数据被馈送中依次,这表明在最低限度,这是可能的数据,以对输出的效果。如果顺序无关紧要,那么随机化当然不会受到损害。如果顺序确实很重要,则随机化将有助于消除那些随机效应,以使它们不会成为系统性偏差。简而言之,随机化是廉价的,而且永远不会受到伤害,并且通常会最小化数据排序的影响。


6

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

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

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

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

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

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


感谢您提供的有用说明。在深入阅读您的答案之后,我有两个问题:1.您提到迷你批次在一定程度上限制了多元化。我不明白为什么这还不足以避免卡在局部最小值中。如果一个求解器在一批的表面的局部最小值中,则很有可能不在下一批的表面的局部最小值中,因此,它不应卡住。2.求解器如何收敛于损失函数的表面,而表面总是通过使用不同的批次而变化?
罗马教皇

多元化优势仍然存在,没有改组,但它并不像使用改组时那样重要,因为它不断看到相同的损失面序列,而如果我们使用改组,则可能永远不会看到相同的确切损失面。至于停止标准,我通常写的是我的,这样,一旦在指定的迭代次数上平均减少的损失百分比小于某个容差,培训就会停止。
乔什(Josh)

2
也许我没有很好地回答您关于局部极小值的问题。从理论上讲,这些损失面都应表现出一定程度的相似性,因为假定响应的概率分布(以模型的预测变量为条件)在整个训练数据集中都是恒定的。因此,如果最小值足够深,它将出现在许多迷你批处理中,因此求解器不太可能从其中反弹。但是,如果最小值基本上只是“噪声”,则此策略应能很好地工作并允许模型继续训练。
乔什(Josh)

谢谢。您的第二个回答使我们很容易理解,尽管表面不同,神经网络为何会收敛。关于我的第一个问题,与使用混洗相比,具有相同序列的批次的许多损失表面上重复出现“噪声”的可能性是否更高?这是我能给出的唯一解释,为什么使用迷你批处理而不进行改组时仍然有可能陷入局部最小值。
罗马教皇

@CodePope我认为是正确的。同样,自从训练开始以来,一旦损失减少了很多,梯度将非常小,甚至有可能因为求解器不断看到相同的损失面序列,所以其基本上陷入了“循环”。请注意,这是基于我相当有限的经验的一种推测性的解释,因此,如果您对此有严重的理论兴趣,则最好咨询专家。
乔什(Josh)

4

想象一下,您的最后几个minibatch标签确实有更多噪音。然后,这些批次会将最终学习的权重拉向错误的方向。如果您每次都洗牌,那么最后几批的噪音就会大大降低。


1

当您使用固定的数据集来训练网络时,这意味着您在训练过程中不会洗牌。您很可能会获得很高和很低的权重,例如40,70,-101,200 ...等。这仅表示您的网络尚未学习训练数据,但已学习了训练数据的噪声。过拟合模型的经典案例。有了这样的网络,您将对用于训练的数据进行预测。如果使用任何其他输入对其进行测试,则模型将崩溃。现在,当您在每个时间段(整个集合的迭代)后重新整理训练数据时,您只需在每个时间段将不同的输入馈送到神经元,并简单地调节权重即可,这意味着您更有可能获得“较低”的权重,这些权重接近于零,这意味着您的网络可以进行更好的概括。

我希望这很清楚。


1

这是一个更直观的解释:

当使用梯度下降时,我们希望损耗在梯度方向上减小。梯度是通过每轮权重更新的单个小批量数据计算得出的。我们想要发生的事情是这种基于小批量的渐变大致是人口渐变,因为这有望产生更快的收敛。(想象一下,如果您在一个小型批处理中向网络提供100个class1数据,而在另一个小型批处理中提供100个class2数据,网络将徘徊。一种更好的方法是在每个小型批处理中向其馈送50个class1 + 50 class2。)

由于我们无法在小批量生产中使用人口数据,该如何实现?统计数据告诉我们:洗净人口,而第一批数据大小的数据就可以代表人口。这就是为什么我们需要洗牌。

我必须说,如果您有其他方法可以从总体中采样数据并确保样本可以产生合理的梯度,则无需进行混洗。

那是我的理解。希望能帮助到你。

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.