Aplicación de modelos generativos en la identificación de huellas biomédicas

INTRODUCCIÓN

El reconocimiento biométrico, una tecnología que identifica individuos mediante características biológicas, está en auge. Los modelos generativos, capaces de aprender y replicar datos, juegan un papel esencial en este campo. Estas técnicas avanzadas mejoran la precisión y seguridad de los sistemas biométricos al crear representaciones precisas de los rasgos biológicos. [1]

En este contexto, exploremos cómo los modelos generativos aumentan la eficacia y fiabilidad de los sistemas biométricos en diversas aplicaciones. A continuación, se presentan algunos de los objetivos comunes [2]:

Mejora de la precisión: Los modelos generativos capturan mejor las variaciones y características sutiles de los rasgos biométricos, lo que resulta en una identificación más confiable de individuos. Esto se traduce en una mayor precisión en el reconocimiento biométrico.

Incremento de la seguridad: Al generar representaciones biométricas más robustas y difíciles de falsificar, los modelos generativos fortalecen la seguridad de los sistemas biométricos. Esto reduce los riesgos de suplantación de identidad o manipulación fraudulenta.

Reducción de la dependencia de datos masivos: Los modelos generativos pueden aprender las distribuciones subyacentes de los datos biométricos y generar nuevas muestras. Esto disminuye la necesidad de grandes conjuntos de datos de entrenamiento, haciendo que los sistemas biométricos sean más eficientes y rentables.

Mejora de la privacidad: Estos modelos pueden generar representaciones biométricas que preservan la privacidad del individuo. Esto mitiga preocupaciones relacionadas con la privacidad y el uso indebido de datos biométricos, al mismo tiempo que permite un reconocimiento efectivo y seguro.

Estado del arte

Para enfrentarnos a este problema, hemos decidido trabajar con las GAN y para ello primero debemos entender en qué consiste.

Las Redes Generativas Antagónicas (GANs, por sus siglas en inglés) son un tipo de modelo de aprendizaje automático introducido por Ian J. Goodfellow en 2014. Las GANs consisten en dos redes neuronales que compiten entre sí: una red generadora y una red discriminadora.

  1. Generador: Esta red toma una entrada de ruido aleatorio y genera datos que intentan imitar el conjunto de datos reales. Su objetivo es producir datos que sean indistinguibles de los datos reales.
  2. Discriminador: Esta red recibe tanto datos reales como los datos generados por la red generadora, y su tarea es distinguir entre ambos. Su objetivo es identificar correctamente si una entrada es real o generada. [3]

Estas se han usado con diferentes objetivos, incluyendo la generación de imágenes, videos, diseño de productos, aplicaciones médicas e incluso arte.

En nuestro caso práctico, nuestro objetivo es entrenar las GANs pasándole imágenes reales e imágenes corruptas de huellas dactilares para que aprenda a reconstruir la imágen corrupta y que se parezca lo máximo a la real. [4]

Las Redes Generativas Adversarias (GAN) han revolucionado la generación de imágenes, y su evolución ha dado lugar a técnicas cada vez más sofisticadas. Aquí podemos encontrar algunas de ellas.

Progresive Growing GAN (PGGAN): Entrena el modelo en etapas, comenzando con imágenes de baja resolución y aumentando gradualmente la resolución para mejorar la estabilidad y la calidad de las imágenes generadas. [5]

StyleGAN y StyleGAN2: Permiten controlar el estilo de las imágenes generadas y ofrecen un mayor grado de disentanglement (separación de características). [6]

CycleGAN: Permite realizar traducciones de imagen a imagen sin necesidad de pares de imágenes emparejadas. [7]

Self-Attention GAN (SAGAN): Incorpora mecanismos de autoatención para mejorar la calidad de las imágenes generadas y capturar dependencias de largo alcance. [8]

Estas técnicas han permitido avances significativos en la calidad y diversidad de las representaciones generadas, y su impacto se ha sentido en múltiples campos. Por ejemplo, en la medicina, las GANs se utilizan para generar imágenes sintéticas que pueden mejorar los diagnósticos o entrenar modelos sin necesidad de grandes conjuntos de datos reales.

A pesar de investigar y posteriormente conocer sobre algunos avances más recientes y sofisticados en las GANs. Hemos decidido centrarnos en la arquitectura original de las GANs para nuestro proyecto. Creemos que comenzar con el modelo básico nos permitirá una comprensión más profunda de los fundamentos y principios subyacentes de estas. 

Esta elección también se aliena mejor con nuestro objetivo de reconstruir imágenes corruptas de huellas dactilares, proporcionando una base sólida y bien estudiada sobre la cual construir nuestras futuras investigaciones y posibles mejoras. 

Para comprobar los resultados hemos usado las imágenes de entrenamiento.

En estas figuras podemos ver como si que hay imágenes que se reconstruyen bien (fila 1) pues no contienen mucho ruido y la reconstrucción se asemeja a la imagen real.

Sin embargo, tal y como hemos comentado antes, las imágenes que contienen ruido en partes clave de la huella son complicadas de reconstruir y los resultados son huellas que contienen fallos importantes y que impedirían un posible reconocimiento.

Después de entrenarlas, lo que haremos será generar nuestras propias imágenes con una GAN (todavía por hacer) para que ‘demuestre’ lo aprendido y que veamos cómo de bien reconstruye nuestras imágenes generadas. 

Desarrollo

Nosotros nos vamos a centrar en un único patrón biométrico que consideramos bastante importante, las huellas dactilares.

Hemos analizado diversos notebooks que hemos encontrado y que nos han parecido interesantes.

