Variational Autoencoders para la generacion de datos sintéticos 

Los Variational Autoencoders (VAE) son un tipo de autoencoder (o autocodificador), que se usa específicamente para la generación de datos sintéticos. Por lo tanto, es importante entender primero que es un Autoencoder. 

Los Autoencoders fueron descritos por primera vez formalmente en 1986 [1], aunque fue Kramer en 1991 [2], quien presentó una estructura concreta, y por lo que normalmente se le atribuyen a él. Surgieron como una herramienta para reducir la dimensionalidad de los datos, con aplicaciones como quitarle sonido a los datos o detectar anomalías. La estructura de un Autoencoder es la de una red neuronal con dos partes: 

  • Encoder: Su objetivo es comprimir el dato a una representación con menos dimensiones ( a lo que llamamos el latent vector
  • Decoder: Su objetivo es reconstruir el dato original desde la representación comprimida 

La función de perdida que se introduce en esta red neuronal busca minimizar la diferencia entre el dato original y el dato reconstruido por el decoder (por ejemplo usando MSE). 

De esta manera se entrena el Encoder, para que la representación reducida sea lo más pequeña posible y tenga la mayor información posible, y el Decoder, se entrena para que aprenda a generar los datos originales desde esa representación reducida. 

Los Variational Autoencoders se basan en esta idea, pero van un paso mas allá. En vez de reducir el dato a un vector, lo reducen a una distribución de probabilidades. Esto permite generar nuevos datos, ya que teniendo estas distribuciones podemos coger un punto de ellas y usar el decoder para generar un punto nuevo. Pero quizás hemos ido demasiado rápido, vamos a ver la estructura de los VAE: 

  • Encoder: En lugar de aprender una representación reducida, el modelo aprender una media y varianza (de una distribución gaussiana) para cada punto 
  • Decoder: Utiliza estas distribuciones latentes y genera los datos a raíz de ellas. 

Sin embargo en esta estructura se minimizan dos componentes: 

  • Diferencia entre el dato original y el reconstruido, como en los autoencoders 
  • Regularización: Para asegurarse que las distribuciones latentes se asemejan a distribuciones normales, lo que permite mas tarde generar datos sintéticos de mayor calidad. 

De esta manera para generar datos sintéticos, primero de todo entrenaríamos el modelo con los datos que queremos generar (ya sean imágenes, texto,…) y una vez entrenado, este será capaz de capturar las características mas importantes de los datos originales, que estarán reflejadas en el espacio latente. Ya teniendo el modelo entrenado con los datos que queremos generar, seleccionaremos un punto en el espacio latente y utilizamos el decoder para generar un dato sintético desde este punto. 

Los Variational Autoencoders, junto con otros modelos como la Difusión o las GAN son las técnicas mas comunes de generación de datos sintéticos con estructuras de redes neuronales, os iremos presentando más técnicas, así que seguid atentos al blog! 

Referencias  

[1] D.E. Rumelhart, G.E. Hinton, and R.J. Williams, «Learning internal representations by error propagation.» , Parallel Distributed Processing. Vol 1: Foundations. MIT Press, Cambridge, MA, 1986. 

[2] Kramer, M. A. (1991). Nonlinear principal component analysis using autoassociative neural networks. AIChE journal, 37(2), 233-243.