Neural Smithing (Supervised Learning in Feedforward Artificial Neural Networks)