¿Hay alguna diferencia entre los codificadores automáticos y el codificador-decodificador en el aprendizaje profundo?

Así es como vería estos dos términos (informalmente). Piense en el codificador-decodificador como un diseño de marco / arquitectura muy general. En este diseño, tiene alguna función que asigna un espacio de entrada, cualquiera que sea, a un espacio diferente / latente (el “codificador”). El decodificador es simplemente la función complementaria que crea un mapa desde el espacio latente (del codificador) a otro espacio objetivo (qué es lo que queremos decodificar desde el espacio latente). Tenga en cuenta que simplemente mapeando espacios y vinculándolos a través de un espacio latente compartido, podría hacer algo como mapear una secuencia de tokens en inglés (es decir, una oración en inglés) a una secuencia de tokens en francés (es decir, la traducción de esa oración en inglés al francés). En algunos modelos de traducción neural, mapeas una secuencia en inglés a un vector fijo (por ejemplo, el último estado, que se encuentra al llegar a un signo de puntuación, de la red recurrente que utilizas para procesar la oración de forma iterativa), desde el cual decodificarás a una secuencia en francés .

Un autoencoder (o autoasociador, como se lo conocía clásicamente) es un caso especial de una arquitectura de codificador-decodificador: primero, el espacio objetivo es el mismo que el espacio de entrada (es decir, entradas en inglés a objetivos en inglés) y segundo, el objetivo debe ser igual a la entrada. Por lo tanto, estaríamos asignando algo así como vectores a vectores (tenga en cuenta que esto podría ser una secuencia, ya que son codificadores automáticos recurrentes, pero ahora en este caso no está prediciendo el futuro, sino simplemente reconstruyendo el presente dado un estado / memoria y el presente). Ahora, un autoencoder realmente tiene la intención de hacer autoasociación, por lo que esencialmente estamos tratando de construir un modelo para “recuperar” la entrada, lo que le permite al autoencoder hacer cosas como completar el patrón, por lo que si le damos a nuestro autoencoder una entrada parcialmente corrupta, sería capaz de “recuperar” el patrón correcto de la memoria.

Además, en general, creamos autoencoders porque estamos más interesados ​​en obtener una representación en lugar de aprender un modelo predictivo (aunque uno podría argumentar que también obtenemos representaciones bastante útiles de los modelos predictivos …).

Pero la historia corta es simple: un autoencoder es realmente una instancia especial de un codificador-decodificador. Esto es especialmente útil cuando queremos desacoplar el codificador y el decodificador para crear algo así como un autoencoder variacional, que también nos libera de tener que hacer que el decodificador tenga un diseño simétrico al codificador (es decir, el codificador podría ser una red convolucional de 2 capas mientras que el decodificador podría ser una red deconvolucional de 3 capas). En un autoencoder variacional, la idea del espacio latente se vuelve más clara, porque ahora realmente mapeamos la entrada (como una imagen o un vector de documento) a una variable latente, a partir de la cual reconstruiremos la entrada original / misma (como la imagen o vector de documento).

También creo que una gran confusión proviene del mal uso de la terminología. Hoy en día, la gente de ML especialmente tiende a mezclar y combinar palabras (algunas lo hacen para que las cosas suenen más frescas o para encontrar palabras de moda que atraerán lectores / financiadores / fama / gloria / etc.), pero esto podría deberse en parte a la nueva marca de redes neuronales artificiales como “aprendizaje profundo” since [ya que, al final, todos quieren que el dinero siga funcionando]

El codificador automático es una red neuronal con una sola capa oculta y el número de nodos en las capas de entrada y salida. En el codificador-decodificador, hay dos redes, a saber, el codificador que ‘codifica’ los datos de entrada a un vector latente y un decodificador que los ‘decodifica’ al punto de datos desde la distribución de los datos de entrenamiento.

El aprendizaje ocurre en ambos al minimizar la función de pérdida usando la propagación inversa. Pero una vez que se entrena un codificador-decodificador, la parte del codificador puede mantenerse a un lado y podemos suministrar el ruido muestreado desde cualquier distribución como vector latente al decodificador para generar puntos de datos. Esto no es posible en autoencoder. Los codificadores automáticos se utilizan para aprender la representación de datos en una dimensión inferior.

En efecto.

Una arquitectura de codificador-decodificador tiene una sección de codificador que toma una entrada y la asigna a un espacio latente. La sección del decodificador toma ese espacio latente y lo asigna a una salida. Por lo general, esto da como resultado mejores resultados. Un autoencoder simplemente toma x como entrada e intenta reconstruir x (ahora x_hat) como salida.

Por lo general, los casos de uso son diferentes. Los codificadores automáticos generalmente se utilizarán en situaciones de aprendizaje no supervisadas, ya que, como podemos ver, no se requieren etiquetas, solo datos. Las arquitecturas de codificador-decodificador a menudo se usan de una manera más general, como se mencionó con el papel SegNet y más comúnmente con NMT.

codificador-decodificador son términos del dominio del procesamiento de señales. Un codificador transfiere entradas a formas transferidas, mientras que un decodificador recupera la señal. La transformación puede ahorra capacidades de los canales de comunicación. por ejemplo, imágenes jpeg a través de internet.

Autodecoder es un término originado en el aprendizaje automático. Estaba bien explicado en la respuesta anterior.