Mon. Oct 3rd, 2022

The Red Vineyard de Vincent van Gogh (Fuente) Según el New York Times, el 90% de la energía utilizada por los centros de datos se desperdicia, esto se debe a que la mayoría de los datos recopilados por las empresas nunca se analizan ni se utilizan de ninguna forma. se llama más específicamente Datos oscuros.

Los datos oscuros son datos que se adquieren a través de varias operaciones de redes informáticas, pero que no se utilizan de ninguna manera para obtener información o para la toma de decisiones. La capacidad de una organización para recopilar datos puede superar el rendimiento al que puede analizar los datos. En algunos casos, es posible que la organización ni siquiera sepa que se están recopilando los datos. IBM estima que aproximadamente el 90 por ciento de los datos generados por sensores y conversiones de analógico a digital nunca se utilizan. — Definición de datos oscuros en Wikipedia

Desde una perspectiva de aprendizaje automático, una de las razones clave por las que estos datos no son útiles para obtener información es la falta de etiquetas. Esto hace que los algoritmos de aprendizaje no supervisados ​​sean muy atractivos para desbloquear el potencial de estos datos. En 2014, Ian Goodfellow et al. propuso un nuevo enfoque para la estimación de modelos generativos a través de un proceso contradictorio. Involucró entrenar dos modelos separados al mismo tiempo, un modelo Generador que intenta modelar la distribución de datos y un Discriminador que intenta clasificar la entrada como datos de entrenamiento o datos falsos por generador. El documento establece un hito muy importante en la panorama moderno de aprendizaje automático, abriendo nuevas vías para el aprendizaje no supervisado. El artículo Deep Convolutional GAN ​​(Radford et al. 2015) continuó construyendo sobre esta idea al aplicar los principios de las redes convolucionales para producir imágenes 2D con éxito. A través de este artículo, intento explicar los componentes clave del artículo e implementarlos usando PyTorch.

¿Qué tiene de extraordinario GAN?

Para comprender la importancia de GAN o DCGAN, veamos qué los hace tan populares. Como un gran porcentaje de los datos del mundo real no están etiquetados, la naturaleza de aprendizaje no supervisado de los GAN los hace ideales para tales casos de uso. El generador y el discriminador actúan como una característica muy buena. extractores para casos de uso con datos etiquetados limitados o generar datos adicionales para mejorar el entrenamiento del modelo secundario, ya que pueden generar muestras falsas en lugar de usar aumentos. Las GAN brindan una alternativa a las técnicas de máxima verosimilitud. Su proceso de aprendizaje contradictorio y su función de costo no heurística los hacen muy atractivos para el aprendizaje por refuerzo. La investigación en torno a GAN ha sido muy atractiva y los resultados han sido una fuente de debate generalizado sobre el impacto de ML/DL. Por ejemplo, Deepfake, una de las aplicaciones de GAN que puede superponer los rostros de las personas en una persona objetivo, ha sido de naturaleza muy controvertida, ya que tiene el potencial de usarse con fines nefastos. El último pero más importante punto es que es tan genial para trabajar, y toda la nueva investigación en el campo ha sido fascinante.La arquitectura de Deep Convolutional GAN ​​(Imagen del autor) Como discutimos anteriormente, trabajaremos a través de DCGAN que intenta implementar las ideas centrales de GAN para una red convolucional que puede generar imágenes de apariencia realista. DCGAN se compone de dos modelos, un Generador (G) que intenta modelar un vector de ruido aleatorio como entrada e intenta aprender la distribución de datos para generar muestras falsas, y un Discriminador (D) que toma datos de entrenamiento (muestras reales) y datos generados (muestras falsas) e intenta para clasificarlos, esta lucha entre los dos modelos es lo que llamamos proceso de formación adversarial donde la pérdida de uno es el beneficio del otro.

Generador

