Unsupervised learning : foundations of neural computation