¿Qué es un codificador / decodificador en aprendizaje profundo?

Un codificador es una red (FC, CNN, RNN, etc.) que toma la entrada y emite un mapa de características / vector / tensor. Estos vectores de características contienen la información, las características, que representan la entrada. El decodificador es nuevamente una red (generalmente la misma estructura de red que el codificador pero en orientación opuesta) que toma el vector de características del codificador y proporciona la mejor coincidencia más cercana a la entrada real o la salida prevista.

Los codificadores se entrenan con los decodificadores. No hay etiquetas (por lo tanto, sin supervisión). La función de pérdida se basa en calcular el delta entre la entrada real y la reconstruida. El optimizador intentará entrenar tanto el codificador como el decodificador para reducir esta pérdida de reconstrucción.

Una vez entrenado, el codificador proporcionará el vector de características para la entrada que el decodificador puede usar para construir la entrada con las características que más importan para hacer que la entrada reconstruida sea reconocible como la entrada real.

La misma técnica se está utilizando en varias aplicaciones diferentes, como en traducción, modelos generativos, etc.

Es importante saber que en la aplicación real, las personas no intentan reconstruir la entrada real, sino que quieren asignar / traducir / asociar entradas a ciertas salidas. Por ejemplo, traducir oraciones de francés a inglés, etc.

Un codificador / decodificador en aprendizaje profundo es una técnica utilizada principalmente en la generación de texto. Sobre todo hoy en día en modelos de traducción de texto. El método global se llama “secuencia a secuencia” [1]. Como tiene una secuencia de entrada (en francés, por ejemplo) y la traducirá al inglés, generará otra secuencia.

Ahora citaré una buena descripción que encontré en un github [2]. Enlace a continuación:

“En general, el codificador codifica la secuencia de entrada en una representación interna llamada ‘vector de contexto’ que utiliza el decodificador para generar la secuencia de salida. Las longitudes de las secuencias de entrada y salida pueden ser diferentes, ya que no hay una relación explícita uno a uno entre las secuencias de entrada y salida “.

Espero que ahora entiendas el concepto. Un codificador / decodificador no es un codificador automático, como se indica en las otras respuestas. Estos son dos conceptos diferentes.

Notas al pie

[1] https://arxiv.org/pdf/1409.3215.pdf

[2] farizrahman4u / seq2seq

Hay muchas buenas respuestas aquí. Algunos cubren una variedad de diferentes tipos de codificadores-decodificadores (CNN, RNN, etc.), mientras que otros cubren una profundidad de un tipo (digamos RNN). Trataré de profundizar en una sola respuesta, y también daré algunos antecedentes teóricos sobre ella.

Importancia de las representaciones en ML

Los algoritmos de aprendizaje automático toman características como entradas y producen algo de salida. La forma en que representamos las características marca una gran diferencia en el rendimiento de nuestros algoritmos de aprendizaje. Un ejemplo clásico de esto del libro Deep Learning es:

Las representaciones forman un componente muy importante de los algoritmos de aprendizaje automático. Tradicionalmente, muchos algoritmos de aprendizaje automático tomaron características hechas a mano, lo que significa que el diseñador eligió explícitamente las características y su representación (ingeniería de características) y las introdujo en el algoritmo. Para problemas complejos como la visión por computadora, a las personas se les ocurrieron representaciones innovadoras como HOG, por ejemplo.

Debido a tales representaciones, hay una diferencia que debe hacerse entre las “entradas en bruto” y las características que se ingresan al modelo. Por ejemplo, en el reconocimiento facial, los píxeles de una imagen de una cara serán la entrada sin formato, mientras que las características HOG de la imagen pueden ser la entrada real al modelo ML.

Característica de aprendizaje

A alguien se le ocurrió la idea de que podemos usar un algoritmo para aprender la representación de la característica en sí, llamada acertadamente aprendizaje de características. El aprendizaje profundo utiliza una red neuronal para lograr esta tarea.

De Wikipedia:

