Answers:
尝试给出另一个解释:
关于神经网络,最强大的功能之一是它们可以是非常复杂的功能,从而使人们可以了解输入和输出数据之间非常复杂的关系。这些关系可能包括您料想不到的事情,例如每个时期馈入数据的顺序。如果每个时期内的数据顺序相同,则模型可以将其用作减少训练误差的一种方法,这是一种过度拟合。
关于速度:迷你批量方法依赖于随机梯度下降(及其改进),这意味着它们依赖于随机性来找到最小值。混叠迷你批处理使渐变更具可变性,这可以帮助收敛,因为它增加了击中正确方向的可能性(或者至少这是我理解的方式)。
注意:在本回答中,我指的是使训练损失最小化,并且我不讨论诸如验证损失之类的停止标准。停止条件的选择不会影响下面描述的过程/概念。
训练神经网络的过程是找到损失函数的最小值,其中代表神经元之间权重的矩阵(或几个矩阵),代表训练数据集。我使用的是标为,以表明我们的最小化只发生在权重(也就是我们正在寻找这样最小化),而是固定的。w ^XX ℒ W¯¯W¯¯ ℒ X
现在,如果我们假设有元素(即网络中有权重),则是维空间中的一个曲面。为了给出一个视觉模拟,假设我们只有两个神经元权重()。然后具有易于几何解释:它是在一个3维空间中的表面。这是由于以下事实:对于任何给定的权重矩阵,损失函数都可以在上求值,并且该值成为表面的高程。w ^ P ℒ P + 1个P = 2 ℒ w ^ X
但是存在不凸的问题。我所描述的表面将具有许多局部最小值,因此梯度下降算法很容易在这些最小值中“卡住”,而更深/更低/更好的解决方案可能位于附近。如果在所有训练迭代中均未更改,则可能会发生这种情况,因为对于给定的,曲面是固定的;它的所有功能都是静态的,包括各种最小值。X
解决方案是将小批量训练与改组相结合。通过在给定的迭代过程中对行进行混排并仅对其进行训练,会随每次迭代而改变,实际上很有可能不会在完全相同的上执行训练迭代和历元的整个序列中的两次迭代。这样做的结果是,求解器可以轻松地“反弹”出局部最小值。想象一下,在迭代的训练小批量中,求解器陷入局部最小值。该局部最小值对应于在权重的特定值来评价; 我们称之为X 我X 我ℒ ℒ X 我(w ^ 我)X 我+ 1 ℒ X 我+ 1(w ^ 我)ℒ X 我(w ^ 我)ℒ X 我+ 1 ℒ X 我 ℒ X w ^ w ^。在下一次迭代中,损耗面的形状实际上会发生变化,因为我们使用的是,即可能与,并且很可能不符合局部最小值!现在,我们可以计算梯度更新并继续进行训练。需要明确的是:的形状通常与的不同。注意,这里我指的是丧失功能在训练集评估 ; 它是在所有可能值上定义的完整表面,而不是针对的特定值对该损失(只是一个标量)进行评估。另请注意,如果使用迷你批处理而不进行混洗,则损失曲面仍然存在一定程度的“多样化”,但是求解器会看到有限(且相对较小)数量的唯一错误曲面(具体而言,它将看到在每个时期都具有相同的一组精确的迷你批处理-因此也有丢失表面)。
我特意避免的一件事是讨论小批量大小,因为对此有上百万种意见,并且它具有重大的实际意义(使用大批量可以实现更大的并行化)。但是,我相信以下几点值得一提。因为是通过计算一个值中的每一行计算为一组给定的权重矩阵的;(即,可交换操作符和求和或取平均),的行的排列不起作用使用全时批处理梯度下降(也就是说,当每个批处理都是完整的,迭代和纪元是同一件事)。 X w ^ X X
这是一个更直观的解释:
当使用梯度下降时,我们希望损耗在梯度方向上减小。梯度是通过每轮权重更新的单个小批量数据计算得出的。我们想要发生的事情是这种基于小批量的渐变大致是人口渐变,因为这有望产生更快的收敛。(想象一下,如果您在一个小型批处理中向网络提供100个class1数据,而在另一个小型批处理中提供100个class2数据,网络将徘徊。一种更好的方法是在每个小型批处理中向其馈送50个class1 + 50 class2。)
由于我们无法在小批量生产中使用人口数据,该如何实现?统计数据告诉我们:洗净人口,而第一批数据大小的数据就可以代表人口。这就是为什么我们需要洗牌。
我必须说,如果您有其他方法可以从总体中采样数据并确保样本可以产生合理的梯度,则无需进行混洗。
那是我的理解。希望能帮助到你。