¿Qué es un codificador automático?

Aug 17 2020

Soy estudiante y estoy estudiando aprendizaje automático. Me estoy enfocando en modelos generativos profundos y, en particular, en autocodificadores y autocodificadores variacionales (VAE) .

Estoy tratando de entender el concepto, pero tengo algunos problemas.

Hasta ahora, he entendido que un codificador automático toma una entrada, por ejemplo una imagen, y quiere reducir esta imagen a un espacio latente , que debe contener las características subyacentes del conjunto de datos, con una operación de codificación , luego, con una operación de decodificación , reconstruye la imagen que ha perdido información debido a la parte de codificación.

Posteriormente, con una función de pérdida, reconstruye el espacio latente y así obtiene los rasgos latentes.

sobre el VAE, utiliza un enfoque probabilístico, por lo que tenemos que aprender la media y la covarianza de un gaussiano.

Hasta ahora esto es lo que he entendido.

Lo que realmente no tengo claro es qué estamos tratando de aprender con los codificadores automáticos y VAE.

He visto ejemplos en los que una imagen pasa de una no sonrisa a una cara sonriente, o de una imagen en blanco y negro a una imagen en color.

Pero no entiendo el concepto principal, que es: ¿qué hace un codificador automático?

Añado aquí algunas fuentes de donde estudié para que quien las necesite pueda verlas:

  1. https://hackernoon.com/autoencoders-deep-learning-bits-1-11731e200694
  2. https://www.youtube.com/watch?v=yFBFl1cLYx8
  3. https://www.youtube.com/watch?v=9zKuYvjFFS8

Respuestas

11 cag51 Aug 18 2020 at 07:56

¿Qué hace un codificador automático?

El codificador automático más simple toma una imagen de alta dimensión (digamos, 100K píxeles) a una representación de baja dimensión (digamos, un vector de longitud 10) y luego usa solo esas 10 características para intentar reconstruir la imagen original. Puedes imaginar una analogía con los humanos: miro a alguien, lo describo ("alto, de pelo oscuro, ...") y después de haber olvidado cómo son, trato de dibujarlo usando solo mis notas.

que estamos tratando de aprender

En otras palabras, ¿por qué molestarse? Algunas razones:

  • Reducción de dimensionalidad: 10 funciones son mucho más convenientes que 100K píxeles. Por ejemplo, puedo realizar una clasificación agrupando en el espacio de 10 dimensiones (mientras que agrupar en el espacio de 100K dimensiones sería intratable).
  • significado semántico: si todo va bien, cada una de las 10 características tendrá una "explicación" obvia; por ejemplo, ajustar un valor hará que el sujeto parezca más viejo (aunque normalmente no es tan simple). A diferencia de los valores de píxeles, que se ven afectados por la traslación, la rotación, etc.
  • Reconocimiento de excepciones: si entreno mi codificador automático en perros, normalmente debería hacer un buen trabajo codificando y decodificando imágenes de perros. Pero si pongo un gato, probablemente hará un trabajo terrible, lo que puedo decir porque la salida no se parece en nada a la entrada. Por lo tanto, buscar lugares donde un codificador automático hace un mal trabajo es una forma común de buscar anomalías.

He visto ejemplos en los que una imagen pasa de una cara que no sonríe a una sonriente, o de una imagen en blanco y negro a una imagen en color.

Hay muchos tipos diferentes de codificadores automáticos. Lo que describí anteriormente es el tipo más simple. Otro tipo común es un codificador automático de "eliminación de ruido": en lugar de reconstruir la imagen original, el objetivo es construir una imagen que esté relacionada con la imagen original, pero diferente.

El ejemplo clásico de esto es la eliminación de ruido (de ahí el nombre): puede tomar una imagen limpia, agregar un montón de ruido, ejecutarla a través de un codificador automático y luego recompensar al codificador automático por producir una imagen limpia . Entonces, la entrada (imagen ruidosa) es realmente diferente de la salida deseada (imagen limpia). Los ejemplos que da son similares.

El desafío al diseñar este tipo de codificadores automáticos normalmente es la pérdida: necesita algún mecanismo para decirle al codificador automático si hizo lo correcto o no.

sobre el VAE, utiliza un enfoque probabilístico, por lo que tenemos que aprender la media y la covarianza de un gaussiano.

Un VAE es un tercer tipo de codificador automático. Es un poco especial porque está bien fundamentado matemáticamente; no se necesitan métricas ad-hoc . Las matemáticas son demasiado complicadas para analizarlas aquí, pero las ideas clave son las siguientes:

  • Queremos que el espacio latente sea continuo. En lugar de asignar cada clase a su propia esquina del espacio latente, queremos que el espacio latente tenga una forma continua y bien definida (es decir, una gaussiana). Esto es bueno porque obliga al espacio latente a ser semánticamente significativo.
  • El mapeo entre imágenes y espacios latentes debe ser probabilístico más que determinista. Esto se debe a que el mismo sujeto puede producir varias imágenes.

