VQ-VAEs: Neural Discrete Representation Learning | Paper + PyTorch Code Explained