We’ve had this discussion a while ago and for investigation of this effect I created a gist 291 showing how optim.Adam updates the parameters even without a gradient once the running estimates were set.
Could you compare your code to the example and make sure no momentum etc. is set?