为什么 ReLU 不需要批量归一化的尺度参数?

数据挖掘 深度学习 批量标准化
2021-09-29 03:20:46

我现在读了一本名为“ Hands-On Machine Learning with Scikit-Learn and TensorFlow ”的书,在第 11 章,作者写了以下关于批量标准化的解释:

请注意,默认情况下,batch_norm() 仅对输入进行中心化、规范化和移位;它不会缩放它们(即,γ 固定为 1)。这对于没有激活函数或使用 ReLU 激活函数的层是有意义的,因为下一层的权重可以负责缩放,但对于任何其他激活函数,您应该将 "scale": True 添加到 bn_params。

batch_norm函数来自TensorFlow,仅供参考。作者解释说,不应该在 ReLU 激活函数上设置 γ 参数。

但是,我不明白为什么在 ReLU 上,下一层的权重可以处理缩放...我知道下一层从 ReLU 输出中获取输入,即max(0, x). 为什么它会处理缩放,因此不需要在 ReLU 上设置 γ 参数?

1个回答

由于 ReLU 的性质,据说不需要在批量标准化中进行缩放。尽管它是非线性运算,但与正标量的乘法γ 在向量的值上 X 已经归一化并以训练的偏差为中心 β 对其非线性结果没有影响:对于 γ>0, 一个X(0,γ×X)=γ×一个X(0,X). 事实上,额外的参数不会在模型中增加代表能力,原因与我们必须包括其他神经元层之间的非线性相同。

因此,下一层的权重会相应地缩放值以适应。我们可以有z=WGX, 但这与z=WX如果W被缩放G. 不能对其他非线性进行相同的推理,例如 sigmoid 或 tanh,它们具有明显受标量影响的饱和效应。

奇怪的是,TensorFlow 的官方文档tf.contrib.layers.batch_norm也提出了同样的建议:

  • scale:如果为 True,则乘以 gamma。如果为 False,则不使用 gamma。当下一层是线性的(例如 nn.relu)时,这可以被禁用,因为缩放可以由下一层完成。