https://medium.com/@monocosmo77/understanding-gradient-based-optimization-artificial-intelligence-be9e41146bdc