What are some good ways to introduce variation between instances of a neural network?
I've heard about training each instance on different data, with the same data in a different order, through bagging, by randomising each instance's initial weights, or by altering the structure of the network (e.g. changing the activation functions or the number of nodes in each of the hidden layers). Are there any other common methods that I've missed and when would one use one type of method over another?
Context:
I'm writing a classification system built on a neural network. I've trained it as much as I can on the training data that I have, and am now trying to improve its performance beyond that. I've tested a few different ways to prevent over-fitting and ways to improve reliability and performance, and now I'd like to experiment with ensembling. For this I need multiple network instances with slight variations compared to each other, hence my question.