# Learning rate controls how big steps we take during optimization # Too small: slow convergence, too large: might overshoot minimum learning_rates = [0.1, 1.0, 10.0] plt.figure(figsize=(12, 4)) for i, lr in enumerate(learning_rates): plt.subplot(1, 3, i+1) # Train with this learning rate _, _, _, _, losses = train_network(X, y, epochs=500, learning_rate=lr) plt.plot(losses) plt.title(f'Learning Rate = {lr}') plt.xlabel('Epoch') plt.ylabel('Loss') plt.yscale('log') plt.grid(True, alpha=0.3) plt.tight_layout() plt.show()