批量归一化:按维度固定样本或不同样本?
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~gamman
和 beta1~betan
.
的拟合
对
对于gamma_i
,beta_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)
您不必担心技术细节,这是正在发生的事情:
- 首先,沿批轴计算整个批次
incoming
的 mean
和 variance
。它们都是向量(更准确地说是张量)。
- 然后当前值
moving_mean
和 moving_variance
由 assign_moving_average
调用更新,它基本上是这样计算的:variable * decay + value * (1 - decay)
.
每次执行 batchnorm 时,它都会知道一个 当前批次和以前批次的一些统计数据。
我在阅读论文时遇到了一些问题 '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~gamman
和 beta1~betan
.
对
对于gamma_i
,beta_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)
您不必担心技术细节,这是正在发生的事情:
- 首先,沿批轴计算整个批次
incoming
的mean
和variance
。它们都是向量(更准确地说是张量)。 - 然后当前值
moving_mean
和moving_variance
由assign_moving_average
调用更新,它基本上是这样计算的:variable * decay + value * (1 - decay)
.
每次执行 batchnorm 时,它都会知道一个 当前批次和以前批次的一些统计数据。