Diagrama del generador (Imagen del autor) El generador es el que más nos interesa, ya que es el que genera imágenes falsas para tratar de engañar al discriminador. Ahora veamos la arquitectura del generador con más detalle.Capa lineal: El vector de ruido se introduce en una capa totalmente conectada cuya salida se transforma en un tensor 4D.Capa de normalización por lotes: Estabiliza el aprendizaje mediante la normalización de las entradas a la media cero y la varianza de la unidad, lo que evita problemas de entrenamiento como la desaparición o explosión del gradiente y permite que el gradiente fluya a través de la red.Arriba capa de muestra: Según mi interpretación del documento, menciona el uso de muestreo ascendente y luego la aplicación de una capa convolucional simple en lugar de usar una capa de transposición convolucional para aumentar la muestra. Pero he visto a algunas personas usar la transposición convolucional, así que toma tu propia decisión.Capa convolucional 2D: A medida que muestreamos la matriz, la pasamos a través de una capa convolucional con un paso de 1 y el mismo relleno para permitirle aprender de sus datos muestreados.Capa ReLU: Paper menciona el uso de RelU en lugar de LeakyReLU para el generador, ya que permitió que el modelo se saturara rápidamente y cubriera el espacio de color de la distribución de entrenamiento.Activación TanH: Paper sugiere que usemos la función de activación de TanH para la salida del generador, pero no entra en detalles sobre por qué, si tuviéramos que adivinar sería porque la naturaleza de TanH permite que el modelo converja más rápido. Las capas 2 a 5 forman el generador central bloque que se puede repetir N veces para obtener la forma de imagen de salida deseada. Así es como podemos implementarlo en PyTorch.Generador implementado con PyTorch. (Código por Autor)

Discriminado

Diagrama del discriminador (Imagen del autor) Ahora, el discriminador es más bien como una red de clasificación de imágenes con algunos ajustes menores, por ejemplo, no utiliza ninguna capa de agrupación para reducir la resolución, sino una capa convolucional de paso que le permite aprender su propia reducción de resolución. Echemos un vistazo en la arquitectura del discriminador con más detalle.Capa de concatenación: La capa combina imágenes falsas e imágenes reales en un solo lote para alimentar al discriminador, pero esto también se puede hacer por separado para obtener solo la pérdida del generador.Capa convolucional: Aquí usamos una convolución de zancada que nos permite reducir la muestra de la imagen y aprender filtros en un solo paso.LeakyReLU: Como se menciona en el documento, LeakyReLU resultó útil para los discriminadores en comparación con la función de máximo rendimiento del documento GAN original, ya que permite un entrenamiento más fácil.Abandonar: Usado solo para entrenamiento, ayuda a evitar el sobreajuste. El modelo tiene una tendencia a memorizar datos de imágenes reales y el entrenamiento podría colapsar en ese punto ya que el generador ya no puede engañar al discriminador.Normalización de lotes: El documento menciona que aplica la normalización por lotes al final de cada bloque discriminador, excepto el primero. La razón mencionada por el documento es que la aplicación de la normalización por lotes sobre cada capa provoca la oscilación de la muestra y la inestabilidad del modelo.Lineal: Una capa completamente conectada que toma un vector reformado de la capa de normalización por lotes 2D aplicada.Activación sigmoide: Como estamos lidiando con la clasificación binaria para la salida del discriminador, hacemos una elección lógica de capa sigmoidea. Las capas 2 a 5 forman el bloque discriminador central que se puede repetir N veces para hacer que el modelo sea más complejo según los datos de entrenamiento. Así es como podemos implementarlo en PyTorch.Discriminador implementado con PyTorch (Código por autor) Entrenamos Discriminador (D) para maximizar la probabilidad de asignar la etiqueta correcta tanto a los ejemplos de entrenamiento como a las muestras del Generador (G), lo que se puede hacer minimizando log(D(x)). Simultáneamente entrenamos a G para minimizar log(1 − D(G(z))) donde z es el vector de ruido. En otras palabras, D y G juegan el siguiente juego minimax de dos jugadores con función de valor V (G, D):Función de costo adversario (fuente)

