talón ¿Qué es un Autocodificador? - Unite.AI
Contáctanos
Clase magistral de IA:

AI 101

¿Qué es un Autocodificador?

mm
Actualizado on

Si ha leído antes sobre técnicas de aprendizaje no supervisado, es posible que se haya encontrado con el término "codificador automático”. 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?

Brevemente, los codificadores automáticos funcionan tomando datos, comprimiéndolos y codificándolos, y luego reconstruyéndolos a partir de la representación de codificación. El modelo se entrena hasta que se minimiza la pérdida y los datos se reproducen lo más fielmente posible. A través de este proceso, un codificador automático puede aprender las características importantes de los datos. Si bien esa es una definición rápida de un codificador automático, sería beneficioso echar un vistazo más de cerca a los codificadores automáticos y obtener una mejor comprensión de cómo funcionan. Este artículo intentará desmitificar los codificadores automáticos, explicando la arquitectura de los codificadores automáticos y sus aplicaciones.

¿Qué es un Autocodificador?

Codificadores automáticos son redes neuronales. Las redes neuronales se componen de múltiples capas, y el aspecto definitorio de un codificador automático es 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 codificador automático tiene como objetivo replicar los datos de entrada. 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. Hay tres componentes en un codificador automático: 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 codificador automático, 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ía entrenar una red para que simplemente reconstruya los datos que se le proporcionan? La razón es que la red aprende la "esencia" o las características más importantes de los datos de entrada. Una vez que haya entrenado la red, se puede crear un modelo que pueda sintetizar datos similares, con la adición o sustracción de ciertas características de destino. Por ejemplo, podría entrenar un codificador automático en imágenes granulosas y luego usar el modelo entrenado para eliminar el grano/ruido de la imagen.

Arquitectura del codificador automático

Echemos un vistazo a la arquitectura de un autocodificador. Discutiremos la arquitectura principal de un codificador automático aquí. Hay variaciones en esta arquitectura general que discutiremos en la siguiente sección.

Foto: Michela Massi vía Wikimedia Commons,(https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)

Como se mencionó anteriormente, un codificador automático 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 aquí es 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 codificador automático

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

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. Esto significa que solo pueden comprimir datos que son muy similares a los datos en los que ya se ha entrenado el 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 del 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.

Escaso

Foto: Michela Massi a través de Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

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, codificador automático dispersoLos s 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

Autocodificadores 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 entradas similares tendrán codificaciones similares.

Convolucional

Codificadores automáticos convolucionales codifique 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. Al igual que las redes neuronales convolucionales, 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

Foto: MAL a través de Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)

Codificadores automáticos de eliminación de ruido introducir 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

Codificadores automáticos variacionales operan haciendo suposiciones acerca de 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 utilizar para una amplia variedad de aplicaciones, pero normalmente 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. Esto 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.