https://machinelearningmastery.com/stochastic-optimization-for-machine-learning/