How does an autoencoder work?