Modelos generativos de Deep Learning

Los modelos generativos son un facilitador clave de la creatividad de las máquinas, ya que les permiten ir más allá de lo que han visto antes y crear algo nuevo.

Ian Goodfellow

El arte de crear: Modelos generativos de deep learning

La inteligencia artificial ha evolucionado rápidamente en los últimos años, y uno de los campos más emocionantes es el de los modelos generativos. Desde crear imágenes hiperrealistas hasta generar textos que parecen escritos por humanos, los modelos generativos de deep learning están transformando industrias enteras. Pero, ¿qué hay detrás de esta magia? En artículo, exploraremos las técnicas más populares, cómo funcionan y cómo empezar a usarlas en tus propios proyectos.

Modelos generativos: Qué son y por qué importan

Los modelos generativos son un tipo de red neuronal diseñada para crear nuevos datos que imitan un conjunto de datos existente. A diferencia de los modelos discriminativos, que predicen etiquetas o categorizan resultados, los modelos generativos producen algo nuevo.

Por ejemplo, si entrenas un modelo generativo con miles de imágenes de paisajes, puede generar paisajes que nunca antes existieron. Esta capacidad los hace especialmente valiosos en campos como el diseño gráfico, la música, el cine y la investigación científica. Y también es la responsable de la proliferación de imáges, videos y audios falsos generados por computadora que inundaron internet.

El papel de los autoencoders: Aprender a reconstruir

Uno de los modelos generativos más simples y efectivos es el autoencoder. Este modelo aprende a comprimir datos en una representación más pequeña (codificador) y luego reconstruirlos (decodificador). Al hacerlo, el autoencoder aprende las características más importantes de los datos. Veamos un pequeño ejemplo en Python de un autoencoder simple para comprimir y reconstruir imágenes en escala de grises.

Ejemplo en Python:

from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model
import numpy as np

input_data = Input(shape=(784,))
codificado = Dense(32, activation='relu')(input_data)
decodificado = Dense(784, activation='sigmoid')(codificado)

autoencoder = Model(input_data, decodificado)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

# Generamos datos de ejemplo y entrenamos el autoenconder.
data = np.random.rand(1000, 784)
autoencoder.fit(data, data, epochs=10, batch_size=256)
Epoch 1/10
4/4 ━━━━━━━━━━━━━━━━━━━━ 1s 9ms/step - loss: 0.6946  
Epoch 2/10
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 9ms/step - loss: 0.6931 
Epoch 3/10
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 9ms/step - loss: 0.6931 
Epoch 4/10
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 9ms/step - loss: 0.6931 
Epoch 5/10
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 9ms/step - loss: 0.6931 
Epoch 6/10
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 9ms/step - loss: 0.6931 
Epoch 7/10
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 8ms/step - loss: 0.6931 
Epoch 8/10
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 8ms/step - loss: 0.6930 
Epoch 9/10
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 10ms/step - loss: 0.6930
Epoch 10/10
4/4 ━━━━━━━━━━━━━━━━━━━━ 0s 9ms/step - loss: 0.6930 

<keras.src.callbacks.history.History at 0x7a4730299370>

GAN: Competencia que genera creatividad

Las Generative Adversarial Networks (GAN) han revolucionado la generación de imágenes. Una GAN consta de dos redes: un generador y un discriminador. El generador crea datos falsos mientras que el discriminador intenta distinguir entre datos reales y falsos. A medida que entrenan, ambos modelos mejoran. Las GANs son extremadamente potentes y se utilizan para crear imágenes fotorrealistas de personas, animales y paisajes. Veamos como podemos implementarlas en Python utilizando TensoFlow.

Ejemplo simple de GAN en Python:

from tensorflow.keras.layers import LeakyReLU
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.models import Sequential

# Construcción del generador
generator = Sequential()
generator.add(Dense(128, input_dim=100))
generator.add(LeakyReLU(alpha=0.01))
generator.add(Dense(784, activation='sigmoid'))

