Unsupervised Learning: Foundations of Neural Computation