El documento sobre GAN dice que el discriminador usa el siguiente gradiente para entrenar:
Los valores se muestrean, se pasan a través del generador para generar muestras de datos, y luego el discriminador se retroproyecta utilizando las muestras de datos generadas. Una vez que el generador genera los datos, ya no juega ningún papel en el entrenamiento del discriminador. En otras palabras, el generador se puede eliminar completamente de la métrica haciendo que genere muestras de datos y luego solo trabajando con las muestras.
Sin embargo, estoy un poco más confundido acerca de cómo se entrena el generador. Utiliza el siguiente gradiente:
En este caso, el discriminador es parte de la métrica. No se puede eliminar como en el caso anterior. Cosas como mínimos cuadrados o probabilidad de registro en modelos discriminativos regulares se pueden diferenciar fácilmente porque tienen una definición agradable y cercana. Sin embargo, estoy un poco confundido acerca de cómo se propaga cuando la métrica depende de otra red neuronal. ¿Esencialmente conecta las salidas del generador a las entradas del discriminador y luego trata todo como una red gigante donde los pesos en la parte del discriminador son constantes?
D_loss
yG_loss
? ¿Maximizando sobre qué espacio? IIUC,D_real
yD_fake
cada uno es un lote, ¿entonces estamos maximizando sobre el lote?En breve: Sí. (Busqué algunas de las fuentes de la GAN para verificar esto)
También hay mucho más en el entrenamiento de GAN como: deberíamos actualizar D y G cada vez o D en iteraciones impares y G en pares, y mucho más. También hay un muy buen artículo sobre este tema:
https://arxiv.org/abs/1606.03498
fuente
Recientemente he subido una colección de varios modelos de GAN en el repositorio de Github. Está basado en torch7 y es muy fácil de ejecutar. El código es lo suficientemente simple como para comprenderlo con resultados experimentales. Espero que esto ayude
https://github.com/nashory/gans-collection.torch
fuente