Gradient Descent From Scratch