En el primero( https://github.com/denkovarik/Fingerprint) se utilizan GANs

para reconstruir imágenes de baja calidad de huellas dactilares. Podemos ver que los resultados no llegan a ser muy satisfactorios, sobretodo en aquellas imágenes en las que no están bien definidas las zonas centrales, que presentan patrones más complejos.

En el segundo (https://www.kaggle.com/code/dijorajsenroy/fingerprint-feature-extraction-for-biometrics) se explica y analiza cuales son las características que se extraen de las huellas dactilares para que estas puedan ser reconocidas y diferenciadas.

Preparación de Datos:

  • Se recopilan imágenes de huellas dactilares, tanto de alta calidad como de baja calidad o corruptas.
  • Las imágenes se preprocesan para limpiarlas, eliminar ruido y normalizarlas.
  • Se pueden aplicar técnicas de aumento de datos para crear variaciones artificiales de las huellas existentes, enriqueciendo así el conjunto de datos.
  • Las imágenes se dividen en conjuntos de entrenamiento y validación.

Generación de huellas:

Para generar las huellas sobre las que vamos a trabajar, vamos a utilizar el programa Anguli: https://dsl.cds.iisc.ac.in/projects/Anguli/ que es un proyecto desarrollado por el Instituto Indio de Ciencias que permite generar huellas dactilares sintéticas en C++ a partir de datasets privados. Este problema es capaz de generar también las huellas con distintos tipos de ruidos.

En nuestro caso vamos a generar 100 huellas con sus respectivas correspondencias con ruido. Para el ruido hemos definido su nivel entre 0 y 10 y para los scratches también entre 0-10.

Los parámetros que definimos son:

Y nos genera una serie de carpetas con las huellas.

Diseño de la Arquitectura GAN:

  • Se define la estructura del generador, que tomará como entrada una huella dactilar de baja calidad y generará una versión mejorada.
  • Se define la estructura del discriminador, que recibirá tanto huellas dactilares reales como generadas y aprenderá a distinguir entre ellas.

Entrenamiento del Modelo GAN:

  • El generador y el discriminador se entrenan de forma iterativa y competitiva.
  • El generador intenta crear huellas dactilares falsas cada vez más realistas para engañar al discriminador.
  • El discriminador se esfuerza por mejorar su capacidad para distinguir entre huellas reales y falsas.
  • Este proceso continúa hasta que el generador produce huellas dactilares que son prácticamente indistinguibles de las reales.

Evaluación y Validación:

  • Se evalúa el rendimiento del modelo utilizando métricas como la precisión, el recall y el F1-score en un conjunto de datos de prueba independiente.
  • Se realizan pruebas de robustez para evaluar cómo el modelo maneja huellas dactilares borrosas, incompletas o con ruido.
  • La gráfica muestra la evolución de las funciones de pérdida del generador y el discriminador durante el entrenamiento de una Red Generativa Antagónica (GAN). 
  • El entrenamiento parece haber sido exitoso en general, ya que ambos modelos han alcanzado un equilibrio y el generador produce muestras realistas. Sin embargo, el posible sobreajuste del generador es algo que se debería investigar más a fondo.

Extracción de las características de las huellas:

Después de generar las imágenes de huellas, utilizamos técnicas avanzadas de procesamiento de imágenes para extraer características distintivas de las huellas. 

Sabemos que no es un modelo generativo pero nos servirá para hacernos una idea de cómo se extraen.

Mostramos imágenes aleatorias a partir de datos:

Transformamos las imágenes implementando un suavizado a las imágenes y que detecte bordes.

Además, realizamos la umbralización de huellas dactilares utilizando el valor medio de intensidad de pixeles como umbral.

Y extrae características como terminación, bifurcación y minucias de las huellas dactilares.

Aquí es fundamental la extracción precisa de estas características para la identificación biométrica, ya que permite comparar y verificar identidades de manera eficaz.

Combinando ambos códigos se podrían cuantificar la diferencia de las características entre las huellas reconstruidas y las reales y asi podriamos ver la eficacia del modelo de generación.

Consideraciones Éticas y de Privacidad:

  • Se garantiza que los datos biométricos se recopilen y utilicen de manera ética y responsable, respetando la privacidad de los individuos.
  • Se abordan posibles sesgos en los datos y en el modelo para asegurar la equidad en el uso de la tecnología.

El trabajo se encuentra desarrollado en el notebook llamado “CodigoPASD.ipynb”.

Referencias

  1. https://www.biometricupdate.com/202403/financial-fraud-is-exploding-fueled-by-cheap-and-easy-generative-ai-tools
  2. https://www.sciencedirect.com/science/article/pii/S0952197623018961
  3. https://www.iic.uam.es/innovacion/generacion-imagenes-tecnicas-basadas-gans/
  4. https://www.researchgate.net/publication/373551906_Ten_Years_of_Generative_Adversarial_Nets_GANs_A_survey_of_the_state-of-the-art
  5. https://arxiv.org/abs/1710.10196
  6. https://arxiv.org/abs/1812.04948
  7. https://arxiv.org/abs/1703.10593
  8. https://arxiv.org/abs/1805.08318
  9. https://github.com/denkovarik/Fingerprint
  10. https://www.kaggle.com/code/dijorajsenroy/fingerprint-feature-extraction-for-biometrics

GENERACIÓN DE IMÁGENES A PARTIR DE UN PROMPT

INTRODUCCIÓN

Los modelos de difusión, específicamente los modelos de texto a imagen, han permitido la transformación de ideas (imaginarias) a la realidad con un ‘prompt’ adecuado, idóneo, oportuno, conveniente… El énfasis sobre el prompt se debe a que la traducción del propio prompt al modelo y su conocimiento definen nuestros grados de libertad a la hora de querer generar esas ‘ideas’ en una imagen.

En el caso de que usemos un modelo para introducir un nuevo objeto o persona, o que deseemos modificar el estilo de la propia imagen, el modelo puede desconocerlo. Para solucionar dicho problema se ha ideado una salida que tiene un símil con el método socrático. Aprendemos una nueva representación del objeto o estilo en el ‘space embedding’ a partir de 4-5 imágenes con un modelo “text2image” congelado.

ESTADO DEL ARTE

La generación de imágenes a partir de un prompt o descripción textual ha avanzado significativamente en los últimos años. Este campo es conocido como “ text to image”, y está transformando la forma en la que se crean contenidos visuales en distintos campos que lo requieren.

La generación de contenido digital es algo muy extendido por todos los sectores. Sectores como el marketing y la publicidad pueden generar contenido para campañas publicitarias de una manera más rápida y personalizada. Además, este contenido estará basado en las preferencias del usuario. En general, la generación de imágenes aporta un enfoque distinto de creatividad. Sin embargo, hay que tener en cuenta una serie de consideraciones acerca de qué contenido se genera y cómo se genera. 

DESARROLLO DE MODELO DE DIFUSIÓN

Modelos de difusión

Vamos a indagar cómo los modelos de difusión estable funcionan, los modelos de difusión son entrenados para quitar ruido gaussiano a un dato al que se le ha añadido ruido gaussiano hasta ser puro.

Encontramos dos procesos dentro de los modelos de difusión:

  1. ‘Forward diffusion’: difusión hacia delante, proceso fijo que va añadiendo ruido gaussiano a una imagen hasta llegar a ruido puro gaussiano q(xt | xt+1)
  2. ‘Backward diffusion’: red neuronal que aprende a quitar el ruido gaussiano gradualmente, empezando desde puro ruido gaussiano hasta la imagen real

En cuanto al desarrollo matemático subyacente, vamos a comentar sus diferencias con el modelo Variacional Jerárquico Markoviano y su desarrollo hasta llegar a la expresión del ELBO que habrá que optimizar en el proceso de aprendizaje del modelo de difusión. 

En un modelo de difusión variable tenemos 2 distribuciones: “p” y “q”. La distribución “q” añade ruido a una imagen durante unos timesteps determinados. La distribución “p” elimina el ruido que ha añadido la distribución “q” a la imagen original. Esta distribución tiene que intentar que tras eliminar el ruido añadido por “q” la imagen de salida sea lo más parecido a la imagen de entrada.

De esta manera podemos definir el modelo de difusión HVAE en el que definimos el espacio latente como de misma dimensión al de la entrada. Cada paso del encoder está pre-definido como una distribución gaussiana centrada en el output del paso anterior, y unos parámetros que son optimizables a medida que pasa el tiempo.

Entonces, tenemos las mismas expresiones que en el caso del Autoencoder afectadas por las restricciones definidas.

De esta manera nos quedan:

Posterior

Como hemos definido, cada paso del encoder será gaussiano:

Podemos observar que q(x0) es la distribución real de los datos en la imagen real, de los datos que entran al modelo.

De la misma manera, con las distribuciones que eliminan el ruido (p):

Finalmente, para optimizar el modelo tenemos que optimizar ELBO, teniendo en cuenta que lo único a aprender son las distribuciones del decoder p, y no los encoders, que hemos definido como gaussianas. Como observamos en las nuevas expresiones que hemos mostrado, esto se refleja en que ya no está parametrizado por θ.

Si derivamos la expresión del ELBO directamente de la del (MHVAE), obtenemos una expresión que usaría Montecarlo para hacer las estimaciones de dos variables a la vez. En su lugar, se utiliza una variación en la que se tiene en cuenta sólo una variable a la vez, teniendo en cuenta x0 como parámetro a la distribución. 

Usando Bayes, la transición sería:

Finalmente, la expresión del ELBO quedaría así:

Nos quedan 3 principales componentes, y nuestro objetivo será optimizar el término de reconstrucción y el término de similitud del denoiser. El “prior matching term” quedaría como 0 según las asunciones definidas para este modelo.

Así, el proceso de aprendizaje pasará por optimizar por Monte Carlo el reconstruction term, y obtener las distribuciones de p que más se parezcan a q para minimizar la divergencia Kullback-Leiber entre las dos.

Modelo de difusión condicionado a un prompt

Una vez explicados los modelos de difusión, nos centramos en los modelos de difusión de texto a imagen. Para estos modelos, tendremos que introducir un prompt sobre el que se basará el modelo para devolver una imagen. Este prompt es un texto que tiene que ser procesado. Las partes más importantes de este procesado son:

Tras prcoesar el texto se llega al predictor de ruido que es una red U-Net. La principal diferencia con los modelos de difusión de texto a imagen con respecto al resto de los modelos de difusión es que la red U-Net está condicionada al prompt que se ha introducido. Este prompt ha sido procesado antes de introducirse a la red U-Net. Al predictor de ruido no solo llega el prompt procesado, si no que también llega una imagen codificada por un VAE. Esta imagen generada en un principio solo contiene ruido. En conclusión, el predictor de ruido (U-Net) enlaza el prompt y la imagen. 

El predictor de ruido, como su nombre indica, predice el ruido de la imagen que le ha llegado. Ese ruido predicho se resta a la imagen latente que se ha introducido a la red U-Net, de tal forma que se obtiene una nueva imagen latente. Esta nueva imagen latente tendrá menos ruido que la imagen que se había introducido antes a la red, y se volverá a introducir al predictor de ruido para volver a repetir el mismo proceso. Este proceso hay que repetirlo entre 20 y 50 veces. Si repetimos el proceso menos de 20 veces, es probable que la imagen que obtengamos no tenga mucha calidad ya que no se habría quitado suficiente ruido. Por el contrario, si repetimos el proceso más de 50 veces, podemos caer en overfitting ya que estaríamos quitando ruido cuando no es necesario.

Tras haber eliminado el ruido de la imagen latente, el sistema podrá devolver la imagen asociada al prompt. Sin embargo, antes de ello habrá que hacer el paso opuesto al principio, decodificando la imagen latente con un VAE. 

Textual inversion

Textual inversion crea relaciones entre imágenes y texto en un modelo preentrenado. Además, se alimenta al modelo con las distintas descripciones textuales. Dicho modelo se entrenará ajustando los embeddings del texto. En conclusión, este proceso nos permite generar imágenes precisas a partir de descripciones textuales.

RESULTADOS

Como hemos explicado en el modelo de difusión condicionado por un prompt y el entrenamiento se realiza sobre la parte de text_encoder, parte donde se codifica el espacio embedding del texto (prompt) que se emplea para condicionar el modelo de difusión empleando una atención cruzada con el de la imagen. En las demás partes del modelo se congelan los parámetros ya que como hemos explicado en el textual inversion el error asociado del gradient-tape se propaga sobre el text-embedding.

Definimos un entrenador para afinar un modelo de difusión estable, StableDiffusionFineTuner, utilizando un programador de ruido específico, NoiseScheduler. Se configura con un optimizador Adam que tiene una tasa de aprendizaje cíclica mediante una decaída coseno. Luego, se compila el modelo con una función de pérdida MSE.

Generación del modelo.

Generamos la imagen y dentro del prompt definimos dónde va a estar el token entrenado.

CONCLUSIÓN

Como podemos observar, no se han modificado los parámetros del modelo. Esto implica que el modelo conserva el conocimiento referente a las pirámides. Sin embargo, dentro del prompt podemos definir el objeto o estilo específico con el token que se ha entrenado previamente. Al final se ajusta el modelo de tal forma que pueda conocer distintos objetos o estilos sin modificar el espacio latente, es decir, el conocimiento del modelo.

Uno de los atractivos de textual inversion es que se basa en la modificación del propio input, por lo que es muy adaptable para usarse con otros modelos como generadores de audio.

REFERENCIAS

Andrew. (2024, 04, Enero).  How does Stable Diffusion work?. Recuperado el 28 de Abril de 2024, https://stable-diffusion-art.com/how-stable-diffusion-work/ 

Calvin Luo. (2022, 26, Agosto). Understanding Diffusion Models: A Unified Perspective. Recuperado el 28 de Abril de 2024, https://arxiv.org/pdf/2208.11970

Rogge, Niels., Rasul Kashif.  (2022, 7, Junio). The Annotation Diffusion Model. Recuperado el 04 de Mayo de 2024. https://huggingface.co/blog/annotated-diffusion

Gal, Rinon., Alaluf, Yuval., Aramon, Yuval.,Patashnik, Or., Bermano, Amit H., Chechik, Gal., Cohen-Or, Daniel. (2022, 02, Agosto). An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion. Recuperado el 15 de Mayo de 2024, de: https://arxiv.org/abs/2208.01618   

Transfer Learning en representaciones latentes de modelos de RAVE

Introducción

En el ámbito de la inteligencia artificial y el procesamiento de audio, los autoencoders variacionales (VAEs) han demostrado ser herramientas muy útiles para la representación y generación de señales de audio. Estos modelos permiten comprimir datos a través de una representación latente compacta y también facilitan la generación de nuevas señales que mantienen características similares a las del conjunto de datos original [1]. Realtime Audio Variational AutoEncoder (RAVE) es una arquitectura específica de VAE optimizada para el procesamiento de audio en tiempo real, abordando los desafíos de la naturaleza temporal y la alta dimensionalidad de las señales de audio. [2]

El proyecto propuesto busca explorar cómo convergen y divergen las representaciones latentes obtenidas de dos modelos RAVE distintos cuando se les da la misma entrada de audio. La idea principal es aplicar una función matemática a una de las representaciones latentes para minimizar su distancia euclidiana respecto a la otra. La distribución del error calculado a partir de esta distancia se utiliza para ajustar la representación latente, que luego se introduce al decodificador del primer modelo RAVE. Esto permitirá obtener una salida que se asemeje mucho a la que se lograría utilizando la representación latente original del mismo modelo [3] .

Este enfoque no solo proporciona una forma novedosa de analizar y mejorar la interoperabilidad entre diferentes modelos RAVE, sino que también puede tener aplicaciones prácticas en la mejora de la calidad y coherencia del procesamiento de audio en tiempo real.

Estado del arte

En los últimos años, la inteligencia artificial y el procesamiento de señales han experimentado un avance significativo, particularmente en el ámbito de los autoencoders variacionales. Los VAEs han demostrado ser herramientas efectivas para la representación y generación de datos complejos, incluidos los datos de audio. A diferencia de los autoencoders tradicionales, los VAEs incorporan un enfoque probabilístico que permite generar nuevas muestras que son coherentes con el conjunto de datos de entrenamiento, lo cual es crucial para aplicaciones como la síntesis de audio y la compresión de señales.

VAEs en el Procesamiento de Audio

Los VAEs han sido ampliamente utilizados en diversas aplicaciones de audio debido a su capacidad para aprender representaciones latentes compactas y generar señales realistas.Algunos ejemplos concretos de estas aplicaciones son:

Kingma y Welling (2013) introdujeron los VAEs, estableciendo las bases teóricas que han sido aplicadas y extendidas en el procesamiento de audio [4]. Modelos como WaveNet [5] y SampleRNN [6] han utilizado conceptos de VAEs y redes neuronales recurrentes para generar audio de alta calidad, demostrando la eficacia de estas técnicas en la captura de las características temporales y espectrales del audio.

Realtime Audio Variational AutoEncoder (RAVE)

La arquitectura RAVE representa una evolución significativa en el uso de VAEs para el procesamiento de audio en tiempo real. RAVE está diseñada para abordar los desafíos específicos del procesamiento de audio, como la alta dimensionalidad y la naturaleza secuencial de las señales de audio. A través de una arquitectura optimizada y técnicas avanzadas de entrenamiento, RAVE permite la compresión eficiente y la generación de audio en tiempo real, manteniendo la coherencia y la calidad de las señales.

Interoperabilidad y Representaciones Latentes

Un área emergente de investigación en el campo de los VAEs y RAVE es la interoperabilidad entre diferentes modelos y la manipulación de las representaciones latentes. La capacidad de ajustar y adaptar estas representaciones puede mejorar altamente la calidad y la consistencia de las señales generadas.

Aplicaciones Prácticas

Las aplicaciones prácticas de estos avances son numerosas y variadas. En el ámbito de la producción musical, los VAEs y RAVE pueden facilitar la generación de sonidos y efectos de alta calidad, permitiendo a los artistas y productores explorar nuevas posibilidades creativas. Además, en aplicaciones de transmisión y compresión de audio, estas técnicas pueden mejorar la eficiencia y la calidad del audio transmitido, ofreciendo una mejor experiencia al usuario final.

Desarrollo

Audio de Entrada

El audio de entrada se suministra a los modelos seleccionados en forma de un archivo .wav. Utilizando la librería librosa, se extrae la tasa de muestreo (sampling rate, sr) del archivo para proceder con el muestreo y obtener la señal de audio x.

Modelos

Seleccionamos dos modelos de RAVE: Percussion y VCTK. Cada uno de estos modelos consta de un codificador (encoder) y un decodificador (decoder). Es importante destacar que los tamaños de las representaciones latentes generadas por los codificadores de ambos modelos difieren ([1, 8, 108] para Percussion vs. [1, 4, 108] para VCTK). Para unificar estas dimensiones, añadimos ceros a la representación de menor tamaño, ajustándola al tamaño mayor, consiguiendo mismo TorchSize en ambos, lo que permite realizar operaciones posteriores sin incompatibilidades dimensionales.

Esquema de trabajo

El audio muestreado x se introduce en los codificadores de ambos modelos (Percussion y VCTK), obteniendo así dos salidas (después de sendos Encoders) correspondientes a las representaciones latentes z1 y z2, que tienen distribuciones diferentes.

Aplicación del Transfer Learning Transductivo

En cuanto a la aplicación del aprendizaje por transferencia transductivo, queremos transformar la representación latente z2 obtenida del segundo encoder en una nueva representación  z’ que se alinee con z1 obtenida del primer encoder. Esta transformación se diseña para que, al pasar z’ por el decodificador del primer modelo (Percussion), se obtenga una salida  x2 similar a la que se generaría si se introdujera  z1 en dicho decodificador. De tal manera que x1 x2. 

Para lograr esto, seguimos los siguientes pasos:

Minimización de la Distancia Euclídea: Definimos una función de transformación T(z2) que convierte z2 en z′. Esta función T se entrena para minimizar la distancia euclídea entre z1 y z’:
z’=T(z2)
La función de pérdida que queremos minimizar es la distancia euclídea entre z1 y z’:
L=∥z1−z’∥, es decir el error
Donde ∥⋅∥ denota la norma euclídea.

Transformación de z2: Para encontrar T(z2), primero calculamos la distancia euclídea entre z1 y z2:
d(z1,z2)=∥z1−z2∥
Esta distancia nos da una medida del error producido por el encoder 2 cuando intentamos decodificar con el decodificador del modelo

Optimización: La función T se optimiza iterativamente usando un conjunto de datos de entrenamiento. Para cada par de representaciones z1 y z2 correspondientes a un mismo audio pero generadas por encoders diferentes, aplicamos T a z2 y ajustamos T para minimizar L.

Entrenamiento con Múltiples Audios: Este proceso se repite para un conjunto grande de audios. Por cada audio, calculamos el error entre z1 y T(z2), y ajustamos la función T. Al hacerlo para muchos audios, obtenemos una distribución del error y entrenamos T para minimizar este error en promedio:

Donde E denota la esperanza matemática, es decir, el promedio sobre todos los pares (z1,z2)

Salida Decodificada: Una vez entrenada T, podemos transformar cualquier z2 en z’ y pasarlo por el decodificador del modelo 1 para obtener x2, asegurándonos de que x2sea similar a x1:

Esto garantiza que las características de z2 se alineen con las de z1, permitiendo una salida decodificada de alta calidad.

Materiales utilizados

A continuación vamos a incluir el código que hemos utilizado. Lo hemos realizado para dos muestras:

Nos descargamos un fichero .wav el cual será el input común para ambos encoders

Seguidamente nos descargamos dos modelos de RAVE para realizar el proyecto

Si representamos la representación latente de la salida de cada uno de los encoders podemos observar lo mencionado

En este enlace se puede encontrar el fichero con el código: https://drive.google.com/file/d/1OeyP8BWZJWWPp96p–dbNYyoKd52ZJQy/view?usp=share_link

Discusión de resultados

Analizando las distancias euclídeas, es decir errores, para dos audios diferentes tomados como entrada, podemos ver a través de un gráfico de cajas que estas distancias son pequeñas por lo tanto las representaciones latentes obtenidas eran bastante similares. 

Referencias

[1] Kingma, D. P., & Welling, M. (2019). An Introduction to Variational Autoencoders. arXiv. https://arxiv.org/abs/1906.02691

[2] Caillon, A., & Esling, P. (2021). RAVE: A variational autoencoder for fast and high-quality neural audio synthesis. arXiv. https://arxiv.org/abs/2111.05011

[3] José Luis Blanco-Murillo (2022). Advanced Data and Signals Processing

https://moodle.upm.es/titulaciones/oficiales/pluginfile.php/11105922/mod_resource/content/3/Text_Part2_v1_0.pdf

[4] Kingma, D. P., & Welling, M. (2013). Auto-Encoding Variational Bayes. arXiv. ​​

https://arxiv.org/abs/1312.6114

[5] Van den Oord, A., Dieleman, S., Zen, H., Simonyan, K., Vinyals, O., Graves, A., Kalchbrenner, N., Senior, A., & Kavukcuoglu, K. (2016). WaveNet: A Generative Model for Raw Audio. arXiv. https://arxiv.org/abs/1609.03499

[6] Mehri, S., Kumar, K., Gulrajani, I., Kumar, R., Jain, S., Sotelo, J., Courville, A., & Bengio, Y. (2017). SampleRNN: An Unconditional End-to-End Neural Audio Generation Model. arXiv. https://arxiv.org/abs/1612.07837

Publicado por Carmen Bayona Sánchez, Patricia Correas Pacheco, Yaiza Romero Pose y Guillermo Jiménez Camacho

Análisis de Series Temporales en Finanzas con Inteligencia Artificial

  • INTRODUCCIÓN

Nos proponemos utilizar datos históricos del mercado de valores para estimar el precio de cierre de las acciones de cuatro empresas líderes en tecnología (Apple, Amazon, Google y Microsoft) para el año 2023-2024

Para ello, observamos los datos obteniendo los datos históricos de Yahoo Finance [1] para estas empresas utilizando la biblioteca yfinance en Python. Así, exploraremos y analizaremos estos datos para comprender mejor el comportamiento pasado de las acciones.

Más adelante, utilizaremos técnicas de modelado predictivo, incluyendo el uso de redes neuronales convolucionales (CNN), redes neuronales recurrentes (RNN) y modelos de series temporales, específicamente el uso de redes neuronales LSTM (Long Short Term Memory), para predecir el precio de cierre de las acciones de estas empresas para el año 2024. [2]

Basándonos en el primer análisis exploratorio de Kaggle, decidimos no solo predecir el precio de cierre del resto de empresas, si no también probar distintos modelos y evaluar su rendimiento. Además enfocamos a fondo la parte que predecimos para analizar tendencias de estas empresas.

A través de este análisis, buscamos proporcionar una estimación fundamentada y basada en datos del precio de cierre de las acciones de estas empresas para el próximo año, utilizando una variedad de técnicas de modelado avanzadas. [3]

  • ESTADO DEL ARTE

La inteligencia artificial en finanzas consiste en el uso de la tecnología, incluyendo algoritmos avanzados de ML para analizar datos, automatizar tareas y mejorar la toma de decisiones en el sector de los servicios financieros.

Se refiere a la aplicación de un conjunto de algoritmos de ML para permitir a las organizaciones de servicios financieros mejorar la eficacia, precisión y rapidez de tareas como el análisis de datos, la previsión, gestión de riesgos, detección de fraudes…

La IA permite una mejor comprensión de los mercados financieros y la creación de formas de relacionar las acciones de los clientes con ciertos factores. [4]

Además, se prevé que las instituciones financieras dupliquen su gasto en IA, por lo que resulta un tema interesante para las empresas en la actualidad. [5]

  • DESARROLLO

Para comenzar, observamos un análisis exploratorio para entender el conjunto de datos del que partimos. En los datos encontramos la siguiente información:

  • Date: fecha en la que se registraron los datos de la bolsa de valores para las acciones de cada empresa.
  • Open: precio de apertura, es decir, el precio al que una acción comienza a cotizar un día determinado.
  • High: precio más alto al que llegó la acción durante el día de negociación.
  • Low: precio más bajo al que cayó la acción durante el día de negociación.
  • Close: precio de cierre, es decir, el último precio al que se negoció una acción durante el día de negociación.
  • Adj Close: precio de cierre ajustado, teniendo en cuenta eventos corporativos. Ajusta el precio de cierre en consecuencia para proporcionar una imagen más precisa del rendimiento de la acción.
  • Volume: volumen de acciones negociadas durante el día de negociación. Indica cuántas acciones se compraron y vendieron.
  • Company Name: nombre de la empresa que se está analizando.

Tras analizar estadísticas descriptivas sobre estas variables, se representa el precio de cierre a lo largo del tiempo para cada empresa: 

Para Google, Microsoft y Amazon podemos observar una clara tendencia ascendente a lo largo del tiempo, lo que indica que el precio de las acciones a estado subiendo en general. Sin embargo, para Apple, los precios han ido subiendo y bajando, encontrándose al final de la gráfica en uno de los puntos más altos, esto indica que es más volátil.

Utilizan la media móvil (MA) para suavizar los datos sobre precios, creando un precio medio constantemente actualizado. El promedio se toma durante un periodo de tiempo determinado, 10, 20 y 50 días. Veámosla con claridad ya que es un buen acercamiento a los datos internos de las empresas.

Las medias móviles más largas (50 días) suavizan los datos más que las otras, lo que ayuda a identificar tendencias a largo plazo, se observa cómo esta (línea verde) es más suave que el resto.

Las medias móviles más cortas (10 días) son más sensibles a cambios recientes en el precio, lo que puede ayudar a identificar tendencias a corto plazo.

Vemos cómo en las cuatro gráficas la línea roja (media móvil de corto plazo) empieza a cruzarse por encima de la línea verde (media móvil a largo plazo) al final de 2023, lo que puede indicar señales de compra.

Cuando se cruza por debajo, podemos interpretar una señal de venta.

Para Apple, vemos que las medias móviles de 10 y 20 días reaccionan más rápidamente a cambios de precio que la de 50 días. Identificamos un cruce significativo a finales de 2023, donde la línea roja supera notablemente a la línea verde; esto puede ser interpretado como un cambio positivo en la tendencia de los precios de la acción. Puede verse como una señal alcista, sugiriendo que el precio de la acción podría estar comenzando a ascender. Los inversores podrían considerar este cruce como una señal para comprar la acción, anticipando que el precio continuará subiendo (podemos identificar lo mismo en Google en marzo de 2024, en Microsoft en noviembre de 2023 y en Amazon también noviembre de 2023).

Se analiza el retorno diario de stock en media, nos es útil para ver densidades y distribuciones y hacernos una idea rápida de la distribución de cada empresa: 

Sabemos que los retornos positivos indican un aumento del precio de la acción de un día al siguiente, retornos negativos una disminución del precio. Los retornos positivos son beneficiosos para los inversores, ya que reflejan un crecimiento en sus inversiones.

Para Apple vemos que el pico más alto se encuentra en -0.01 aproximadamente, lo que indica el valor más frecuente de los retornos diarios (el retorno diario más frecuente es una pérdida del 1%). La mayoría de puntos se encuentran en la parte positiva (retornos positivos), parece sesgado hacia la derecha. Aunque el retorno más común es una pequeña pérdida, hay más días con retornos positivos, sugiriendo una tendencia general de crecimiento a pesar de las pequeñas pérdidas frecuentes.

Para Google, el pico más alto se encuentra en la parte positiva (0.01 aproximadamente), lo que indica una ganancia del 1%. Pero en este caso, es más sesgado hacia la izquierda, hay una tendencia a tener más días con retornos negativos, lo que sugiere más variabilidad.

En Microsoft se encuentra más distribuido y equilibrado, centrándose en valores de entre -0.01 y 0.02 principalmente, aunque más sesgado hacia la derecha (parte positiva). Para Amazon es muy similar. Ambos combinan pequeñas pérdidas y ganancias, aunque con tendencia ligera hacia días con ganancias (crecimiento moderado).

Pasando al objetivo, comenzamos observando el modelo ya implementando LSTM para predecir el precio de cierre de las acciones de Apple.

Calculamos métricas y obtenemos: 

Gracias a este análisis exploratorio, se nos despierta la curiosidad de probar más modelos que apoyen la regresión: Probamos con redes Fully Connected y GRU: Gated Recurrent Units ya que son más simples computacionalmente que las LSTM, son más rápidas de entrenar y menos propensas al sobreajuste en conjuntos de datos más pequeños. Son eficientes y pueden captar dependencias a largo plazo en secuencias de datos. Observamos primeramente sus métricas para tener una primera idea global.

Ampliando en 2023/2024 para ver la predicción más distinguidamente y analizar en detalle cada red, obtenemos:

Cuadra con el resultado obtenido en las métricas ya que FCNN se va de más y las que mejor siguen la trayectoria real son GRU y LSTM. La razón es que las Fully Connected no capturan dependencias temporales porque procesan los datos de manera independiente y estática, sin considerar secuencia ni orden temporal, a diferencia de estas 2 mencionadas que rinden mejor en el contexto de tendencias en series temporales como los precios de acciones.

Sabiendo esto, hagamos estas predicciones para las 4 empresas en cuestión:

Apple es la que acabamos de enseñar.

Google tiene predicciones menos estables en los últimos meses, sin embargo, no sufre la caída en invierno que sufre Apple:

Podemos ver que, en general, ha ido mejor que con Apple.

Seguimos con Amazon, quien recuerda más a Apple. Sin embargo, sufre una caída más pronunciada en el invierno. Observamos: 

Vemos que como estos datos son menos constantes y consistentes es más complicado ajustarse a ellos a la hora de predecir y se ve reflejado en las métricas.

Por último, Microsoft resulta ser más estable, con la caída que afecta al resto menos pronunciada pero más duradera:

Analizando esto, se vuelve a evidenciar que el mejor modelo es GRU ya que mantiene sus MAE entre 1-5, algo bastante impresionante.

  • DISCUSIÓN DE RESULTADOS

Al enfocar nuestro análisis en los precios de cierre predichos para estas empresas, observamos que el precio de cierre de Microsoft es el más alto. Sin embargo, este estudio se centra en determinar cuál de nuestras redes neuronales funciona mejor, dado que ya teníamos los datos de cierre disponibles.

El modelo GRU ha resultado ser el más preciso. Estas redes son efectivas en problemas de regresión y series temporales debido a su capacidad para capturar dependencias a largo plazo, su estructura facilita un entrenamiento más rápido por su simplicidad, y su habilidad para contextualizar datos y capturar patrones.

Utilizamos las métricas MSE (Error Cuadrático Medio) y MAE (Error Absoluto Medio) para evaluar el desempeño de los modelos. Estas métricas confirmaron que el modelo GRU ofrece una mayor aproximación a los valores reales en comparación con otros modelos evaluados habiendo conseguido la mínima de 1.87.

En resumen, hemos experimentado la eficacia de la red GRU en la predicción de series temporales (enfocado a finanzas y mercado), así como el entrenamiento de otras de clasificación como LSTM y FCNN (más conocidos en el grado) y predicho los valores de cierre para 4 grandes empresas para este año.

  • MATERIALES

Presentamos el código referente al entrenamiento y validación de las diferentes redes utilizadas.

Comenzamos por LSTM:

También intentamos utilizar la CNN, normalizando los datos para adecuarla a la tarea de clasificación:

Finalmente, entrenamos diferentes redes neuronales especialmente enfocadas en la tarea y comparamos sus resultados:

Para LSTM: 

Para GRU:

Para FCNN:

Definimos las siguientes funciones para calcular métricas de cada uno de los modelos definidos previamente:  

  • REFERENCIAS

[1] Yahoo Finance https://github.com/ranaroussi/yfinance

[2] Kaggle LSTM time series + stock price prediction https://www.kaggle.com/code/carlmcbrideellis/lstm-time-series-stock-price-prediction-fail

[3] Python para predecir stock market https://youtu.be/fGLY0dIHJ2w?si=lfrpfsuJY6ytCIVm

[4] https://www.ibm.com/es-es/topics/artificial-intelligence-finance#:~:text=%C2%BFQu%C3%A9%20es%20la%20inteligencia%20artificial,sector%20de%20los%20servicios%20financieros

[5] Repercusiones de la IA en finanzas https://www.imf.org/es/Publications/fandd/issues/2023/12/AI-reverberations-across-finance-Kearns

[6] Link a nuestro jupyter, continuación del oficial de kaggle:

https://docs.google.com/document/d/1NJWxg0oVhtz4cVsgmJcpBO1EdEdhL935lRv4_q3fdAs/edit?usp=sharing

Clasificación de texto y análisis de sentimiento en texto

1. Presentación del Tema

 Introducción al Análisis de Sentimiento 

El análisis de sentimiento es una técnica de procesamiento de lenguaje natural (NLP) que busca identificar y extraer opiniones subjetivas de textos. Se utiliza comúnmente para determinar si un fragmento de texto expresa una opinión positiva, negativa o neutral. En el contexto de las películas, el análisis de sentimiento nos permite comprender mejor cómo percibe el público una película, lo que es valioso tanto para los cineastas como para los estudios de mercado. 

Además, presentamos otro concepto, el Transfer Learning. Este es una técnica en el campo del aprendizaje automático y la inteligencia artificial que aprovecha el conocimiento adquirido previamente por un modelo entrenado en una tarea para mejorar el rendimiento en otra tarea relacionada. Es decir, la idea es aprovechar el conocimiento adquirido durante el entrenamiento inicial del modelo, evitando entrenar un modelo desde cero y, por lo tanto, ahorrando tiempo y recursos computacionales.

Objetivos del Blog 

En este blog, nuestro objetivo es realizar un análisis de sentimiento en reseñas de películas. Dicho análisis lo enfocamos en hacer una clasificación de sentimientos de la mano del Transfer Learning. Esto lo vamos a llevar a cabo trabajando con el modelo BERT, ya entrenado. 

2. Revisión del Estado del Arte 

Investigación Previa 

El análisis de sentimiento ha sido ampliamente estudiado en diversas áreas. Para las reseñas de películas, los enfoques más comunes incluyen el uso de modelos basados en reglas, métodos estadísticos y técnicas de aprendizaje automático. Entre los modelos más relevantes se encuentran los modelos basados en Transformers como BERT. En este Blog nos vamos a centrar en este último. 

[Ref1], [Ref2]

3. Análisis Matemático

RoBERTa es un modelo que ha sido entrenado en un gran conjunto de datos de tweets para clasificar el sentimiento de los textos. Este modelo puede clasificar textos en tres categorías: positivo, neutral y negativo.

Podemos acceder a dicho modelo a través de la interfaz de Hugging Face. [Ref3]

Este es un modelo basado en roBERTa entrenado en aproximadamente 58 millones de tweets y ajustado para el análisis de sentimiento con el punto de referencia TweetEval. Siendo un modelo adecuado para inglés.

Además, lo que podemos observar en la imagen inferior es el grafo computacional del modelo RoBERTa. Pudiendo observar a los parámetros del modelo classifier.dense.weight y classifier.dense.bias que se corresponden a la capa densa del clasificador. También classifier.out_proj.weight y classifier.out_proj.bias que corresponden a la capa de proyección de salida del clasificador. Además, se observan las operaciones AddmmBackward0 y TanhBackward0, las cuáles son operaciones de retropropagación relacionadas con las funciones de activación y las multiplicaciones de matriz en las capas del modelo.

4. Descripción de las Pruebas Realizadas y Resultados

Teniendo el concepto claro, vamos a realizar un enfoque previo para poder llegar al objetivo del Blog.

Este enfoque es aprovechar el conocimiento adquirido previamente por un modelo entrenado  en una tarea de clasificación de sentimiento de reviews de Amazon, es decir, otro conjunto de datos. 

De esta forma, procesamos un fragmento de DataFrame de reseñas de Amazon y generamos puntuaciones de polaridad con RoBERTa para cada reseña. A continuación visualizamos el gráfico de pares que visualiza la relación entre las puntuaciones de polaridad y el Score de las reseñas.

El segundo enfoque es hacer un Fine Tuning de RoBERTa. Volvemos al objetivo inicial del Blog. 

Para ello, dividimos los datos en tres conjuntos distintos: entrenamiento, validación y prueba.

Antes de todo realizaremos un análisis donde observaremos como de bueno es el modelo escogido para realizar las predicciones de las reviews de nuestro dataset. Esto nos permitirá comparar los resultados. 

Roberta está entrenada para hacer una clasificación de tres clases: positiva negativa y neutral. Una vez pasados nuestros datos, podemos observar lo siguiente:

Con esto concluimos que se acierta el 50% lo que equivaldria a elegir los resultados al azar, siendo mejores los resultados de clasificar las instancias negativas que las positivas. Esto podría deberse a la eliminación de la clase neutra

Pasaremos ahora a cargar el modelo preentrenado y configurar el entrenamiento. El conjunto de entrenamiento  lo utilizamos para ajustar los parámetros del modelo. Aquí es donde el modelo aprende a predecir la salida a partir de las características de entrada. En cuanto al conjunto de validación, durante el entrenamiento, este conjunto se utiliza para ajustar los hiperparámetros del modelo y seleccionar el mejor modelo posible. Además, evaluamos el rendimiento del modelo en datos no vistos durante el entrenamiento, lo que ayuda a evitar el sobreajuste. El conjunto de prueba se utiliza, una vez que el modelo ha sido completamente entrenado, para una evaluación final e imparcial del rendimiento del modelo en datos completamente nuevos, que no se han utilizado ni para el entrenamiento ni para la validación.

Paréntesis conceptual

Recordando conceptos, el fine-tuning te permite adaptar un modelo preentrenado a una tarea específica ajustando sus parámetros, mientras que el freezing te ayuda a preservar el conocimiento adquirido durante el preentrenamiento, reduciendo al mismo tiempo el costo computacional del entrenamiento. Además, configuramos el entrenador utilizando la clase Trainer de Hugging Face. El Trainer es responsable de manejar el bucle de entrenamiento, incluyendo la evaluación y el guardado del modelo.

Reanudamos …

Ahora sí, una vez que los datos están preparados, cargamos el modelo preentrenado, RoBERTa, y configuramos los parámetros de entrenamiento. Esto implica ajustar la configuración del modelo para el proceso de fine-tuning. También el congelamiento de algunas capas del modelo preentrenado para reducir el tiempo de entrenamiento y los recursos computacionales necesarios.

Posteriormente, entrenamos el modelo y lo evaluamos obteniendo los siguientes resultados:

¿Ha servido todo esto de algo?

Ahora llega el momento de la verdad. Queremos comprobar realmente qué tan bueno es nuestro modelo al cual se le ha aplicado un fine-tuning. Por ello,  realizamos predicciones sobre nuevas reseñas.

Como podemos ver en las siguientes figuras, nuestro modelo tuneado ha sido capaz de realizar buenas predicciones:

5. Discusiones

La precisión indica la proporción de verdaderos positivos sobre el total de positivos predichos. Con una precisión del 88% para la clase negative y del 90% para la clase positive, el modelo muestra una alta capacidad para identificar correctamente las instancias positivas, aunque también tiene un buen desempeño en la clase negativa.  Este argumento se corrobora en las gráficas presentadas donde observamos que el modelo de clasificación exhibe un alto rendimiento con un AUC de 0.96, una precisión del 91%, y un equilibrio razonable entre precisión y sensibilidad. Las predicciones correctas superan ampliamente a las incorrectas, lo que sugiere que el modelo es fiable y efectivo para las tareas de clasificación evaluadas.

6. Conclusiones

El modelo RoBERTa preentrenado y afinado ha demostrado ser altamente eficaz en la tarea de clasificación de sentimientos, con un rendimiento balanceado entre precisión y recall para ambas clases negative y positive. Con una exactitud general del 89%, el modelo ha mostrado una fuerte capacidad de generalización y precisión en sus predicciones.

Para mejorar estos resultados y explorar nuevas posibilidades, podemos considerar aplicar técnicas de Data Augmentation, y así generar más ejemplos de entrenamiento con el fin de ayudar a mejorar la capacidad de generalización del modelo. También podríamos hacer un Ensamblaje de Modelos (Ensemble), es decir, combinar múltiples modelos para reducir errores y mejorar la precisión general. Por último, pensamos que una futura mejora sería explorar otras arquitecturas. Con esto, probar diferentes modelos preentrenados como GPT o T5 para comparar y potencialmente mejorar el rendimiento.

Bibliografía y Referencias

[Ref1]: Bredava, Anna. “Análisis de Sentimiento: ¿Qué es y cómo funciona?” Awario, 10 noviembre 2022, https://awario.com/es/blog/sentiment-analysis/ . Accessed 30 May 2024.

[Ref2]: Navarro Bellido, Joan. “Modelos de aprendizaje automático en análisis de sentimiento: comparativa de rendimiento.” RiuNet, 2022/2023, https://m.riunet.upv.es/bitstream/handle/10251/198111/Navarro%20-%20Modelos%20de%20aprendizaje%20automatico%20en%20analisis%20de%20sentimiento%20comparativa%20de%20rendimiento.pdf?sequence=1&isAllowed=y . Accessed 30 May 2024.

[Ref3]: https://huggingface.co/cardiffnlp/twitter-roberta-base-sentiment 

Mulla, Rob. YouTube, https://www.youtube.com/watch?v=QpzMWQvxXWk 

Jupyter Notebook donde aparece todo el código utilizado para el desarrollo del Blog: https://colab.research.google.com/drive/1YQDKkghUCRIU0NefupndT7Jta2C-S-M-#scrollTo=iaSJ7fan-0ey

Dataset movies.csv: https://www.kaggle.com/datasets/yasserh/imdb-movie-ratings-sentiment-analysis?select=movie.csv

Dataset reviews.csv: https://www.kaggle.com/datasets/snap/amazon-fine-food-reviews?resource=download

Uso de GANs para la generación de terrenos realistas

Introducción

En el campo del procesamiento de datos tridimensionales, las Redes Adversarias Generativas (GANs) se han posicionado como una de las tecnologías más prometedoras y transformadoras de los últimos años. Estas redes están marcando un cambio significativo en la forma en que se crea contenido en 3D, especialmente en campos como el desarrollo de juegos y simulaciones realistas.

En este blog, nos sumergiremos en el mundo de la generación de terrenos tridimensionales utilizando GANs, explorando los avances más recientes, las técnicas aplicadas y los desafíos que enfrentamos. Nos enfocaremos en la generación procedimental de terrenos 3D, desde la creación de mapas de altura hasta la síntesis de imágenes de satélite, aprovechando arquitecturas avanzadas como ProGAN, CGAN y StyleGAN para alcanzar resultados de alta calidad y realismo visual.

Además, examinaremos de cerca cómo estas técnicas están siendo aplicadas en diferentes contextos, desde la industria del entretenimiento hasta la planificación urbana y la simulación ambiental. Al hacerlo, esperamos proporcionar una visión general de las posibilidades y los límites actuales en la generación de terrenos 3D mediante el uso de GANs.

Estado del Arte

Como hemos dicho en la introducción, vamos a adentrarnos en las Generative Adversarial Networks (GANs), y para ello, es fundamental entender el contexto y los avances recientes en el campo junto con sus operaciones y las diversas aplicaciones que ofrecen. El punto de inicio del uso de GANs para la generación de terrenos realistas se remonta a los primeros experimentos con GANs en el campo de la informática gráfica. Investigadores como Tero Karras, Samuli Laine y Timo Aila exploraron el potencial de las GANs para sintetizar paisajes naturales y urbanos con una alta fidelidad visual tras la introducción de estas por Ian GoodFellow en 2014. (Karras et al., 2017)

Uno de los desarrollos más notables en este ámbito es la arquitectura ProGAN, la cual ha demostrado una notable eficacia en la generación de terrenos realistas en entornos virtuales. Esta arquitectura, con su enfoque de entrenamiento progresivo, ofrece ventajas significativas sobre otras GANs para la generación de terrenos realistas. Al comenzar con imágenes de baja resolución y aumentar gradualmente la resolución, ProGAN logra un entrenamiento más estable, una mejor calidad de imagen, y una mayor capacidad para capturar detalles finos y texturas complejas. Además, su eficiencia computacional y técnicas de regularización mejoradas permiten generar imágenes de alta resolución de manera más efectiva, lo que es fundamental para aplicaciones prácticas en videojuegos, simulaciones de realidad virtual y visualizaciones geográficas.

Además, la comunidad investigadora ha explorado técnicas de regularización y entrenamiento adversarial más avanzadas para mejorar la calidad y la diversidad de los terrenos generados. La incorporación de mecanismos de atención ha permitido a las GANs enfocarse en características geográficas específicas, generando terrenos más realistas y coherentes, como puede llegar a ser BigGAN. Esta, es una versión escalable y eficiente de las GANs capaz de generar terrenos de alta calidad en una amplia variedad de escenarios geográficos. BigGAN utiliza un enfoque de atención ampliada para capturar detalles finos en los terrenos generados, lo que resulta en una mejora significativa en la calidad visual y la diversidad de los resultados.

Desarrollo

Las GANs, emplean una dinámica dual entre dos redes neuronales: el generador y el discriminador. El generador se encarga de producir datos ficticios que se asemejen a los datos reales, mientras que el discriminador se encarga de distinguir entre las muestras generadas y las auténticas. Ambas redes se entrenan a la vez en un juego competitivo, donde el generador intenta mejorar su capacidad para engañar al discriminador, mientras que este último busca mejorar su habilidad para detectar la falsedad. Este, es un proceso de constante confrontación y evolución, que nos lleva al siguiente nivel en la generación de datos realistas mediante la inteligencia artificial.

En el desarrollo de terrenos tridimensionales para entornos virtuales mediante el uso de GANs, el generador transforma vectores de un espacio latente aleatorio en representaciones realistas de paisajes en 3D. Por otro lado, el discriminador se entrena para diferenciar entre los modelos de terreno sintéticos y los obtenidos a partir de imágenes satelitales reales.

Estas técnicas facilitan la creación de entornos más ricos y variados, adecuados para simulaciones realistas y videojuegos de mundo abierto.

Materiales Usando ProGAN

Para comprender cómo funcionan las GANs y mejorar su entrenamiento, es esencial entender algunos conceptos matemáticos clave. Estos incluyen la optimización de una función de pérdida, como la divergencia de Kullback-Leibler o la pérdida de Wasserstein, que guía la interacción entre el generador y el discriminador.

En la implementación de las GANs, se establecen las arquitecturas de las redes, se elige la función de pérdida y se configuran los hiperparámetros. El objetivo principal es generar imágenes realistas, lo que se logra minimizando la función de pérdida adversarial.

Esta función de pérdida tiene en cuenta la estimación del discriminador sobre la probabilidad de que una instancia de datos real sea real (D(x)), así como la probabilidad de que una instancia falsa generada por el generador sea considerada real (D(G(z))). Se busca maximizar esta función de pérdida por parte del generador, mientras que el discriminador trata de minimizarla, lo que genera una competencia adversarial entre ambos.

En resumen, las GANs se basan en un juego competitivo entre dos redes neuronales, donde el generador intenta engañar al discriminador generando imágenes realistas, y el discriminador intenta distinguir entre imágenes reales y generadas. Este proceso de competencia y aprendizaje mutuo es fundamental para lograr la generación de imágenes de alta calidad.

Ahora presentamos una posible estructura para la implementación de una GAN usando ProGAN para la generación de terrenos realistas:

En esta imagen vemos una implementación básica de las funciones para construir el generador y el discriminador en una Progressive GAN (ProGAN) utilizando TensorFlow y Keras.

La función “build_generator_progan” construye el generador de la ProGAN. Para cada etapa de ProGAN (en este caso solamente para la etapa 4), se agregan las capas necesarias al modelo. En la etapa 4, se utiliza una capa densa seguida de capas de convolución transpuesta para generar una imagen de salida de tamaño 4x4x3 (para imágenes RGB). Luego, se devuelve el modelo construido.

La función “build_discriminator_progan” construye el discriminador de la ProGAN. Al igual que con el generador, se definen las capas del discriminador para cada etapa de ProGAN. En la etapa 4, se utilizan capas convolucionales seguidas de capas de activación LeakyReLU y de Dropout para clasificar la autenticidad de la imagen. Finalmente, se devuelve el modelo construido.

En esta imagen vemos otra parte del codigo de ProGAN en donde primero se definen las dimensiones del espacio latente y la etapa inicial. Luego, se define la función de pérdida adversarial y se compila el discriminador inicial. Posteriormente, se construye el generador y el discriminador iniciales para la etapa inicial de ProGAN. Después, se compila el discriminador ProGAN y se congela durante el entrenamiento del generador. Finalmente, se arma la GAN conectando el generador y el discriminador ProGAN, y se compila la GAN ProGAN.

Pruebas realizadas con ProGAN

Comenzamos generando imágenes con un conjunto de entrenamiento muy reducido (diez imágenes descargadas de distintos terrenos). Como es lógico, al ser una muestra tan reducida, en las imágenes generadas no se observan terrenos como tal, pero nos sirvió para confirmar que nuestro modelo era capaz de generar imágenes dadas unas muestras de entrenamiento. Se muestra el código con el que se cargaron las imágenes y dos salidas, cuyas diferencias se deben a pequeñas modificaciones en el generador y la función de entrenamiento.

Tras esto, decidimos probar con muestras mucho más grandes y representativas. Para la primera, creamos un proyecto en Google Earth Engine y tratamos de acceder a sus muestras.

Concretamente, probamos con la colección LANDSTAT, como se muestra en la imagen.

No obstante, las imágenes generadas aparecían en blanco. Tras investigar y probar con otra colección (Sentinel 2), vimos que el problema ocurría al cargar las imágenes, no en el entrenamiento, pues nos salían en blanco desde el principio. Se muestra la representación matricial.

Por ello, decidimos probar con EuroSAT.

Y, a diferencia de lo que sucedía con Google Earth, sí conseguimos cargar las imágenes.

No obstante, tras pasar las muestras al modelo, las imágenes generadas eran todas grises, lo que sugería un problema en el generador.

Realizando algunos cambios, lo máximo que conseguimos fue que se observara una ligera textura sobre el gris.

La última prueba, consistió en descargar un dataset de un repositorio GitHub.

Y, esta vez sí, logramos que el modelo generase algunas imágenes con cierta similitud con los terrenos. Es cierto que no se observan de forma clara y que en algunas el modelo se observa sobreajustado, pero creemos que si tuviéramos la capacidad de entrenar con un número mayor de muestras y ajustando el número de épocas y el tamaño del batch, podríamos lograr la generación de imágenes de terrenos. Además, vemos que algunas imágenes tienen una apariencia más detallada y definida, mientras que otras parecen más abstractas o ruidosas, lo que también es indicativo de que la consistencia del modelo tiene margen de mejora.

Por otro lado, como aspectos positivos, destacamos la variedad de patrones y colores, que indicaría que el modelo es capaz de producir diversidad en sus salidas, así como de texturas y formas, que indican que el modelo está capturando distintos tipos de características. Concluimos con que para la generación de terrenos realistas necesitamos varios miles de muestras para alcanzar los resultados que se esperarían, en vez de obtener imágenes abstractas de poca resolución.

Materiales Usando BigGAN

Para finalizar, hemos probado a implementar las BigGans, siguiendo el mismo patrón inicial que con las ProGANS.

La primera función construye un generador de imágenes para un modelo GAN utilizando Keras. Por otro lado, la segunda función construye un discriminador que evalúa si una imagen es real o generada. Utiliza Keras para definir un modelo secuencial que empieza con capas convolucionales, las cuales extraen características de la imagen de entrada. Este discriminador, por lo tanto, es responsable de distinguir entre imágenes reales y falsas y es entrenado en conjunto con el generador en un marco de aprendizaje adversarial.
Realizando algunas pruebas con este modelo con las mismas muestras que para ProGAN, no hemos obtenido mejores resultados. Esto puede deberse a la falta de muestras de entrenamiento o a que ProGAN se ajusta mejor a los parámetros de las muestras dadas.

Bibliografía

Anónimo. (2020, 1 junio). Redes Neuronales Generativas Adversarias (GANs). Brain4AI. Recuperado 12 de mayo de 2024, de

Karras, T., Aila, T., Laine, S., & Lehtinen, J. (2017, 27 octubre). Progressive Growing of GANs for Improved Quality, Stability, and Variation. ArXiv.org. Recuperado el 12 de mayo de 2024, de https://arxiv.org/abs/1710.10196

Ward, J. (2021). This Landscape Does not Exist: Generating Realistic Landscape Imagery with StyleGAN2. Medium. Recuperado 27 de abril de 2024, de https://medium.com/geekculture/train-a-gan-and-keep-both-your-kidneys-bcf672e94e81

About

Equipo formado por Daniel Gómez, Alejandro Blas y Daniel Tijeras

Inferencia bayesiana en el aprendizaje automático

Introducción

Actualmente, la inferencia bayesiana puede ser definida como un enfoque estadístico que nos permite estimar y actualizar la incertidumbre de los datos a medida que se va obteniendo nueva información. Es decir, utiliza la teoría de la probabilidad bayesiana para actualizar y calcular lo que se conoce de algo con lo que se ha observado, por lo tanto, trata los parámetros o variables desconocidas como variables aleatorias describiéndolas en términos de distribuciones de probabilidad. No hay que olvidar que este planteamiento se basa en el teorema de Bayes, el cual establece que una probabilidad posterior se relaciona con la probabilidad previa y la verosimilitud de lo observado, permitiendo así actualizar continuamente la información a medida que se adquiere nueva dejando así, combinar ambos tipos de información, tanto la a priori como la empírica. En otras palabras, nos brinda una base fuerte y coherente para la toma de decisiones y la estimación de los parámetros presentes.

Por medio de este blog se explorarán diferentes algoritmos y técnicas bayesianas que sean comúnmente utilizadas en el campo del aprendizaje automático. Por un lado, en el campo de la clasificación, hablaremos de cómo los modelos bayesianos permiten capturar efectivamente la incertidumbre presente en las predicciones y mejorar así el modelo. Del mismo modo, al hablar de regresión se busca examinar cómo los modelos bayesianos permiten estimar mejor los coeficientes de un modelo y finalmente, cómo se integra al agrupamiento o clustering, es decir, cómo son capaces de ayudar a descubrir patrones para agrupar los datos. De igual forma, junto a estas explicaciones se añadirán ejemplos prácticos con el objetivo de permitir una mejor comprensión sobre cómo diferentes problemas del aprendizaje automáticos pueden ser resueltos a través de la inferencia bayesiana. Finalmente, conocemos que este camino pese a que trae sus ventajas también involucra desafíos que deben tenerse en cuenta y que aquí se explicarán considerando detalles prácticos buscando aplicar todo lo anteriormente mencionado a un entorno real.

Estado del arte

La inferencia bayesiana en el aprendizaje automático ha experimentado un crecimiento significativo en los últimos años. Al reconocerse el valor de este enfoque probabilístico, los investigadores y profesionales en el campo han desarrollado diversas técnicas y algoritmos que se basan en la inferencia bayesiana para la solución de problemas de alta complejidad.

Por un lado, se ha observado un aumento en la aplicación de modelos bayesianos en el aprendizaje automático gracias a su capacidad de capturar la incertidumbre proporcionando estimaciones más confiables de los parámetros que conforman determinado modelo. De hecho, las redes neuronales bayesianas han sido más utilizadas porque permiten modelar la incertidumbre en las predicciones a través de las capas de la red, ofreciendo no solamente mayor confianza sino también abordando problemas presentes con otros enfoques debido a que pueden aprender una distribución de posibles modelos en lugar de un solo conjunto de pesos.

Al mismo tiempo, otra área de investigación activa es la clasificación bayesiana desarrollando algoritmos de clasificación que aprovechan la teoría de la inferencia bayesiana para mejorar la precisión de las clasificaciones. Tal es el caso de las máquinas de vectores de soporte bayesianas que utilizan la inferencia bayesiana para encontrar el hiperplano de separación óptimo y asignar probabilidades a las clases de manera coherente.

Hablando sobre regresión bayesiana, estos métodos han demostrado su efectividad en la estimación de parámetros y predicciones cuando se presenta incertidumbre, tal como lo demuestran los procesos gaussianos ya que permiten modelar la distribución posterior sobre las funciones y proporcionan intervalos de confianza para las predicciones ofreciendo, por otro lado, mayor flexibilidad y adaptabilidad cuando se presenta un caso de estimación de relaciones que no sean lineales permitiendo su aplicación exitosa en diferentes dominios. Finalmente, para el agrupamiento, los modelos de mezclas bayesianas y los procesos de Dirichlet han sido ampliamente utilizados porque ambos enfoques permiten el descubrimiento de estructuras y agrupación de datos de manera probabilística y asigna probabilidades a estas asignaciones de los datos a grupos, en este aspecto, proporciona el modelado de la incertidumbre además de facilitar la exploración de este para adaptarse a diferentes patrones que puedan presentarse en los datos.

Desarrollo

Inicialmente, la inferencia bayesiana aplicada a la clasificación en aprendizaje automático permiten capturar incertidumbre en las predicciones mejorando la calidad del modelo y esto, puede realizarse mediante redes neuronales bayesianas y máquinas de vectores de soporte bayesianas. El funcionamiento del enfoque que emplea redes neuronales bayesianas se basa en la extensión de las redes neuronales convencionales introduciendo distribuciones de probabilidad sobre los pesos y sesgos de la red en vez de valores fijos. Las distribuciones de estos son estimadas mediante el algoritmo de inferencia bayesiana implicando así tener en cuenta la incertidumbre inherente en los datos y ajustar los parámetros de la red en consecuencia. Finalmente, una vez que se ha entrenado la red neuronal bayesiana, se pueden obtener predicciones y estimaciones de incertidumbre mediante muestreo de las distribuciones de los pesos y sesgos. Esto se logra realizando múltiples pasadas de propagación hacia adelante a través de la red, donde en cada pasada se toman diferentes muestras de las distribuciones de los parámetros. La variabilidad en las predicciones obtenidas a partir de estas muestras proporciona una medida de la incertidumbre asociada con las predicciones del modelo. Por otro lado, el uso de máquinas vectores de soporte bayesianas son también una extensión de las máquinas de vectores de soporte convencionales (SVM). Al igual que las redes neuronales bayesianas, estas introducen distribuciones de probabilidad sobre los parámetros del modelo para capturar la incertidumbre. En lugar de tener un único hiperplano de separación entre las clases, utilizan distribuciones de probabilidad para representar un conjunto de hiperplanos posibles. Estas distribuciones se ajustan utilizando el algoritmo de inferencia bayesiana durante el entrenamiento, teniendo en cuenta tanto los datos de entrenamiento como las distribuciones iniciales de los parámetros.Además, cuando se trata de hacer predicciones, proporcionan una medida de incertidumbre al calcular la probabilidad de que una instancia pertenezca a una clase determinada. Esta probabilidad se obtiene tomando en cuenta las distribuciones de los parámetros y las características de la instancia.

Seguidamente, estos modelos aplicados en la regresión, como la regresión lineal bayesiana y los procesos gaussianos, permiten una estimación más precisa de los coeficientes del modelo y proporcionan intervalos de confianza para las predicciones:

Regresión Lineal Bayesiana: En la regresión lineal bayesiana, en lugar de tener valores fijos para los coeficientes de la regresión, se les asignan distribuciones de probabilidad. Estas distribuciones representan la incertidumbre sobre los coeficientes del modelo. Durante el entrenamiento, se utiliza el enfoque bayesiano para estimar las distribuciones posteriores de los coeficientes, dadas las distribuciones iniciales y los datos de entrenamiento. Esto implica tomar en cuenta la incertidumbre inherente en los datos y ajustar los coeficientes en consecuencia. Una vez que se ha entrenado el modelo, se pueden obtener predicciones y estimaciones de incertidumbre. Para una nueva instancia de entrada, se muestrean múltiples conjuntos de coeficientes de las distribuciones posteriores. Luego, se generan múltiples predicciones utilizando cada conjunto de coeficientes. La variabilidad en las predicciones obtenidas proporciona una medida de la incertidumbre asociada con las predicciones del modelo. Además, los intervalos de confianza se pueden calcular a partir de las distribuciones posteriores de los coeficientes. Estos intervalos indican un rango de valores en el cual se espera que caiga el valor verdadero de la predicción con cierto nivel de confianza. Por ejemplo, un intervalo de confianza del 95% indicaría que se espera que el valor verdadero de la predicción esté dentro del intervalo con una probabilidad del 95%.

Procesos Gaussianos: Los Procesos Gaussianos son otro enfoque bayesiano utilizado en la regresión. En este caso, se modela la función objetivo como un proceso estocástico, donde se asume que cualquier conjunto finito de valores tiene una distribución gaussiana. En el contexto de la regresión, los Procesos gaussianos permiten modelar la función objetivo como una distribución gaussiana sobre todas las posibles funciones que podrían explicar los datos. Esta distribución se define mediante una media y una matriz de covarianza. Para realizar predicciones, se utiliza el enfoque de inferencia bayesiana para obtener una distribución posterior sobre las funciones que mejor se ajustan a los datos observados. Esta distribución posterior se utiliza para generar predicciones y estimaciones de incertidumbre. Los Procesos gaussianos también proporcionan intervalos de confianza para las predicciones. Estos intervalos se basan en la distribución posterior y representan un rango en el cual se espera que caiga el valor verdadero de la predicción con cierto nivel de confianza.

Finalmente, en el clustering es empleada para descubrir patrones y agrupaciones en los datos de manera probabilística. Dos enfoques populares en el contexto del clustering bayesiano son los modelos de mezclas bayesianas y los procesos de Dirichlet. En los modelos de mezclas bayesianas, basados en modelos de mezclas convencionales, dse asume que los datos provienen de una combinación de varias distribuciones o “componentes”. En lugar de asignar pesos fijos a cada componente, los modelos de mezclas bayesianas asignan distribuciones de probabilidad a los pesos. En este enfoque, se utiliza la inferencia bayesiana para estimar las distribuciones posteriores de los pesos y los parámetros de cada componente, dadas las observaciones de los datos. Esto permite capturar la incertidumbre en la asignación de los datos a los diferentes componentes y obtener estimaciones más precisas de los parámetros. Una vez que se ha realizado la inferencia bayesiana, se puede utilizar el modelo entrenado para realizar clustering probabilístico. Para una nueva instancia, se calculan las probabilidades de pertenencia a cada componente y se asigna la instancia al componente con la mayor probabilidad. Además, se pueden obtener estimaciones de incertidumbre en la asignación de clusters mediante la propagación de incertidumbre a través de las distribuciones de los pesos y los parámetros. Por otro lado, los procesos de Dirichlet son una herramienta utilizada en el clustering bayesiano no paramétrico. En lugar de asumir un número fijo de clusters, los procesos de Dirichlet permiten que el número de clusters se ajuste automáticamente en función de los datos. En este enfoque, se utiliza un proceso de Dirichlet para modelar la distribución prior de las asignaciones de cluster. A medida que se observan los datos, el modelo asigna las instancias a clusters existentes o crea nuevos clusters en función de la similitud de los datos y las distribuciones de cluster existentes. La inferencia Bayesiana se utiliza para estimar las distribuciones posteriores de las asignaciones de cluster y otros parámetros relevantes permitiendo descubrir patrones y agrupaciones en los datos de manera flexible y adaptativa. Una vez que se ha realizado la inferencia bayesiana, se pueden utilizar los resultados para realizar tareas de clustering y obtener información sobre la incertidumbre en la asignación de clusters. Además, los Procesos de Dirichlet tienen la ventaja de ser capaces de manejar eficientemente conjuntos de datos grandes y de alta dimensionalidad.

Para comprender mejor lo anteriormente mencionado podemos mencionar ejemplos prácticos sobre la aplicación de la inferencia bayesiana:

Clasificación de spam en correos electrónicos: Supongamos que deseamos construir un clasificador de spam en correos electrónicos. Podemos utilizar la Inferencia Bayesiana para estimar las probabilidades condicionales de que un correo electrónico sea spam o no, dadas ciertas características (como palabras clave, frecuencia de ciertos términos, etc.). Podemos asignar distribuciones de probabilidad a los parámetros del modelo, como las probabilidades a priori de spam y no spam, y las probabilidades condicionales de las características dadas las clases. La Inferencia Bayesiana nos permitiría actualizar estas distribuciones a medida que se observan nuevos correos electrónicos y así obtener estimaciones más precisas de las probabilidades de clasificación.

Predicción de precios de viviendas: En este caso, deseamos predecir el precio de una vivienda en función de diferentes características (área, número de habitaciones, ubicación, etc.). Podemos utilizar un modelo de Regresión Lineal Bayesiana para estimar los coeficientes del modelo y obtener intervalos de confianza para las predicciones. Al asignar distribuciones de probabilidad a los coeficientes, podemos capturar la incertidumbre inherente en los datos y proporcionar estimaciones más precisas y confiables de los precios de las viviendas.

Segmentación de clientes: Supongamos que tenemos datos de clientes que incluyen características demográficas, comportamiento de compra, preferencias, etc., y deseamos realizar segmentación de clientes para identificar grupos similares. Podemos utilizar un enfoque de Clustering Bayesiano, como los Modelos de Mezclas Bayesianas, para asignar probabilidades de pertenencia a diferentes segmentos o clusters. La Inferencia Bayesiana nos permitiría ajustar automáticamente el número de clusters y obtener estimaciones de incertidumbre en la asignación de los clientes a los clusters, lo que facilitaría una segmentación más precisa y confiable.

Ejemplo práctico en código

En este ejemplo, se utiliza el conjunto de datos Iris, que es un conjunto de datos de clasificación comúnmente utilizado. Se divide el conjunto de datos en conjuntos de entrenamiento y prueba, luego se entrena un clasificador Naive Bayes utilizando el conjunto de entrenamiento. Finalmente, se realizan predicciones en el conjunto de prueba y se calcula la precisión del clasificador.

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB

# Cargar el conjunto de datos de iris
iris = load_iris()
X = iris.data
y = iris.target

# Dividir el conjunto de datos en conjuntos de entrenamiento y prueba
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Entrenar el clasificador Naive Bayes
clf = GaussianNB()
clf.fit(X_train, y_train)

# Realizar predicciones en el conjunto de prueba
y_pred = clf.predict(X_test)

# Calcular la precisión del clasificador
accuracy = np.mean(y_pred == y_test)
print("Precisión:", accuracy)
print("Predicciones:", y_pred)

Arrojando como resultado:

En base a los resultados que has obtenido, se puede concluir lo siguiente:

Precisión: La precisión de 1.0 indica que el clasificador Naive Bayes ha realizado predicciones correctas para todas las instancias en el conjunto de prueba. Esto significa que todas las muestras en el conjunto de prueba fueron clasificadas correctamente según las características de entrada.

Predicciones: La lista de predicciones muestra la clase predicha para cada instancia en el conjunto de prueba. Cada número representa la clase asignada por el clasificador Naive Bayes. Es decir, [1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0], significa que las primeras dos instancias se predicen como clase 1, la tercera instancia se predice como clase 2, la cuarta instancia se predice como clase 1 nuevamente, y así sucesivamente.

Materiales

Para la implementación de este ejemplo sencillo se utilizaron las librerías:

numpy: Es una biblioteca fundamental para el cálculo numérico en Python. Proporciona una estructura de matriz eficiente para manipular y realizar operaciones matemáticas en arreglos multidimensionales. En el ejemplo, se utiliza para generar datos de entrenamiento y prueba, así como para realizar operaciones matemáticas en los arreglos.

sklearn: Es la abreviatura de scikit-learn, una biblioteca de aprendizaje automático en Python muy popular y ampliamente utilizada. Proporciona una amplia gama de algoritmos y herramientas para el aprendizaje automático, la minería de datos y la estadística. En el ejemplo, se utiliza la clase GaussianNB de scikit-learn, que implementa el algoritmo Naive Bayes Gaussiano.

matplotlib: Es una biblioteca para la creación de visualizaciones en Python. Proporciona una amplia gama de funciones y herramientas para crear gráficos, diagramas y trazar datos. En el ejemplo, se utiliza para trazar los datos generados y las predicciones realizadas por el clasificador Naive Bayes.

Discusión

Finalmente, se enumerarán las ventajas y desafíos que este enfoque presenta y planteando en qué escenarios su utilización sería la decisión más adecuada. Entre sus ventajas, la inferencia bayesiana en el aprendizaje automático permite incorporar conocimiento apriori, manejar naturalmente la incertidumbre, adaptación continua del modelo a medida que se recopilan más datos y propagar la incertidumbre a través de todas las etapas del proceso de modelado. Por otro lado, se debe tener en cuenta que implementar este enfoque trae consigo alta complejidad computacional, a medida que la cantidad de los datos aumenten es muy probable que implementarlo sea computacionalmente, muy costoso. Además de que se requiere especificar un modelo implicando un conocimiento profundo del problema y su dominio ya que debe ser completo incluyendo distribuciones prior y verosimilitud, y finalmente, la elección de los hiperparámetros que un modelo bayesiano a menudo suele tener puede ser muy compleja.

Teniendo esto en cuenta, los casos en donde el mejor camino es aplicar inferencia bayesiana en aprendizaje automático es en aquellos en donde los datos sean escasos, la incertidumbre sea crítica, se tiene conocimiento experto sobre el problema y el dominio y qué recursos se tienen para su implementación.

Bibliografía

Bishop, C. M. (2006). Pattern Recognition and Machine Learning. Springer.

Gelman, A., Carlin, J. B., Stern, H. S., Dunson, D. B., Vehtari, A., & Rubin, D. B. (2013). Bayesian Data Analysis (3rd ed.). CRC Press.

Murphy, K. P. (2012). Machine Learning: A Probabilistic Perspective. MIT Press.

Ghahramani, Z. (2015). Probabilistic Machine Learning and Artificial Intelligence. Nature, 521(7553), 452-459.

Barber, D. (2012). Bayesian Reasoning and Machine Learning. Cambridge University Press.

Koller, D., & Friedman, N. (2009). Probabilistic Graphical Models: Principles and Techniques. MIT Press.

Van de Meent, J. W., Paige, B., & Yang, H. (2018). An Introduction to Probabilistic Programming. arXiv preprint arXiv:1809.10756.

Ortega, P. A., & Braun, G. (2018). A Bayesian View of Deep Learning. arXiv preprint arXiv:1801.07710.

Ghosh, J. K., & Delampady, M. (2003). An Introduction to Bayesian Analysis: Theory and Methods. Springer Science & Business Media.

Gelman, A., Roberts, G. O., & Gilks, W. R. (2013). Bayesian Data Analysis (2nd ed.). CRC Press.