This class offers an introduction to the topic of unsupervised learning. It first contrasts the problem of unsupervised learning to the problem of supervised learning. It presents some conceptual tools (representations, structure) to formalize and reason about the unsupervised learning problem. These concepts are then used to discuss several prototypical unsupervised learning tasks, from clustering to generative modelling. Finally three paradigmatic unsupervised learning algorithms (PCA, k-means, and autoencoders) are analyzed and evaluated.