https://medium.com/@monocosmo77/how-stochastic-gradient-descent-works-part1-machine-learning-70d40236e9a7