Я пытаюсь реализовать следующий алгоритм в этой книге, раздел 13.5 , в pytorch.
Это будетпотребуются две отдельные нейронные сети (в этом вопросе model1
и model2
).Потеря одного зависит только от его собственного выхода [через дельта] (параметризованного с помощью w), другого (параметризованного с помощью theta), зависящего как от его собственного выхода [через ln (pi)], так и от выхода другого [снова, черезdelta].
Я хочу обновить каждую по отдельности
Предположим, что следующие модели реализуют nn.Module
:
model1 = Mynet1()
model2 = Mynet2()
val1 = model1(input1)
val2 = model2(input2)
self.optimizer1 = optim.Adam(model1.parameters(), lr1)
self.optimizer2 = optim.Adam(model2.parameters(), lr2)
loss1 = f(val1)
loss2 = f(val1, val2)#THIS IS THE INTERESTING PART
optim1.zero_grad()
loss1.backward
optim1.step()
optim2.zero_grad()
loss2.backward
optim2.step()
Я понимаю, что применениев обратном направлении при потере 1 и последующем шаге в оптимизаторе обновятся параметры model1
.
Мой вопрос: что происходит при активации этого параметра в loss2
, model2
, optimizer2
, где потеря2 зависит от выходов model1
и model2
?
Как сделать так, чтобы обновление loss2
не влияло на параметры model1
?