Gradient Descent From Scratch In Python