Diffusion Models From Scratch