You win the “exceptionally bad luck in picking a small example” award .
Your parameters do change, just your loss does not.
So what happens is that the gradient of (x-1)**2 is 2*(x-1) and with an SGD lr or 1, you get an oscillation between your initial value and 2-x which both happen to have the same loss value. With an lr of 0.1 or anything else below 1, your loss decreases as you would expect.
If you allow two unsolicited comments:

Many people claim that using std is a bad habit. Given that many people will read your code on the forums, I’d advise against doing this.
Just 10 iterations would be fully sufficient so see the loss doesn’t change. 


I will admit that I spent quite a while looking whether you somewhere made the parameter a non-leaf tensor by accident and only when I printed the gradient (to see if there was any at all) I noticed what happens.
Best regards
Thomas