El aprendizaje profundo es una clase de algoritmos de aprendizaje automático que:

  • use una cascada de múltiples capas de unidades de procesamiento no lineales para la extracción y transformación de características. Cada capa sucesiva utiliza la salida de la capa anterior como entrada.
  • aprender de maneras supervisadas (por ejemplo, clasificación) y / o sin supervisión (por ejemplo, análisis de patrones).
  • aprender múltiples niveles de representaciones que corresponden a diferentes niveles de abstracción; Los niveles forman una jerarquía de conceptos.

La mayoría de los modelos modernos de aprendizaje profundo se basan en una red neuronal artificial, aunque también pueden incluir fórmulas proposicionales o variables latentes organizadas en capas en modelos generativos profundos, como los nodos en Deep Belief Networks y Deep Boltzmann Machines.

Las primeras capas de una red neuronal extraen características de los datos o, en otras palabras, asignan entradas sin procesar a representaciones de características eficientes. Las siguientes capas (generalmente capas completamente conectadas) mezclan y combinan y combinan estas características para producir una salida.

Encoder Decoder Network

Algunas arquitecturas de red apuntan explícitamente a aprovechar esta capacidad de las redes neuronales para aprender representaciones eficientes. Utilizan una red de codificador para mapear entradas sin procesar a representaciones de características, y una red de decodificador para tomar esta representación de características como entrada, procesarla para tomar su decisión y producir una salida. Esto se llama una red codificador-decodificador.

Teóricamente, las partes del codificador y decodificador se pueden usar de forma independiente entre sí. Por ejemplo, un codificador RNN se puede usar para codificar las características de un correo electrónico entrante como un “vector de características”, que luego se usa para predecir si el correo electrónico es spam o no. Sin embargo, el codificador neuronal y los decodificadores a menudo se usan juntos debido al buen rendimiento en diversas tareas.

CNN

En una CNN, una red de codificador-decodificador generalmente se ve así (un codificador CNN y un decodificador CNN):

Créditos de imagen

Esta es una red para realizar la segmentación semántica de una imagen. La mitad izquierda de la red asigna píxeles de imagen en bruto a una representación rica de una colección de vectores de características. La mitad derecha de la red toma estas características, produce una salida y la asigna de nuevo al formato “sin procesar” (en este caso, píxeles de imagen).

RNN

En un RNN, una red de codificador-decodificador generalmente se ve así (un codificador RNN y un decodificador RNN):

Esta es una red para predecir respuestas para correos electrónicos entrantes. La mitad izquierda de la red codifica el correo electrónico en un vector de características, y la mitad derecha de la red decodifica el vector de características para producir predicciones de palabras.

Estilo mixto

Tenga en cuenta que no es necesario usar solo CNN o solo RNN para codificador y decodificador. Podemos mezclar y combinar y usar un codificador CNN con decodificador RNN, o viceversa; se puede usar cualquier combinación que sea adecuada para la tarea dada.

Un ejemplo de un documento que implementé recientemente desde cero, Modelo de atención guiada por texto para subtítulos de imágenes (T-ATT):

Mira las partes que he resaltado en rojo. El STV se refiere a vectores de salto de pensamiento. STV en sí mismo es una arquitectura codificador-decodificador. Un extracto de su artículo:

Tratamos los pensamientos de omisión en el marco de los modelos de codificador-decodificador. Es decir, un codificador asigna palabras a un vector de oración y se usa un decodificador para generar las oraciones circundantes. Los modelos de codificador-decodificador han ganado mucha tracción para la traducción automática neuronal. En esta configuración, se usa un codificador para asignar, por ejemplo, una oración en inglés a un vector. El decodificador entonces condiciona este vector para generar una traducción para la oración fuente en inglés. Se han explorado varias opciones de pares codificador-decodificador, incluidos ConvNet-RNN, RNN-RNN y LSTM-LSTM.

