密集层和卷积层的权重初始化是否不同?

Is weight initialization different for dense and convolutional layers?

在密集层中,应该根据一些经验法则来初始化权重。例如,对于 RELU,权重应该来自正态分布并且应该按 2/n 重新缩放,其中 n 是层的输入数量 (according to Andrew Ng).

卷积层也是如此吗?在卷积层中初始化权重(和偏差)的正确方法是什么?

基于 sigmoid 网络的常用初始化器是 Xavier 初始化器(a.k.a。Glorot 初始化器),以Xavier Glorot,"Understanding the difficulty of training deep feedforward neural networks" 论文的作者之一。该公式不仅考虑了传入连接的数量,还考虑了输出。作者证明,通过这种初始化,激活分布近似正态分布,这有助于反向传播中的梯度流动。

对于基于 relu 的网络,更好的初始化器是 He 初始化器 来自 Kaiming He 等人的 "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification",它证明了 relu 激活的相同属性。

在这种情况下,密集层和卷积层没有太大区别,但重要的是要记住内核权重在输入图像和批处理之间共享,因此传入连接的数量取决于几个参数,包括内核大小和大步走,手算可能不太容易。

在tensorflow中,He初始化是在variance_scaling_initializer()函数中实现的(其实是一个更通用的初始化器,只是默认进行He初始化),而Xavier初始化器在逻辑上是xavier_initializer()

另见 this discussion on CrossValidated