En la práctica, la ecuación anterior puede no proporcionar suficiente gradiente para que G aprenda bien. Al principio del aprendizaje, cuando G es pobre, D puede rechazar muestras con alta confianza porque son claramente diferentes de los datos de entrenamiento. En este caso, log(1 − D(G(z))) se satura. En lugar de entrenar a G para minimizar log(1 − D(G(z))) podemos entrenar a G para maximizar logD(G(z)). Esta función objetivo da como resultado el mismo punto fijo de la dinámica de G y D, pero proporciona gradientes mucho más fuertes al principio del aprendizaje. – Fuente

Como estamos entrenando dos modelos simultáneamente, podría ser complicado y las GAN son notoriamente difíciles de entrenar, uno de los problemas conocidos que discutiremos más adelante se llama colapso de modo. Paper sugiere usar un optimizador Adam con una tasa de aprendizaje de 0.0002, un aprendizaje tan bajo rate sugiere que las GAN tienden a divergir muy rápidamente. También utiliza el impulso de primer orden y segundo orden con valores de 0,5 y 0,999 para acelerar aún más el entrenamiento. El modelo se inicializa con una distribución de peso normal con media cero y desviación estándar de 0,02. Así es como podemos implementar un ciclo de entrenamiento para esto.Bucle de entrenamiento para DCGAN (Código por autor)

Modo colapsar

Idealmente, nos gustaría que nuestro generador produzca una amplia variedad de resultados, por ejemplo, si genera una cara, debería generar una nueva cara para cada entrada aleatoria. Pero si el generador produce una salida plausible lo suficientemente buena como para engañar al discriminador, podría seguir produciendo la misma salida una y otra vez. Eventualmente, el generador se sobreoptimiza para un solo discriminador y rota entre un pequeño conjunto de salidas, tal condición se denomina colapso de modo. .Los siguientes enfoques se pueden utilizar para remediar la condición.Pérdida de Wasserstein: La pérdida de Wasserstein alivia el colapso del modo al permitirle entrenar el discriminador de manera óptima sin preocuparse por la desaparición de los gradientes. Si el discriminador no se atasca en los mínimos locales, aprende a rechazar las salidas en las que se estabiliza el generador. Entonces, el generador tiene que probar algo nuevo.GAN desenrolladas: Las GAN desenrolladas utilizan una función de pérdida del generador que incorpora no solo las clasificaciones del discriminador actual, sino también las salidas de futuras versiones del discriminador. Por lo tanto, el generador no puede optimizar en exceso para un solo discriminador.Transferencia de estilo: Las aplicaciones de modificación facial están de moda hoy en día, el envejecimiento facial, la cara llorando y la superposición de caras de celebridades son solo algunas de las aplicaciones que ya son muy populares en las redes sociales.Videojuegos: La generación de texturas para objetos 3D y la generación de escenas usando imágenes son solo algunas de las aplicaciones que ayudan a la industria de los videojuegos a desarrollar juegos más grandes con mayor rapidez.Industria del cine: CGI ha sido una gran parte del cine modelo, con el potencial que trae GAN, los cineastas ahora pueden soñar más grande que nunca.Generación de voz: Algunas empresas están utilizando GAN para mejorar las aplicaciones de texto a voz usándolas para generar voces más realistas.Restauración de imagen: El uso de GAN para eliminar el ruido y restaurar imágenes corruptas, colorear imágenes históricas y mejorar videos antiguos mediante la producción de fotogramas faltantes para mejorar su velocidad de fotogramas. GAN junto con DCGAN es un documento histórico que ha abierto nuevas vías en lo que respecta al aprendizaje no supervisado. El enfoque de entrenamiento contradictorio proporciona una nueva forma de entrenar modelos que imitan de cerca los procesos de aprendizaje del mundo real. Sería muy interesante ver cómo evoluciona esta área. Espero que hayas disfrutado el artículo.

Puedes encontrar la implementación completa en mi GitHubPuedes seguirme en LinkedinPuedes leer mis otros artículos en Medium