在密集层中,应该根据一些经验法则来初始化权重。例如,使用RELU时,权重应来自正态分布,并应按2/n进行重新缩放,其中n是该层输入的数量(根据Andrew Ng的说法)。
卷积层是否也遵循同样的规则?在卷积层中,初始化权重(和偏置)的正确方法是什么?
回答:
对于基于sigmoid的神经网络,常用的初始化器是Xavier初始化器(又称Glorot初始化器),以Xavier Glorot命名,他是《理解深度前馈神经网络训练的难度》论文的作者之一。该公式不仅考虑了输入连接的数量,还考虑了输出连接。作者证明,通过这种初始化,激活分布近似正态分布,这有助于反向传播中的梯度流动。
对于基于relu的神经网络,更好的初始化器是来自Kaiming He等人的《深入研究整流器:在ImageNet分类上超越人类水平表现》的He初始化器,该初始化器证明了relu激活的相同属性。
在这种情况下,密集层和卷积层并没有太大区别,但重要的是要记住,卷积核的权重在输入图像和批次中是共享的,因此输入连接的数量取决于多个参数,包括卷积核大小和步长,计算起来可能并不容易。
在TensorFlow中,He初始化在variance_scaling_initializer()
函数中实现(实际上,这是一个更通用的初始化器,但默认情况下执行He初始化),而Xavier初始化器则是xavier_initializer()
。