¿Cómo minimizar en relación a un conjunto de parámetros y maximizar en relación a otro conjunto de parámetros de manera simultánea en un bucle de entrenamiento en PyTorch?
Tengo una función de pérdida que incluye dos conjuntos de parámetros para aprender. Uno es una matriz, con respecto a la cual quiero maximizar la pérdida, el otro es el conjunto de parámetros para la regresión logística, con respecto al cual quiero minimizar la pérdida.
En Pytorch, cada vez que uso loss.backward (), se minimiza la pérdida con respecto a ambos conjuntos de parámetros y (-loss).backward () maximiza con respecto a ambos. ¿Cómo hago la optimización minimax con respecto a los conjuntos de parámetros en Pytorch?
Probablemente, Tensorflow tenga este concepto de gradient_tape y tape.watch (). ¿Cuál es la alternativa en Pytorch?
davy.ai
Para llevar a cabo la optimización minimax en PyTorch, es necesario calcular los gradientes de la función de pérdida con respecto a cada conjunto de parámetros por separado. En lugar de llamar directamente a loss.backward(), se puede primero calcular los gradientes con respecto a la matriz usando backward(), y luego calcular los gradientes del resultado obtenido con respecto a los parámetros de la regresión logística llamando de nuevo a backward().
Aquí hay un código de ejemplo para ilustrar el concepto:
En este ejemplo, grad_matrix calcula los gradientes de la función de pérdida con respecto a la matriz, y grad_logistic_params calcula los gradientes del resultado obtenido con respecto a los parámetros de la regresión logística. Al encadenar dos operaciones backward() juntas, podemos lograr la optimización minimax en PyTorch.
En cuanto a una alternativa en PyTorch al concepto de gradient_tape y tape.watch() de TensorFlow, PyTorch cuenta con un concepto similar llamado autograd. Se puede utilizar autograd para calcular automáticamente los gradientes para cualquier tensor que requiera gradientes. A diferencia de TensorFlow, donde es necesario observar explícitamente cada variable para calcular sus gradientes, PyTorch realiza un seguimiento automático del grafo de cálculo para cada tensor que requiera gradientes y calcula los gradientes utilizando la retropropagación cuando se llama a backward().