¿Cuáles son las diferencias entre codificación dispersa y autoencoder?

35

La codificación dispersa se define como el aprendizaje de un conjunto excesivo de vectores base para representar vectores de entrada (<- ¿por qué queremos esto?). ¿Cuáles son las diferencias entre codificación dispersa y autoencoder? ¿Cuándo utilizaremos codificación dispersa y autoencoder?

RockTheStar
fuente
1
La codificación dispersa en realidad constituye un tipo específico de codificador automático conocido como codificador automático disperso . Por lo tanto, puede considerar la codificación dispersa como un subconjunto de autoencoders si lo desea.
HelloGoodbye

Respuestas:

34

Encontrar las diferencias se puede hacer mirando los modelos. Veamos primero la codificación dispersa.

Codificación escasa

La codificación dispersa minimiza el objetivo donde W es una matriz de bases, H es una matriz de códigos y X es una matriz de los datos que deseamos representar. λ implementa un intercambio entre escasez y reconstrucción. Tenga en cuenta que si se nos da H , la estimación de W es fácil a través de mínimos cuadrados.

LCarolina del Sur=El |El |WH-XEl |El |22plazo de reconstrucción+λEl |El |HEl |El |1término de escasez
WXλHW

Al principio, sin embargo, no tenemos Sin embargo, existen muchos algoritmos que pueden resolver el objetivo anteriormente con respecto a H . En realidad, así es como hacemos la inferencia: necesitamos resolver un problema de optimización si queremos saber qué h pertenece a una x invisible .HHhX

Codificadores automáticos

Los codificadores automáticos son una familia de redes neuronales no supervisadas. Hay muchos de ellos, por ejemplo, codificadores automáticos profundos o aquellos que tienen diferentes trucos de regularización adjuntos, por ejemplo, eliminación de ruido, contracción, escasa. Incluso existen las probabilísticas, como las redes estocásticas generativas o el codificador automático variacional. Su forma más abstracta es pero por ahora vamos a seguir con una mucho más simple: L ae = | El | W σ ( W T X )

re(re(mi(X;θr);θre),X)
donde σ es una función no lineal como el sigmoide logístico σ ( x ) = 1
Lae=El |El |Wσ(WTX)-XEl |El |2
σ .σ(X)=11+exp(-X)

Similitudes

Tenga en cuenta que parece casi a L a e una vez que establecemos H = σ ( W T X ) . La diferencia de ambos es que i) los codificadores automáticos no fomentan la dispersión en su forma general ii) un codificador automático utiliza un modelo para encontrar los códigos, mientras que la codificación dispersa lo hace mediante la optimización.LsdoLunamiH=σ(WTX)

WWLsdo

Además, los diferentes métodos de regularización producen representaciones con características diferentes. También se ha demostrado que los codificadores automáticos de denoising son equivalentes a una determinada forma de RBM, etc.

¿Pero por qué?

Si desea resolver un problema de predicción, no necesitará codificadores automáticos a menos que tenga pocos datos etiquetados y muchos datos sin etiquetar. Entonces, generalmente será mejor entrenar un codificador automático profundo y colocar un SVM lineal en la parte superior en lugar de entrenar una red neuronal profunda.

Sin embargo, son modelos muy poderosos para capturar la característica de las distribuciones. Esto es vago, pero actualmente se está llevando a cabo una investigación que convierte esto en hechos estadísticos estrictos. Los modelos gaussianos latentes profundos, también conocidos como codificadores automáticos variacionales o redes estocásticas generativas, son formas bastante interesantes de obtener codificadores automáticos que estiman de manera demostrable la distribución de datos subyacente.

bayerj
fuente
¡Gracias por tu respuesta! Entonces, ¿esa media codificación dispersa no debe usarse en ningún caso, sino autoencoder? Además, debería haber un término adicional en la codificación dispersa que regularice W?
RockTheStar
No hay una regla general como esa. SC tiene un beneficio sobre los AA: la codificación a través de la optimización puede ser muy poderosa.
bayerj
Lo siento, ¿puedes dar más detalles sobre esto?
RockTheStar
Tener un mapa fijo que se ha estimado para seguir alguna restricción (aquí: resultado disperso) es menos poderoso que tener un optimizador que intente encontrar una solución como esa posiblemente en muchas iteraciones.
bayerj
1
Lamento volver a plantear esta pregunta. Creo que Autoencoder también puede fomentar la escasez, es decir, autoencoder escaso.
RockTheStar
11

En neurociencia, el término codificación neural se usa para referirse a los patrones de actividad eléctrica de las neuronas inducidas por un estímulo. La codificación dispersa por su parte es un tipo de patrón. Se dice que un código es escaso cuando un estímulo (como una imagen) provoca la activación de un número relativamente pequeño de neuronas, que combinadas lo representan de manera escasa. En el aprendizaje automático, la misma restricción de optimización utilizada para crear un modelo de código disperso se puede utilizar para implementar codificadores automáticos dispersos, que son codificadores automáticos regulares entrenados con una restricción de dispersión. A continuación se dan explicaciones más detalladas para cada una de sus preguntas.

La codificación dispersa se define como el aprendizaje de un conjunto excesivo de vectores base para representar vectores de entrada (<- ¿por qué queremos esto?)

