批量归一化:按维度固定样本或不同样本?

Batch normalization: fixed samples or different samples by dimension?

我在阅读论文时遇到了一些问题 'Batch Normalization : Accelerating Deep Network Training by Reducing Internal Covariate Shift'。

论文中说:

Since m examples from training data can estimate mean and variance of all training data, we use mini-batch to train batch normalization parameters.

我的问题是:

他们是选择 m 个样本然后同时拟合批量规范参数,还是为每个输入维度选择不同的 m 个样本集?

例如训练集由 x(i) = (x1,x2,...,xn) 组成:n维 对于固定批次 M = {x(1),x(2),...,x(N)},执行所有 gamma1~gammanbeta1~betan.

的拟合

对于gamma_ibeta_i选择不同批次M_i = {x(1)_i,...,x(m)_i}

我在交叉验证和数据科学上没有找到这个问题,所以我只能在这里回答。如有必要,请随意迁移。

使用移动平均值一次每个小批量中的所有维度计算均值和方差。这是它在 TF 中的代码的样子:

mean, variance = tf.nn.moments(incoming, axis)
update_moving_mean = moving_averages.assign_moving_average(moving_mean, mean, decay)
update_moving_variance = moving_averages.assign_moving_average(moving_variance, variance, decay)
with tf.control_dependencies([update_moving_mean, update_moving_variance]):
  return tf.identity(mean), tf.identity(variance)

您不必担心技术细节,这是正在发生的事情:

  • 首先,沿批轴计算整个批次 incomingmeanvariance。它们都是向量(更准确地说是张量)。
  • 然后当前值 moving_meanmoving_varianceassign_moving_average 调用更新,它基本上是这样计算的:variable * decay + value * (1 - decay).

每次执行 batchnorm 时,它都会知道一个 当前批次和以前批次的一些统计数据。