1. A method for training an artificial neural network, said method comprising: (i) initialising the neural network by selecting an output of the neural network to be trained and connecting an output neuron of the neural network to input neuron(s) in an input layer of the neural network for the selected output; (ii) preparing a data set to be learnt by the neural network; and (iii) applying the prepared data set to the neural network to be learnt by applying an input vector of the prepared data set to a first hidden layer of the neural network, or an output layer of the neural network if the neural network has no hidden layer(s), and determining whether at least one neuron for the selected output in each layer of the neural network can learn to produce the associated output for the input vector, wherein: if at least one neuron for the selected output in each layer of the neural network can learn to produce the associated output for the input vector, and if there are more input vectors of the prepared data set to learn, repeat (iii) for the next input vector, else repeat (i) to (iii) for the next output of the neural network if there are more outputs to be trained; if no neuron in a hidden layer for the selected output of the neural network can learn to produce the associated output for the input vector, a new neuron is added to that layer to learn the associated output which could not be learnt by any other neurons in that layer for the selected output, and if there are more input vectors of the data set to learn, repeat (iii) for the next input vector, else repeat (i) to (iii) for the next output of the neural network if there are more outputs to be trained; if the output neuron for the selected output of the neural network cannot learn to produce the associated output for the input vector, that output neuron becomes a neuron of a hidden layer of the neural network, a new neuron is added to this hidden layer to learn the associated output which could not be learnt by the output neuron, and a new output neuron is added to the neural network for the selected output, and if there are more input vectors of the data set to learn, repeat (iii) for the next input vector, else repeat (i) to (iii) for the next output of the neural network if there are more outputs to be trained.