1. A method of operating a neural network having a plurality of neural network inputs, a plurality of neurons for inputting a plurality of inputs and generating at least one output, said method comprising the steps of: (a) distributing each of said neural network inputs to each of said neuron inputs; (b) each neuron applying a gating function to each of said neural network inputs to produce corresponding gated inputs; (c) each neuron multiplying each of said gated inputs together to generate a product; (d) each neuron multiplying said product by a weight value to generate a neuron output for each neuron; and (e) summing the outputs of said neurons to generate said at least one network output.