¿Qué es un Autocodificador?

Si has leído antes sobre las técnicas de aprendizaje no supervisado es posible que te hayas encontrado con el término de autocodificador“.

Guía de Inteligencia Artificial

Los codificadores automáticos son una de las formas principales en que se desarrollan modelos de aprendizaje no supervisados. Sin embargo, ¿Qué es exactamente un codificador automático o autocodificador?

Brevemente, los codificadores automáticos funcionan tomando datos, comprimiéndolos y codificándolos, para luego reconstruirlos a partir de la representación de la codificación. El modelo se entrena hasta que se minimiza la pérdida y los datos se reproducen lo más fielmente posibles.

A través de este proceso, un autocodificador puede aprender las características más importantes de los datos. Si bien, esa es una definición rápida de un autocodificador, echemos un vistazo más profundoa a los codificadores automáticos e intentemos comprender mejor el cómo funcionan.

Este artículo intenta desmitificar los autocodificadores, explican la arquitectura de los codificadores automáticos y sus aplicaciones.

Todo lo que debes saber un Autocodificador

Los autocodificadores son redes neuronales. Las redes neuronales se componen de múltiples capas y el aspecto definitorio de un codificador automático es, el que las capas de entrada contienen exactamente tanta información como la capa de salida.

La razón por la que la capa de entrada y la capa de salida tienen exactamente el mismo número de unidades es que un autocodificador tiene como objetivo replicar los datos de entrada. Para ello, produce una copia de los datos después de analizarlos y reconstruirlos sin supervisión.

Los datos que se mueven a través de un codificador automático no solo se asignan directamente de la entrada a la salida, lo que significa que la red no solo copia los datos de entrada.

Existen tres componentes principales en un autocodificador: Una parte de codificación (entrada) que comprime los datos, un componente que maneja los datos comprimidos (o cuello de botella) y una parte de decodificador (salida).

Cuando los datos se introducen en un autocodificador, se codifican y luego se comprimen a un tamaño más pequeño. Luego, la red se entrena en los datos codificados/comprimidos y genera una recreación de esos datos.

Entonces, ¿Por qué querrías entrenar una red para que simplemente reconstruya los datos que se le proporcionan? La razón es que la red aprenda la “esencia” o las características más importantes de los datos de entrada.

Una vez que haya entrenado la red, se pueda crear un modelo capaz de sintetizar datos similares, con la adición o sustracción de ciertas características de destino. Por ejemplo, entrenar un autocodificador en imágenes granuladas repletas de ruido y luego usar el modelo entrenado para eliminar el grano o ruido de la imagen.

Arquitectura del autocodificador

Hablemos un poco sobre la arquitectura de un codificador automático. Discutamos la arquitectura principal de un codificador automático. Pueden existir muchas variaciones en esta arquitectura general, la que veremos a continuación.

Como se mencionó anteriormente, un autocodificador se puede dividir esencialmente en tres componentes diferentes: El codificador, un cuello de botella y el decodificador.

La parte del codificador del codificador automático es típicamente una red de alimentación directa, densamente conectada. El propósito de las capas de codificación es tomar los datos de entrada y comprimirlos en una representación de espacio latente, generando una nueva representación de los datos que tiene una dimensionalidad reducida.

Las capas de código o el cuello de botella, se ocupan de la representación comprimida de los datos. El código de cuello de botella está cuidadosamente diseñado para determinar las partes más relevantes de los datos observados o dicho de otro modo, las características de los datos que son más importantes para la reconstrucción de datos.

El objetivo final es, el de determinar qué aspectos de los datos deben conservarse y cuáles pueden descartarse. El código de cuello de botella debe equilibrar dos consideraciones diferentes: El tamaño de la representación (qué tan compacta es la representación) y la relevancia de la variable/característica.

El cuello de botella realiza una activación por elementos en los pesos y sesgos de la red. La capa de cuello de botella también se denomina a veces representación latente o variables latentes.

