https://onlinebme.com/variational-autoencoder/