x, y = [1.,2.,3.], [2.,4.,6.] weight = 0.0 losses = [] for _ in range(60): residuals = [weight*a-b for a,b in zip(x,y,strict=True)] losses.append(sum(r*r for r in residuals)/len(x)) gradient = 2*sum(r*a for r,a in zip(residuals,x,strict=True))/len(x) weight -= 0.05*gradient print(f"weight: {weight:.3f}") print("loss decreased:", losses[-1] < losses[0])