Theory of Neural Computation