La capa del decodificador es la responsable de tomar los datos comprimidos y volver a convertirlos en una representación con las mismas dimensiones que los datos originales sin modificar. La conversión se realiza con la representación del espacio latente que creó el codificador.

La arquitectura más básica de un codificador automático es una arquitectura de avance, con una estructura muy parecida a un perceptrón de una sola capa que se usa en perceptrones multicapa. Al igual que las redes neuronales de avance regulares, el codificador automático se entrena mediante el uso de retropropagación.

Atributos de un autocodificador

Hay varios tipos de codificadores automáticos, pero todos tienen ciertas propiedades que los unen a todos. Los codificadores automáticos aprenden automáticamente.

No requieren etiquetas y si se proporcionan suficientes datos, es fácil obtener un codificador automático para alcanzar un alto rendimiento en un tipo específico de datos de entrada.

Los codificadores automáticos son específicos de datos. Eso significa que solamente pueden comprimir datos que son muy similares a los datos en los que ya se ha entrenado el propio codificador automático.

Los codificadores automáticos también tienen pérdidas, lo que significa que las salidas del modelo se degradarán en comparación con los datos de entrada.

Al diseñar un codificador automático, los ingenieros de aprendizaje automático deben prestar atención a cuatro hiperparámetros de modelo diferentes: Tamaño del código, número de capa, nodos por capa y función de pérdida.

El tamaño del código decide cuántos nodos comienzan la parte media de la red y menos nodos comprimen más los datos. En un codificador automático profundo, mientras que la cantidad de capas puede ser cualquier número que el ingeniero considere apropiado, la cantidad de nodos en una capa debería disminuir a medida que avanza el codificador.

Mientras tanto, ocurre lo contrario en el decodificador, lo que significa que la cantidad de nodos por capa debería aumentar a medida que las capas del decodificador se acercan a la capa final.

Finalmente, la función de pérdida de un codificador automático suele ser una entropía cruzada binaria o un error cuadrático medio. La entropía cruzada binaria es apropiada para instancias donde los valores de entrada de los datos están en un rango de 0 a 1.

Tipos de codificador automático

Como se mencionó anteriormente, existen variaciones en la arquitectura clásica del codificador automático. Examinemos las diferentes arquitecturas de codificador automático.

Si bien, los codificadores automáticos suelen tener un cuello de botella que comprime los datos a través de una reducción de nodos, los codificadores automáticos dispersos son una alternativa a ese formato operativo típico. En una red dispersa, las capas ocultas mantienen el mismo tamaño que las capas de codificador y decodificador.

En su lugar, se penalizan las activaciones dentro de una capa dada, configurándola para que la función de pérdida capture mejor las características estadísticas de los datos de entrada.

Para decirlo de otra manera, mientras que las capas ocultas de un codificador automático disperso tienen más unidades que un codificador automático tradicional, solo un cierto porcentaje de ellas están activas en un momento dado.

Las funciones de activación más impactantes se conservan y otras se ignoran, y esta restricción ayuda a la red a determinar solo las características más destacadas de los datos de entrada.

Contractivo

Los codificadores automáticos contractivos están diseñados para resistir pequeñas variaciones en los datos, manteniendo una representación consistente de los datos. Esto se logra aplicando una penalización a la función de pérdida.

Esta técnica de regularización se basa en la norma de Frobenius de la matriz jacobiana para las activaciones del codificador de entrada. El efecto de esta técnica de regularización es que el modelo se ve obligado a construir una codificación donde las entradas similares tendrán codificaciones similares.

Convolucional

Los codificadores automáticos convolucionalescodifican los datos de entrada dividiendo los datos en subsecciones y luego convirtiendo estas subsecciones en señales simples que se suman para crear una nueva representación de los datos. De forma similar a las redes neuronales de convolución, un codificador automático convolucional se especializa en el aprendizaje de datos de imágenes y utiliza un filtro que se mueve por toda la imagen sección por sección.

