批量归一化层如何解决梯度消失问题?

数据挖掘 深度学习 反向传播 激活函数 批量标准化 坡度
2022-02-22 09:49:45

根据这篇文章:

https://towardsdatascience.com/the-vanishing-gradient-problem-69bf08b15484

  • 使用sigmoid激活函数时会出现梯度消失问题,因为sigmoid将大输入空间映射到小空间,因此大值的梯度将接近于零。

  • 文章建议使用批量标准化层。

我不明白它是如何工作的?

使用规范化时,大值仍然会在另一个范围内获得大值(而不是 [-inf, inf] 他们将获得 [0..1] 或 [-1..1]),因此在相同的情况下值(之前或归一化后)将被放置在边缘附近,梯度将接近于零,对吗?

1个回答

从某种意义上说,批量标准化(BN)并不能防止梯度消失或爆炸问题,因为这是不可能的。相反,它降低了这些发生的可能性。因此,原始论文指出:

在传统的深度网络中,过高的学习率可能会导致梯度爆炸或消失,以及陷入糟糕的局部最小值。批量标准化有助于解决这些问题。通过对整个网络的激活进行归一化,它可以防止参数的微小变化放大到梯度中激活的更大和次优变化;例如,它可以防止训练陷入非线性饱和状态。

如果你有m训练期间当前批次中的梯度所有这些都将被归一化。即使你之后仍然有一些接近边界区域的渐变,很多都不会。也就是说,BN 减少了在这种情况下可能爆炸或消失的梯度数量。

此外,BN 不会梯度裁剪为[0,1]或者[1,1]. 它通过减去批次的平均值并除以其标准偏差来标准化线性变换的输出(即通常不是直接的激活值)。(如果你把它与预处理联系起来,它就像标准化而不是通过最小-最大缩放进行标准化。所以实际上它是“批量标准化”。)

附带说明:梯度消失和爆炸不仅是 sigmoid 的问题,也是 tanh 激活函数的问题。