Entonces, el flujo de trabajo es este:

  • Empiezas con tu imagen como antes
  • Como antes, su codificador determina un vector (digamos, longitud 200).
  • Pero ese vector no es un espacio latente. En cambio, usa ese vector como los parámetros para definir un espacio latente. Por ejemplo, tal vez elijas que tu espacio latente sea un gaussiano de 100 dimensiones. Un gaussiano de 100 dimensiones requerirá una media y una desviación estándar en cada dimensión; para esto se usa el vector de longitud 200.
  • Ahora tienes una distribución de probabilidad. Muestra un punto de esta distribución. Esta es la representación de tu imagen en el espacio latente.
  • Como antes, su decodificador convertirá este vector en una nueva "salida" (digamos, un vector de 200K de longitud).
  • Pero esta "salida" no es su imagen de salida. En su lugar, utilice estos parámetros de 200 K para definir un gaussiano de 100 K dimensional. Luego, muestrea un punto de esta distribución, esa es tu imagen de salida.

Por supuesto, no hay nada especial en un gaussiano, podría usar fácilmente otra distribución paramétrica. En la práctica, la gente suele utilizar gaussianos.

Esto a veces da mejores resultados que otros codificadores automáticos. Además, a veces obtienes resultados interesantes cuando miras entre las clases en tu espacio latente. La distancia de una imagen en el espacio latente desde el centro del cúmulo a veces se relaciona con la incertidumbre.

Además, existe la buena propiedad de que estos gaussianos de alta dimensión son distribuciones de probabilidad en un sentido matemático riguroso. Se aproximan a la probabilidad de que una imagen determinada pertenezca a una clase determinada. Por lo tanto, se piensa que los VAE podrán superar el "movimiento de manos" del aprendizaje profundo y volver a poner todo en una base probabilística bayesiana firme. Pero, por supuesto, es solo una aproximación, y la aproximación involucra muchas redes neuronales profundas, por lo que todavía hay muchos movimientos de manos en este momento.

Por cierto, me gusta usar esta pregunta durante las entrevistas: un número asombroso de personas afirman tener experiencia con EAV pero, de hecho, no se dan cuenta de que las EAV son diferentes a las EA "normales".

10 hH1sG0n3 Aug 17 2020 at 22:06

Una manera fácil de pensar en los codificadores automáticos es: qué tan bien se puede reconstruir una parte prticlar de la información a partir de su representación reducida o comprsentada de otro modo. Si llegó hasta aquí, significa que reconstruyó con éxito la oración anterior utilizando solo 92 de sus 103 caracteres originales.

Más específicamente, los autocodificadores son redes neuronales que están capacitadas para aprender codificaciones de datos eficientes de manera no supervisada. El objetivo es aprender una representación de un conjunto de datos determinado, entrenando a la red para que ignore señales "no importantes" como el ruido. Normalmente, los AE se consideran para la reducción de dimensionalidad.

Prácticamente, un AE

  • inicialmente comprime los datos de entrada en una representación de espacio latente
  • reconstruye la salida de esta representación del espacio latente
  • calcula la diferencia entre la entrada y la salida que se define como pérdida de reconstrucción.

En este ciclo de entrenamiento, el AE minimiza esta pérdida de reconstrucción para que la salida sea lo más similar posible a la entrada.

3 JoshPurtell Aug 17 2020 at 23:04

Un enfoque que he encontrado útil al considerar los codificadores automáticos es el siguiente resultado: mientras que los métodos como PCA identifican los ejes de variación máxima en el espacio de entrada, la introducción de funciones de activación no lineal en el codificador automático permite la identificación de ejes de máxima variación incrustada en una transformación (potencialmente) no lineal del espacio.

Como ejemplo, considere los datos

distribuidos según la función
, donde
. Aquí, el objetivo es almacenar entradas como compresiones unidimensionales. Un enfoque de PCA posiblemente podría introducir una pérdida significativa (siempre que el soporte sea lo suficientemente grande), pero un codificador automático con no linealidades podrá identificar el eje incrustado principal en el espacio de transformación como el que tiene una preimagen aproximadamente
en el espacio de entrada, y por lo tanto introducirá mucha menos pérdida. Puede pensar que el régimen de entrenamiento del codificador automático funciona para aproximar un functor de transformación que produce un espacio de transformación con una preimagen lineal en
. El autoencoder funciona almacenando entradas en términos de dónde se encuentran en la imagen lineal de
.

Observe que, en ausencia de las funciones de activación no lineal, un codificador automático se vuelve esencialmente equivalente a PCA, hasta un cambio en la base. Un ejercicio útil podría ser considerar por qué es así.