在密集层中,应该根据一些经验法则来初始化权重。例如,对于 RELU,权重应该来自正态分布,并且应该重新缩放 2/n,其中 n 是层的输入数量(根据 Andrew Ng的说法)。
卷积层也一样吗?在卷积层中初始化权重(和偏差)的正确方法是什么?
在密集层中,应该根据一些经验法则来初始化权重。例如,对于 RELU,权重应该来自正态分布,并且应该重新缩放 2/n,其中 n 是层的输入数量(根据 Andrew Ng的说法)。
卷积层也一样吗?在卷积层中初始化权重(和偏差)的正确方法是什么?
基于 sigmoid 的网络的一个常见初始化器是Xavier 初始化器(又名Glorot 初始化器),以“理解训练深度前馈神经网络的难度”论文的作者之一 Xavier Glorot 命名。该公式不仅考虑了传入连接的数量,还考虑了输出。作者证明,通过这种初始化,激活分布近似正态,这有助于反向传播中的梯度流动。
对于基于 relu 的网络,更好的初始化器是来自 Kaiming He等人的“Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification”的 He 初始化器,它证明了 relu 激活的相同属性。
在这种情况下,密集层和卷积层并没有什么不同,但重要的是要记住内核权重在输入图像和批次之间共享,因此传入连接的数量取决于几个参数,包括内核大小和步幅,并且可能不会易于手工计算。
在tensorflow中,He初始化是在variance_scaling_initializer()
function中实现的(其实就是更通用的初始化器,但是默认执行He初始化),而Xavier初始化器是逻辑上的xavier_initializer()
。