CNN xavier 权重初始化

机器算法验证 正态分布 方差 神经网络 卷积神经网络
2022-02-15 04:38:36

在一些教程中,我发现有人说“Xavier”权重初始化(论文:了解训练深度前馈神经网络的难度)是初始化神经网络权重的有效方法。

对于全连接层,这些教程中有一条经验法则:

Var(W)=2nin+nout,simpler alternative:Var(W)=1nin

其中是层权重的方差,用正态分布和初始化,是父层和当前层中的神经元数量。Var(W)ninnout

卷积层是否有类似的经验法则?

我正在努力找出初始化卷积层权重的最佳方法。例如,在权重形状为 的层中(5, 5, 3, 8),因此内核大小为5x5,过滤三个输入通道(RGB 输入)并创建8特征图......是否会被3视为输入神经元的数量?或者更确切地说75 = 5*5*3,因为输入是5x5每个颜色通道的补丁?

我会接受两者,一个澄清问题的具体答案或更“通用”的答案,解释找到正确的权重初始化并最好链接源的一般过程。

2个回答

在这种情况下,神经元的数量应该是5*5*3

我发现它对卷积层特别有用。通常在区间上的均匀分布也有效。 [c/(in+out),c/(in+out)]

它在几乎所有神经网络库中都作为一个选项实现。在这里你可以找到 Keras 实现 Xavier Glorot 初始化的源代码。

我在这里支持埃里克的回答。我也接受这个词的“sqrt”,而不仅仅是那个词。尽管如此,当您将网络深处的 sigmoid 连接到“RelU”输出时......它可能会导致训练停止。这是因为无界的“Relu”输出可以使 sigmoid 的梯度下降到 0 并且没有学习发生。因此,在这种情况下,我的网络有一个“scaleDown”因子,它将按该因子降低初始化偏差。我一直根据经验调整权重,直到学习发生。一种简单的查找方法是在 1 次迭代后立即保存模型并查看 RELU 输出(连接到 sigmoid)。继续调整权重,直到这个 RELU 输出是合理的。然后使用这些权重进行训练。这是一个好的开始。如果它在几次迭代后仍然崩溃,稍微把它们压下来,直到你达到稳定。它只是我使用的一个黑客。它对我的设置有用。所以分享一下我的经验。不同的东西适用于不同的设置。

所以...祝你好运!