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 …).
- ¿Puedo usar el algoritmo de aprendizaje automático en mi proyecto de investigación aunque no soy un experto en él?
- ¿Cómo calcula el tema antes en el análisis latente probabilístico?
- ¿A qué laboratorio puedo unirme en Caltech para hacer investigación de aprendizaje automático?
- ¿Puedo hacer IA y aprendizaje automático sin matemáticas?
- ¿Cómo podría una máquina / sistema de IA identificar una oración sarcástica?
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]