Optimizer step function with torch.no_grad() decorator

if you wouldnt call no_grad() the update operation would require gradients and you probably dont want to add your weight update in the computational graph.