В варианте 1 каждый раз, когда вы вызываете .backward()
, вычисляются градиенты. После 3 вызовов, когда вы выполняете optimizer.step
, градиенты добавляются, а затем веса обновляются соответственно.
В варианте 2 вы умножаете потери на константу, поэтому градиенты будут умножаться и на эту константу.
Итак, добавив значение градиента 3 раза и умножив значение градиента на 3 приведет к тому же обновлению параметров.
Обратите внимание, я предполагаю, что нет потерь из-за точности с плавающей запятой (как указано в комментариях).