<p>A common initializer for the sigmoid-based networks is <strong>Xavier initializer</strong> (a.k.a. <strong>Glorot initializer</strong>), named after Xavier Glorot, one of the authors of <a href="http://jmlr.org/proceedings/papers/v9/glorot10a/glorot10a.pdf" rel="nofollow noreferrer">"Understanding the difficulty of training deep feedforward neural networks"</a> paper. The formula takes into account not only the number of incoming connections, but also outcoming as well. The authors prove that with this initialization, activations distribution is approximately normal, which helps gradient flow in the backward pass.</p>

<p>For relu-based networks, a better initializer is <strong>He initializer</strong> from  <a href="https://arxiv.org/pdf/1502.01852v1.pdf" rel="nofollow noreferrer">"Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification"</a> by Kaiming He at al., which prove the same properties for relu activation.</p>

<p>Dense and convolutional layer aren't that different in this case, but it's important to remember that kernel weights are shared across the input image and batch, so the number of incoming connections depends on several parameters, incluing kernel size and striding, and might not be easy to calculate by hand.</p>

<p>In tensorflow, He initialization is implemented in <code>variance_scaling_initializer()</code> function (which is, in fact, a more general initializer, but by default performs He initialization), while Xavier initializer is logically <code>xavier_initializer()</code>.</p>

<p>See also <a href="https://stats.stackexchange.com/q/319323/130598">this discussion on CrossValidated</a>.</p>
Is weight initialization different for dense and convolutional layers?
<p>In a dense layer, one should initialize the weights according to some rule of thumb. For example, with RELU, the weights should come from a normal distribution and should be rescaled by 2/n where n is the number of inputs to the layer (<a href="https://youtu.be/s2coXdufOzE?t=2m21s" rel="nofollow noreferrer">according to Andrew Ng</a>).</p>

<p>Does the same hold for convolutional layers? What is the right way to initialize weights (and biases) in a convolutional layer?</p>