https://www.pycodemates.com/2023/02/backpropagation-and-gradient-descent-simplified.html