# Construcción del discriminador
discriminator = Sequential()
discriminator.add(Dense(128, input_dim=784))
discriminator.add(LeakyReLU(alpha=0.01))
discriminator.add(Dense(1, activation='sigmoid'))

# Compilamos el discriminador
discriminator.compile(optimizer=Adam(), loss='binary_crossentropy', metrics=['accuracy'])

Transformers: El motor del texto generativo

Los transformers han dominado el campo del procesamiento de lenguaje natural (NLP). Modelos como GPT (Generative Pre-trained Transformer) utilizan una arquitectura basada en atención (attention) para generar texto con coherencia y relevancia prácticamente indestinguible de un texto generado por humanos. Es la magia detrás del popular chatGPT.

Atención: Foco en lo importante

La atención (attention) es el mecanismo clave detrás de transformers. Permite que el modelo se centre en las partes más relevantes de una secuencia, lo que mejora drásticamente no solo la performance en el entrenamiento del modelo sino también la capacidad del modelo para entender contextos complejos.

Este mecanismo ha permitido a los transformers sobresalir en tareas de traducción, resúmenes automáticos y generación de texto.

Veamos ahora un ejemplo sencillo de un transformer utilizando el modelo GPT2.

Ejemplo de generación de texto con transformers:

from transformers import pipeline

generator = pipeline('text-generation', model='gpt2')
result = generator('Once upon a time there was a robot that learned', max_length=50)
print(result)
[{'generated_text': 'Once upon a time there was a robot that learned that there would be something in the desert, and that was that. On that same time, there came a little bit of an odd side of them. They had an older brother who went somewhere and'}]

Como vemos, con solo unas pocas líneas de código, puedemos generar texto convincente que continúa una historia. Obviamente, como estamos trabajando con un modelo más simple como GPT2 no vamos a obtener los sorprendentes resultados que muestran los modelos más populares.

LLMs: Grandes modelos para grandes ideas

Los Large Language Models (LLM) como GPT-4 son una evolución de los transformers. Estos modelos se entrenan con enormes cantidades de datos y pueden realizar tareas de generación de texto, programación, y traducción automática.

Estos modelos están impulsando innovaciones en multiples aréas como: atención al cliente, creación de contenido y automatización de tareas repetitivas.

Retrieval-Augmented Generation (RAG): Potenciando la generación con datos externos

Retrieval-Augmented Generation (RAG) combina la generación de texto con la recuperación de información de bases de datos o documentos. Esto permite que el modelo acceda a información externa, mejorando la precisión y relevancia del texto generado. RAG es especialmente útil en aplicaciones donde la información cambia constantemente o es demasiado extensa para almacenarla en el modelo.

Fine-Tuning: Personalizando modelos generativos

El fine-tuning consiste en ajustar un modelo preentrenado con datos específicos para mejorar su rendimiento en tareas concretas. Esta técnica es común en LLMs y transformers para personalizar sus capacidades a distintos dominios. Al afinar el modelo con datos relevantes, se logran resultados más precisos y adaptados a necesidades particulares.

Multimodalidad: Más allá del texto

Los modelos generativos también están adoptando enfoques multimodales. Esto significa que pueden manejar múltiples tipos de datos como texto, imagen y audio de manera simultánea; lo que incrementa las posibilidades de las cosas que estos modelos pueden hacer.

Conclusion: Futuro de los modelos generativos

A medida que los modelos generativos se vuelven más avanzados, veremos aplicaciones más sorprendentes. La integración de LLMs y transformers en dispositivos personales podría revolucionar la forma en que interactuamos con la tecnología. Estos modelos ya están teniendo un gran impacto hoy en día y se espera que su influencia continue creciendo, impacto en cada vez más áreas de nuestra vida cotidiana.

Saludos!

Este post fue escrito por Raúl e. López Briega utilizando Jupyter notebook. Pueden descargar este notebook o ver su version estática en nbviewer.