Weights initialization in Neural Network
Three layers with one hidden layer? This sounds wrong. You have 2 layers, input -> hides -> output, that's only 2 layers, with two sets of weights.

A single layer that gets initialized with only 0 will not converge, because the derivatives will be strictly identical (this rule also applies for any such last layer in a network, the layer gets basically useless). Here, there is a second layer after that saves the day, but it's still a bad practice in general.