Principles of autoencoders