Las codificaciones generadas por la capa de codificación se pueden usar para reconstruir la imagen, reflejar la imagen o modificar la geometría de la imagen. Una vez que la red ha aprendido los filtros, se pueden usar en cualquier entrada lo suficientemente similar para extraer las características de la imagen.

Eliminación de ruido

Los autocodificadores de eliminación de ruido introducen ruido en la codificación, lo que da como resultado una codificación que es una versión corrupta de los datos de entrada originales. Esta versión corrupta de los datos se usa para entrenar el modelo, pero la función de pérdida compara los valores de salida con la entrada original y no con la entrada corrupta.

El objetivo es que la red pueda reproducir la versión original y no corrupta de la imagen. Al comparar los datos dañados con los datos originales, la red aprende qué características de los datos son las más importantes y cuáles no son importantes/corrupciones.

En otras palabras, para que un modelo elimine el ruido de las imágenes corruptas, debe haber extraído las características importantes de los datos de la imagen.

Variacional

Los codificadores automáticos variacionales funcionan haciendo suposiciones sobre cómo se distribuyen las variables latentes de los datos. Un autocodificador variacional produce una distribución de probabilidad para las diferentes características de las imágenes de entrenamiento/los atributos latentes.

Durante el entrenamiento, el codificador crea distribuciones latentes para las diferentes características de las imágenes de entrada.

Debido a que el modelo aprende las características o imágenes como distribuciones gaussianas en lugar de valores discretos, puede usarse para generar nuevas imágenes. La distribución gaussiana se muestrea para crear un vector que se alimenta a la red de decodificación, que genera una imagen basada en este vector de muestras.

Esencialmente, el modelo aprende características comunes de las imágenes de entrenamiento y les asigna alguna probabilidad de que ocurran. Luego, la distribución de probabilidad se puede usar para aplicar ingeniería inversa a una imagen, generando nuevas imágenes que se asemejan a las imágenes de entrenamiento originales.

Al entrenar la red, los datos codificados se analizan y el modelo de reconocimiento genera dos vectores, extrayendo la media y la desviación estándar de las imágenes. Se crea una distribución basada en estos valores. Esto se hace para los diferentes estados latentes.

Luego, el decodificador toma muestras aleatorias de la distribución correspondiente y las usa para reconstruir las entradas iniciales a la red.

Aplicaciones de codificador automático

Los codificadores automáticos se pueden usar para una amplia variedad de aplicaciones, pero generalmente se usan para tareas como reducción de dimensionalidad, eliminación de ruido de datos, extracción de características, generación de imágenes, predicción de secuencia a secuencia y sistemas de recomendación.

La eliminación de ruido de datos es el uso de codificadores automáticos para eliminar el grano/ruido de las imágenes. De manera similar, los codificadores automáticos se pueden usar para reparar otros tipos de daños en la imagen, como imágenes borrosas o secciones faltantes en las imágenes.

La reducción de la dimensionalidad puede ayudar a las redes de alta capacidad a aprender características útiles de las imágenes, lo que significa que los codificadores automáticos se pueden usar para aumentar el entrenamiento de otros tipos de redes neuronales.

Eso también se aplica al uso de codificadores automáticos para la extracción de características, ya que los codificadores automáticos se pueden usar para identificar características de otros conjuntos de datos de entrenamiento para entrenar otros modelos.

En términos de generación de imágenes, los codificadores automáticos se pueden usar para generar imágenes humanas falsas o personajes animados, lo que tiene aplicaciones en el diseño de sistemas de reconocimiento facial o en la automatización de ciertos aspectos de la animación.

Los modelos de predicción de secuencia a secuencia se pueden usar para determinar la estructura temporal de los datos, lo que significa que se puede usar un codificador automático para generar el siguiente incluso en una secuencia. Por esta razón, se podría usar un codificador automático para generar videos.

Finalmente, los codificadores automáticos profundos se pueden usar para crear sistemas de recomendación al detectar patrones relacionados con el interés del usuario, con el codificador analizando los datos de participación del usuario y el decodificador creando recomendaciones que se ajustan a los patrones establecidos.

Relacionados