当我阅读论文“批量标准化:通过减少内部协变量偏移来加速深度网络训练”时,我遇到了一些问题。
在论文中说:
由于来自训练数据的m个示例可以估计所有训练数据的均值和方差,因此我们使用小批量训练批归一化参数。
我的问题是:
他们是在选择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)
您不必担心技术细节,这是正在发生的事情:
mean
和。它们都是向量(更确切地说是张量)。variance
incoming
moving_mean
和moving_variance
通过assign_moving_average
调用进行更新,该调用基本上是这样计算的:variable * decay + value * (1 - decay)
。每次执行batchnorm时,它都会知道一个当前批次和一些先前批次的统计信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句