https://singularityfeed.com/prototyping-gradient-descent-in-machine-learning/