w = torch.randn(1, requires_grad=True) b = torch.zeros(1, requires_grad=True) lr = 0.1 for epoch in range(200): y_hat = w * x + b # 1. forward pass loss = ((y_hat - y) ** 2).mean() # 2. loss (MSE) loss.backward() # 3. gradients into w.grad, b.grad with torch.no_grad(): # 4. update w -= lr * w.grad b -= lr * b.grad w.grad.zero_() # 5. reset gradients b.grad.zero_() print(f"y = {w.item():.4f}x + {b.item():.4f}")