如何对抗 CNN 前传中爆炸性的数字?

人工智能 机器学习 卷积神经网络 雷路
2021-11-06 20:17:29

以 AlexNet 为例:

alexnet的组合gpu流

在这种情况下,仅使用激活函数 ReLU。由于 ReLU 不能饱和,它反而会爆炸,如下例所示:

假设我有一个权重矩阵[-1,-2,3,4]和输入[ReLU(4), ReLU(5), ReLU(-2), Relu(-3)]从这些得到的矩阵对于 和 的输入将具有大量数字,对于ReLU(4)则为ReLU(5)0 如果甚至只有几层,数字很快就会爆炸或为零。ReLU(-2)ReLU(-3)

这通常是如何对抗的?你如何保持这些数字接近 0?我知道你可以在每一层的末尾减去平均值,但是对于已经数百万的层,减去平均值仍然会导致数千。

1个回答

防止爆炸的前向和后向传播的最有效方法是将权重保持在一个小范围内。实现这一点的主要方式是通过它们的初始化

例如在He 初始化的情况下,作者表明(给定一些假设)最后一层输出的方差L网络是:

Var[yL]=Var[y1](i=2L12nlVar[wl])

在哪里nlwl是层的连接数和权重l. 为了防止输出爆炸,上述产品不应成倍地放大其输入。为了做到这一点,作者选择初始化权重,以便:

12nlVar[wl]=1

现在这有助于防止输出爆炸。然后他们去证明相同的策略有助于防止梯度爆炸。

另一个类似的策略是所谓的Glorot(或 Xavier)初始化这些技术在帮助模型收敛方面非常有效!