Los autores de T-ATT usan el codificador de STV para codificar subtítulos. Además, en la imagen de arriba, la CNN se refiere a una VGGNet o una ResNet, que los autores usan para codificar imágenes. El LSTM que he resaltado en rojo a la derecha se refiere al decodificador que usa la representación intermedia generada por la tubería (que se muestra en el diagrama como ‘Vector de contexto’) para predecir una serie de palabras que forman un título para la imagen de entrada. Por lo tanto, utilizan un codificador CNN, un codificador RNN y un decodificador LSTM juntos.

Conclusión

Espero que esto proporcione una comprensión de las arquitecturas codificador-decodificador, su motivación de fondo y la teoría subyacente. Espero que los ejemplos del mundo real de los documentos hayan ayudado a concretar los conceptos.

¿Te estás refiriendo a Autoencoders?

Los codificadores automáticos son redes que intentan reconstruir su propia entrada. Construye la red para que reduzca el tamaño de entrada mediante el uso de una o más capas ocultas, hasta que alcance una capa oculta razonablemente pequeña en el medio. Como resultado, sus datos se han comprimido (codificado) en algunas variables. A partir de esta representación oculta, la red intenta reconstruir (decodificar) la entrada nuevamente.

Para hacer un buen trabajo en la reconstrucción de la entrada, la red tiene que aprender una buena representación de los datos en la capa oculta del medio. Esto puede ser útil para reducir la dimensionalidad o para generar nuevos datos “sintéticos” a partir de una representación oculta dada.

  • Codificador: asigna datos de entrada (sensoriales) a una representación de características diferente (a menudo de menor dimensión, comprimida).
  • Decodificador: asigna la representación de la función nuevamente al espacio de datos de entrada.

En una red perfecta de Encoder plus Decoder (también conocida como autoencoder), la entrada en el codificador coincide con la salida del decodificador, de modo que la red puede reconstruir su propia entrada.

Por lo general, se refiere a un NN que aprende una representación dimensional más baja de los datos originales. Puede pensar en ello como un PCA multicapa con no linealidades (más o menos).

Para una introducción más completa, vaya a:

https://web.stanford.edu/class/c

o la segunda conferencia de 9.520 del MIT:

la conferencia no es particularmente específica para DL, pero se aplica el concepto general, solo use un NN (con alguna regularización potencial) en su lugar.

More Interesting

Dada una red de aprendizaje profundo, ¿se puede entrenar para enseñar (por ejemplo, resolviendo la secuencia óptima de ejemplos o lo que sea) otra red? Si es así, ¿se puede resolver este problema (enseñanza) utilizando técnicas de aprendizaje profundo?

¿Cuál es la diferencia entre la clasificación de vectores de soporte y la regresión? ¿Un regresor de vectores de soporte se comporta como una red neuronal por casualidad?

¿Cuáles son las cosas tecnológicas que más impactarán en el futuro de los trabajos (aprendizaje automático, aprendizaje profundo, redes neuronales, etc.)?

Cómo lidiar con datos sin patrones en los que necesito realizar un modelo de clasificación

¿Por qué la biblioteca de estadísticas de Python es tan limitada en métodos bioestadísticos avanzados en comparación con R, mientras que la biblioteca de Python de Machine Learning es mucho mejor?

¿Hay alguna conexión entre el aprendizaje de kernel múltiple (MLK) y el aprendizaje profundo?

¿Cómo debería abordar el problema de segmentar el césped de una imagen?

¿Es el sesgo entre las mejores universidades frente a otras universidades en los Estados Unidos tan malo como el sesgo de IIT frente al resto de la India?

¿Cómo es tomar CS 228: modelo gráfico probabilístico en Stanford?

¿Cuáles son los temas candentes en el aprendizaje automático y la lógica difusa juntos?

¿Cuáles son algunos algoritmos para resolver el problema de los bandidos multi-armados?

¿Cómo puedo usar Gensim LDA para la clasificación binaria?

¿Dónde aprendo Machine Learning?

Como estudiante que realiza un curso de algoritmos de aprendizaje automático, ¿en qué debe centrarse el objetivo principal para maximizar el conocimiento aplicable al final del semestre?

¿Podría la IA volverse autónoma y aprender y adaptarse de manera no supervisada a través del aprendizaje profundo?