Вывод уравнений для обратного распространения градиентного штрафа

#deep-learning #neural-network #gradient-descent #backpropagation #generative-adversarial-network

Вопрос:

Проход вперед выглядит так:

Шаг 1. Создайте пакет изображений mix:

 X' = ε * real_image   ( 1 - ε) * generated_image
 

Шаг 2:
Передайте X’ через сеть дискриминаторов ( сеть FFN) и рассчитайте потери.

Шаг 3: Вычислите градиенты w.r.t для параметров сети дискриминаторов ( для этого я могу использовать функции библиотеки)

Шаг 4: Вычислите градиенты w.r.t, чтобы X' amp; ε

Это то, что я никак не мог понять. Учитывая градиенты w.r.t для параметров дискриминатора FFN, как вычислить градиенты w.r.t X' amp; ε ?

Pytorch делает это очень легко, так как у него есть автоград. Эквивалентный код пирча:

         epsilon_shape = [real_data.shape[0]]   [1]*(real_data.dim() - 1)
        epsilon = torch.rand(epsilon_shape)
        epsilon = epsilon.to(fake_data.device, fake_data.dtype)
        real_data = real_data.to(fake_data.dtype)
        x_hat = epsilon * real_data   (1-epsilon) * fake_data.detach()
        x_hat.requires_grad = True
        logits = self.discriminator(x_hat, condition, landmarks)
        logits = logits.sum()
        grad = torch.autograd.grad(
            outputs=logits,
            inputs=x_hat,
            grad_outputs=torch.ones(logits.shape).to(fake_data.dtype).to(fake_data.device),
            create_graph=True
        )[0]