Autocodificador

Un autocodificador es un tipo de red neuronal artificial utilizada para aprender codificaciones eficientes de datos no etiquetados. El autocodificador aprende dos funciones, la primera es aquella que transforma los datos de entrada y la segunda es la función de decodificación que recrea los datos de entrada a partir de la representación codificada. El autocodificador aprende una representación eficiente (codificación) para un conjunto de datos, normalmente para reducir la dimensionalidad. Existen variantes cuyo objetivo es forzar a las representaciones aprendidas a asumir propiedades útiles. Algunos ejemplos son los autocodificadores regularizados, que son eficaces en el aprendizaje de representaciones para tareas de clasificación posteriores, y los autocodificadores variacionales, con aplicaciones como modelos generativos. Los autocodificadores pueden ser aplicados en muchos problemas, incluyendo el reconocimiento facial, la detección de características, la detección de anomalías y la adquisición del significado de las palabras. Los autocodificadores también son modelos generativos que pueden generar aleatoriamente nuevos datos que son similares a los datos de entrada. From Wikipedia, the free encyclopedia

Un autocodificador es un tipo de red neuronal artificial utilizada para aprender codificaciones eficientes de datos no etiquetados (aprendizaje no supervisado).[1][2] El autocodificador aprende dos funciones, la primera es aquella que transforma los datos de entrada y la segunda es la función de decodificación que recrea los datos de entrada a partir de la representación codificada. El autocodificador aprende una representación eficiente (codificación) para un conjunto de datos, normalmente para reducir la dimensionalidad.

Existen variantes cuyo objetivo es forzar a las representaciones aprendidas a asumir propiedades útiles.[3] Algunos ejemplos son los autocodificadores regularizados (Sparse, Denoising y Contractive), que son eficaces en el aprendizaje de representaciones para tareas de clasificación posteriores,[4] y los autocodificadores variacionales, con aplicaciones como modelos generativos.[5] Los autocodificadores pueden ser aplicados en muchos problemas, incluyendo el reconocimiento facial,[6] la detección de características,[7] la detección de anomalías y la adquisición del significado de las palabras.[8][9] Los autocodificadores también son modelos generativos que pueden generar aleatoriamente nuevos datos que son similares a los datos de entrada (datos de entrenamiento).[7]

Definición

Un autocodificador se define por los siguientes componentes:

  • Dos conjuntos: el espacio de los mensajes descodificados ; el espacio de los mensajes codificados . Casi siempre, ambos y son espacios euclidianos, es decir, para algunos .
  • Dos familias de funciones parametrizadas: la familia de codificadores parametrizado por y la familia de decodificadores , parametrizado por .

Para cualquier , normalmente escribimos , y nos referiremos a él como el código variable latente, la representación latente, el vector latente, etc. A la inversa, para cualquier , normalmente escribimos y nos referirnos a él como el mensaje (descodificado).

Usualmente, tanto el codificador como el descodificador se definen como perceptrones de múltiples capas. Por ejemplo, un codificador MLP de una capa es:

Donde es una función de activación por elementos, como una función sigmoidea o una unidad lineal rectificada, es una matriz denominada "peso", y es un vector llamado "sesgo".

Entrenamiento de un autocodificador

Un autocodificador, por sí mismo, es simplemente una tupla de dos funciones. Para juzgar su calidad, necesitamos una tarea. Una tarea se define mediante una distribución de probabilidad de referencia sobre y una función de "calidad de la reconstrucción de forma que mide cuánto difiere de .

Con ellos, podemos definir la función de pérdida para el autocodificador como:

El autocodificador óptimo para una tarea determinada es entonces . La búsqueda del autocodificador óptimo puede llevarse a cabo mediante cualquier técnica matemática de optimización, pero normalmente es realizado mediante el descenso de gradiente. Este proceso de búsqueda se denomina "entrenamiento del autocodificador". En la mayoría de las situaciones, la distribución de referencia es simplemente la distribución empírica dada por un conjunto de datos , de forma que:

Donde es la medida de Dirac, y la función de calidad es sólo la pérdida L2: y es la norma euclidiana. Entonces, el problema de buscar el autocodificador óptimo no es más que una optimización por mínimos cuadrados:

Interpretación

Esquema de un autocodificador básico

Un autocodificador consta de dos partes principales, una parte que convierte el mensaje en un código y una parte que reconstruye el mensaje a partir del código. Un autocodificador óptimo realizaría una reconstrucción lo más perfecta posible, definida como "casi perfecta" por la función de calidad de la reconstrucción .

La forma más sencilla de realizar perfectamente la tarea de copia sería duplicar la señal. Para suprimir este comportamiento, el espacio del código suele tener menos dimensiones que el espacio de mensajes .

Un autocodificador de este tipo se denomina subcompleto. Puede interpretarse como una compresión del mensaje o una reducción de su dimensionalidad.[1][10]