Primero, al menos desde (Hubel y Wiesel, 1968) se sabe que en la región V1 hay células específicas que responden al máximo al estímulo de borde (además de tener otras propiedades "útiles"). Sparse Coding es un modelo que explica bien muchas de las características observadas de este sistema. Ver (Olshausen & Field, 1996) para más detalles.

En segundo lugar, se muestra que el modelo que describe la codificación dispersa es una técnica útil para la extracción de características en Machine Learning y produce buenos resultados en las tareas de transferencia de aprendizaje. Raina y col. (2007) mostraron que un conjunto de "vectores básicos" (características, como trazos y bordes) aprendidos con un conjunto de entrenamiento compuesto por caracteres escritos a mano mejora la clasificación en una tarea de reconocimiento de dígitos escritos a mano. Los modelos posteriores basados ​​en la codificación dispersa se han utilizado para entrenar redes "profundas", apilando capas de detectores de características dispersas para crear una "red de creencias dispersas" (Lee et al., 2007). Más recientemente, se lograron resultados asombrosos en el reconocimiento de imágenes utilizando modelos basados ​​en codificación dispersa para construir una red con varias capas (el famoso "Google Brain"), que era capaz de distinguir una imagen de un gato de una manera puramente sin supervisión (Le et al. , 2013) .

Tercero, probablemente sea posible usar la base aprendida para realizar la compresión. Sin embargo, no he visto a nadie realmente haciéndolo.

¿Cuál es la diferencia entre codificación dispersa y autoencoder?

Un autoencoder es un modelo que intenta reconstruir su entrada, generalmente usando algún tipo de restricción. Según Wikipedia, "es una red neuronal artificial utilizada para aprender codificaciones eficientes". No hay nada en la definición del autoencoder que requiera escasez. Las restricciones basadas en codificación dispersa es una de las técnicas disponibles, pero hay otras, por ejemplo, Denoising Autoencoders, Contractive Autoencoders y RBMs. Todo hace que la red aprenda buenas representaciones de la entrada (que también son comúnmente "dispersas").

¿Cuándo utilizaremos codificación dispersa y autoencoder?

Probablemente esté interesado en usar un codificador automático para la extracción de características y / o la capacitación previa de redes profundas. Si implementa un codificador automático con la restricción de dispersión, utilizará ambos.

Saul Berardo
fuente
Esta respuesta tiene muchos puntos interesantes y referencias importantes. Sin embargo, el primer párrafo está mal . La codificación dispersa y los codificadores automáticos dispersos son diferentes bestias.
bayerj
¿Dónde se dice que son lo mismo? Por favor, dímelo y corregiré la respuesta.
Saul Berardo
En la primera oración.
bayerj
"La codificación dispersa es solo una de las técnicas disponibles para entrenar codificadores automáticos". Esta oración no define "Codificación dispersa" como la misma "bestia" que el codificador automático. Dice que, entre todas las técnicas disponibles para entrenar codificadores automáticos, una de ellas es la "Codificación dispersa". Estoy de acuerdo en que la oración tiene cierta ambigüedad, que creo que queda aclarada por el resto de la respuesta.
Saul Berardo
Usted dice que la codificación dispersa es un método para entrenar codificadores automáticos. Claramente, ese no es el caso, ya que los codificadores automáticos tienen un decodificador explícito que no se implementa con un algoritmo de optimización. Dado un codificador automático arbitrario, no puede entrenarlo con una codificación dispersa.
bayerj
1

Un codificador disperso es como la mitad de un codificador automático. Un codificador automático funciona como:

input  =>  neural net layer  =>  hidden outputs => neural net layer => output

Para la propagación hacia atrás, la señal de error, la pérdida, es: entrada - salida

Si aplicamos una restricción de dispersión en las salidas ocultas, la mayoría serán ceros, y unos pocos serán 1s. Entonces, la segunda capa es esencialmente un conjunto de funciones de base lineal, que se suman, de acuerdo con cuál de las salidas ocultas son 1s.

En la codificación escasa, solo tenemos la segunda mitad de esto:

                                codes => neural net layer => output

Los 'códigos' son un grupo de números reales, que seleccionan las funciones básicas representadas por los pesos en la capa de red neuronal. Como en el artículo de Olshausen, están aplicando una restricción de escasez a los códigos, los códigos son, al igual que en el codificador automático disperso, dispersos: en su mayoría ceros con unos pocos.

La diferencia que podemos ver ahora es clara: para la codificación dispersa, no hay una primera mitad de la red neuronal: los códigos no nos los proporciona automáticamente una red neuronal.

¿Cómo obtenemos los códigos en codificación dispersa? Tenemos que optimizarnos, lo que hacemos mediante el uso de descenso de gradiente o similar, para encontrar el conjunto de códigos que mejor proporciona una salida que coincida con la imagen de entrada. Tenemos que hacer esto para cada imagen, incluso para cada imagen de prueba, cada vez.

Hugh Perkins
fuente
0

Es posible que desee leer este documento reciente, https://arxiv.org/abs/1708.03735v2 , precisamente sobre este mismo tema. En este artículo, los autores muestran que, de hecho, uno puede configurar un autoencoder de modo que el diccionario de verdad fundamental sea un punto crítico de la función de pérdida al cuadrado de ese autoencoder.

graduado
fuente