当我读到一篇论文“批量规范化:通过减少内部协变量转换来加速深度网络培训”时,我遇到了一些问题。
在论文中,它说:
由于来自训练数据的m个例子可以估计平均值和方差 所有培训数据,我们使用小批量培训批量标准化 参数。
我的问题是:
他们是选择m个示例然后同时拟合批量规范参数,还是为每个输入维度选择不同的m个示例集?
E.g。训练集由x(i) = (x1,x2,...,xn)
:n维组成
对于固定批次M = {x(1),x(2),...,x(N)}
,请执行所有gamma1~gamman
和beta1~betan
。
VS
对于gamma_i
,beta_i
选择不同的批次M_i = {x(1)_i,...,x(m)_i}
答案 0 :(得分:1)
我还没有在交叉验证和数据科学上找到这个问题,所以我只能在这里回答。如有必要,请随意迁移。
使用移动平均线计算每个小批量中的所有维度的均值和方差。以下是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
的{{1}}和variance
。它们都是矢量(更确切地说是张量)。incoming
调用更新当前值moving_mean
和moving_variance
,这基本上可以计算:assign_moving_average
。每次执行batchnorm时,它都知道一个当前批次以及之前批次的一些统计信息。