RMSprop adapts the step size per parameter: it divides each gradient by a running root-mean-square of its recent magnitudes, so parameters with large, noisy gradients take smaller steps.
Implement rmsprop_step(w, g, s, lr=0.01, rho=0.9, eps=1e-8) returning (new_w, new_s) without modifying the inputs, and minimize_rmsprop(grad_fn, w0, steps, lr=0.01), which starts from s = 0 and returns the final w.