En el límite de un autocodificador incompleto ideal, cada código posible en el espacio del código se utiliza para codificar un mensaje que realmente aparece en la distribución y el decodificador también es perfecto: . Este autocodificador ideal puede utilizarse para generar mensajes indistinguibles de los reales, alimentando su decodificador con código arbitrario y obtener , que es un mensaje que realmente aparece en la distribución .

Si el espacio de código tiene una dimensión mayor (sobrecompleta) o igual al espacio de mensajes , o las unidades ocultas tienen suficiente capacidad, un autocodificador puede aprender la función de identidad y volverse inútil. Sin embargo, los resultados experimentales han demostrado que los autocodificadores sobrecompletos pueden aprender características útiles.[11]

En un escenario ideal, la dimensión del código y la capacidad del modelo podrían establecerse en función de la complejidad de la distribución de datos que se desea modelar. Una forma estándar de hacerlo es añadir modificaciones al autocodificador básico, que se detallarán a continuación.[3]

Historia

El autocodificador fue propuesto por primera vez por Kramer como una generalización no lineal del análisis de componentes principales (ACP) .[1] El autocodificador también ha sido llamado autoasociador,[12] o red Diábolo.[11][13] Sus primeras aplicaciones datan de principios de los años 90.[3][14][15] Su aplicación más tradicional fue la reducción de dimensionalidad o el aprendizaje de características, pero el concepto se generalizó para el aprendizaje de modelos generativos de datos.[16][17] Algunas de las IA más potentes de la década de 2010 involucraban autoencoders apilados dentro de redes neuronales profundas.[18]

Variaciones

Autocodificadores regularizados

Existen varias técnicas para evitar que los autocodificadores aprendan la función de identidad y para mejorar su capacidad de captar información importante y aprender representaciones más ricas.

Autocodificador disperso (SAE, por sus siglas en inglés)

Inspirados en la hipótesis de la codificación dispersa en neurociencia, los autocodificadores dispersos son variantes de los autocodificadores, tales que los códigos o mensajes tienden a ser códigos dispersos, es decir, es cercano a cero en la mayoría de las entradas. Los autocodificadores dispersos pueden incluir más (en lugar de menos) unidades ocultas que entradas, pero sólo se permite que un pequeño número de unidades ocultas estén activas al mismo tiempo.[18] Fomentar la dispersión mejora el rendimiento en tareas de clasificación.[19]

Esquema simple de un autocodificador disperso de una sola capa. Los nodos ocultos en amarillo brillante están activados, mientras que los de amarillo claro están inactivos. La activación depende de la entrada.

Hay dos formas principales de imponer la dispersión. Una consiste simplemente en fijar en cero todas las activaciones del código latente excepto las k más altas. Este es el autocodificador k-sparse.[20]

El autocodificador k-sparse inserta la siguiente "función k-sparse" en la capa latente de un autocodificador estándar:

Donde si se encuentra entre los k primeros, y 0 en caso contrario.

La retropropagación a través de es simple: se fija el gradiente en 0 para y se mantiene el gradiente para entradas.

Se trata esencialmente de una función ReLU generalizada.

La otra forma es una versión relajada del autocodificador k-sparse. En lugar de forzar la dispersión, añadimos una pérdida de regularización por dispersión y optimizamos para:

Donde mide cuánta dispersión queremos imponer.[21]

La arquitectura del autocodificador tiene capas. Para definir una pérdida de regularización de la dispersión, necesitamos una dispersión "deseada" para cada capa, un peso para determinar en qué medida debe aplicarse cada dispersión, y una función para medir cuánto difieren dos esparcimientos.

Para cada entrada , dejar que la dispersión real de la activación en cada capa sea

Donde es la activación en la neurona de la capa a la entrada . La pérdida de dispersión en la entrada para una capa es , y la pérdida de regularización de la dispersión para todo el autocodificador es la suma ponderada esperada de las pérdidas de dispersión:

Usualmente la función es la divergencia de Kullback-Leibler (KL), como:[19] [21][22][23]

O la pérdida L1, como , o la pérdida L2, como

Alternativamente, la pérdida por regularización de la dispersión puede definirse sin referencia a ninguna "dispersión deseada", sino simplemente forzando tanta dispersión como sea posible. En este caso, se puede definir la pérdida de regularización de la dispersión como:

Donde es el vector de activación en la capa del autocodificador. La norma suele ser la norma L1 (para obtener el autocodificador disperso L1) o la norma L2 (para obtener el autocodificador disperso L2).

Autocodificador de eliminación de ruido (DAE)

Los autocodificadores de eliminación de ruido (DAE, por sus siglas en inglés) intentan conseguir una buena representación cambiando el criterio de reconstrucción.[3][4]

Una DAE, originalmente denominada "red autoasociativa robusta",[2] se entrena corrompiendo intencionadamente las entradas de un autocodificador estándar durante el entrenamiento. Un proceso de ruido se define por una distribución de probabilidad sobre las funciones . Es decir, la función toma un mensaje y lo corrompe a una versión ruidosa . La función se selecciona aleatoriamente, con una distribución de probabilidad .

Dada una tarea , el problema de entrenamiento de un DAE es el problema de optimización:

Es decir, el DAE óptimo debe tomar cualquier mensaje ruidoso e intentar recuperar el mensaje original sin ruido, de ahí el nombre de "denoising".

Normalmente, el proceso de ruido sólo se aplica durante el entrenamiento y las pruebas, no durante el uso posterior.

El uso del DAE depende de dos supuestos:

  • Existen representaciones de los mensajes que son relativamente estables y robustas frente al tipo de ruido que es probable que encontremos;
  • Dichas representaciones captan estructuras en la distribución de entrada que son útiles para nuestros fines.[4]

Algunos ejemplos de procesos ruidosos son:

  • ruido gaussiano isótropo aditivo,
  • ruido de enmascaramiento (una fracción de la entrada se elige aleatoriamente y se pone a 0)
  • ruido de sal y pimienta (una fracción de la entrada se elige al azar y se fija aleatoriamente en su valor mínimo o máximo).[4]

Autocodificador contractivo (CAE, por sus siglas en inglés)

Un autocodificador contractivo añade la pérdida de regularización contractiva a la pérdida del autocodificador estándar:

Donde mide el grado de contracción que queremos imponer. La pérdida de regularización contractiva se define como la norma de Frobenius esperada de la matriz jacobiana de las activaciones del codificador con respecto a la entrada:

Para entender lo que mide, tenga en cuenta que:

Para cualquier mensaje , y pequeña variación en él. Por lo tanto, si es pequeño, significa que una pequeña vecindad del mensaje se corresponde con una pequeña vecindad de su código. Se trata de una propiedad deseada, ya que significa que una pequeña variación en el mensaje conduce a una variación pequeña, incluso nula, en su código, al igual que dos imágenes pueden parecer iguales aunque no lo sean exactamente.

El DAE puede entenderse como un límite infinitesimal del CAE: en el límite de un ruido de entrada gaussiano pequeño, los DAE hacen que la función de reconstrucción resista perturbaciones de entrada pequeñas pero de tamaño finito, mientras que los CAE hacen que las características extraídas resistan perturbaciones de entrada infinitesimales.

Autocodificador de longitud de descripción mínima

[24] Autocodificador concreto

El autocodificador concreto está diseñado para la selección de características discretas.[25] Un autocodificador concreto fuerza al espacio latente a consistir sólo en un número de características especificado por el usuario. El autocodificador concreto utiliza una relajación continua de la distribución categórica para permitir que los gradientes pasen a través de la capa de selección de características, lo que hace posible utilizar la retropropagación estándar para aprender un subconjunto óptimo de características de entrada que minimicen la pérdida de reconstrucción.

Autocodificador variacional (VAE)

Los autocodificadores variacionales (VAE, por sus siglas en inglés) pertenecen a la familia de los métodos bayesianos variacionales. A pesar de las similitudes arquitectónicas con los autocodificadores básicos, los VAE son arquitecturas con objetivos diferentes y con una formulación matemática completamente distinta. En este caso, el espacio latente está compuesto por una mezcla de distribuciones en lugar de un vector fijo.

Dado un conjunto de datos de entrada caracterizada por una función de probabilidad desconocida y un vector de codificación latente multivariante el objetivo es modelar los datos como una distribución , con definido como el conjunto de los parámetros de la red de forma que .

Ventajas de la profundidad

Estructura esquemática de un autoencoder con 3 capas ocultas totalmente conectadas. El código (z, o h para referencia en el texto) es la capa más interna.

Los autocodificadores suelen entrenarse con un codificador de una sola capa y un decodificador de una sola capa, pero el uso de codificadores y decodificadores de muchas capas (profundos) ofrece muchas ventajas.[3]

  • La profundidad puede reducir exponencialmente el coste computacional de representar algunas funciones.
  • La profundidad puede reducir exponencialmente la cantidad de datos de entrenamiento necesarios para aprender algunas funciones.
  • Experimentalmente, los autocodificadores profundos ofrecen una mejor compresión en comparación con los autocodificadores superficiales o lineales.[10]

Formación

Geoffrey Hinton desarrolló la técnica de red de creencia profunda para entrenar autocodificadores profundos de muchas capas. Su método consiste en tratar cada conjunto vecino de dos capas como una máquina de Boltzmann restringida para que el pre-entrenamiento se aproxime a una buena solución y, a continuación, utilizar la retropropagación para afinar los resultados.[10]

Los investigadores han debatido si el entrenamiento conjunto (es decir, el entrenamiento de toda la arquitectura junto con un único objetivo de reconstrucción global para optimizar) sería mejor para los autocodificadores profundos.[26] Un estudio de 2015 mostró que el entrenamiento conjunto aprende mejores modelos de datos junto con características más representativas para la clasificación en comparación con el método por capas.[26] Sin embargo, sus experimentos mostraron que el éxito del entrenamiento conjunto depende en gran medida de las estrategias de regularización adoptadas.[26][27]

Aplicaciones

Véase también

Referencias

Related Articles

Wikiwand AI