深度学习中执行批量归一化的确切逻辑是什么?

问题描述 投票:0回答:2

在阅读了有关batchnorm的研究论文及其在论坛中的各种描述后,我仍然不清楚基本计算是如何执行的。我的问题的核心是:向量相对于它所属的集合进行归一化;因此,我们可以使用从训练集中选择的批次对输入到第 1 层的向量进行归一化。下一层的每个输入向量都需要根据其所属的集合进行归一化,但是我们如何获得该集合?

更准确地说,让

  • N = 批量大小;
  • Bi = 向量集 Xij (j = 1..n),其归一化值为 输入到网络的第 i 层;
  • BN = 批量归一化函数;
  • BN(Xij, Bi) = 第 j 个向量 Xij 相对于集合 Bi 的归一化版本。

BN(X1j, B1), j = 1..n,可以计算,因为我们知道 B1。它们是第 1 层的输入。

我们需要 BN(X2j, B2), j = 1..n 来输入第 2 层,但我们没有现成的 B2。我的问题是如何获得 B2、B3 等

我们可以通过第 1 层处理每个 BN(X1j, B1), j = 1..n,并将输出记住为 X2j(该集合将是 B2)。然后通过相对于 B2 进行归一化来计算每个 j 的 BN(x2j, B2) 并将它们输入到第 2 层等。因此前向传递将包含许多这样的步骤。为了简单起见,我忽略了比例和移位步骤,因为这与我的问题无关。

作为这个主题的新手,我希望得到专家的意见。

deep-learning batch-normalization
2个回答
0
投票

批归一化首先减去平均值,使输出以零为中心。然后批量归一化除以标准导数,将输出缩放至单位方差。

这意味着每个向量都根据其所属的批次进行归一化。假设您在第一层运行 x,我们将其输出称为 y1。然后以

(y1 - y1.mean()) / y.std()
的形式将批量归一化应用于 y1。你所说的“集合”只是向量 y1,即该层的输出。

所有这些当然都忽略了带有偏见和推导的版本。


0
投票

根据您的符号,BN(X1j, B1) 的大小为 N,因为对于每个 j 都会有一个输出。应用此激活函数,我们得到下一层的 N 个新值。

© www.soinside.com 2019 - 2024. All rights reserved.