https://medium.com/@SaltDataLabs/mastering-machine-learning-the-differences-between-batch-and-stochastic-gradient-descent-7ac4ece3d5af