Yes you will do the forward twice, but you don’t really have a choice since you want gradients for different versions of your parameters.
The only other way around it I can think about (in either method) is to save the gradients and do all the updates at the end. But even then, you will use gradients computed for different weight values to update the new ones which doesn’t really make sense…
You have to redo the forward with the new weights if you want to have the right gradients.