Uno de los primeros intentos de utilizar redes neuronales para la compresión de datos fue por Schmidhuber y Heil en 1996 [1]. Entrenaron una red neuronal de 3 capas mediante propagación hacia atrás para predecir el siguiente carácter en artículos de periódicos en inglés y alemán dados los 5 caracteres anteriores como entrada, y luego codificaron el carácter predicho usando codificación aritmética. Desafortunadamente, este enfoque no fue práctico. Se requieren múltiples pases de capacitación fuera de línea que utilizan días de tiempo de CPU en una estación de trabajo HP-700 solo para comprimir 10 KB de texto. Informaron una relación de compresión de 2.94 bits por carácter, que no es mucho mejor que zip, y mucho peor que los métodos avanzados como PPM que existían en ese momento.
En 2000 pude obtener velocidades prácticas utilizando una red neuronal en línea (paso único) de 2 capas para predecir un bit a la vez. La red tenía 4 millones de entradas que representaban el orden a través de 5 hashes de contexto, y solo una salida [2]. Pude obtener relaciones de compresión mucho mejores que zip y solo un poco peor que PPM.
En 2005 desarrollé PAQ7, usando un enfoque diferente que ahora se usa en todas las variantes de PAQ8 y en ZPAQ. La idea es utilizar una red neuronal de 2 capas llamada mezclador para combinar las predicciones de bits de modelos estadísticos independientes. Esencialmente, un mezclador calcula un promedio ponderado de probabilidades en el dominio logístico: stretch (p) = log (p / (1-p)). Es decir:
- ¿Cuál es la ventaja de tener en cuenta la curvatura al optimizar las redes neuronales profundas?
- ¿Se pueden usar las redes neuronales para resolver problemas de aprendizaje no supervisados?
- Cómo verificar si el objeto de una imagen existe en otra imagen
- ¿Por qué hay tantos enfoques generativos en la clasificación de escenas, mientras que el enfoque discriminatorio es el principal en el reconocimiento / detección de objetos?
- ¿Cómo soluciona un máximo A posterior el problema de sobreajuste en una estimación de máxima verosimilitud?
predicción = squash (w_i * estiramiento (p_i))
donde p_i es la predicción del i-ésimo modelo (una probabilidad entre 0 y 1), w_i es el peso y squash () es el inverso de stretch ():
squash (x) = 1 / (1 + exp (-x))
Después de que se codifica el bit, los pesos se actualizan para favorecer los modelos que hicieron las predicciones más precisas:
error = bit – predicción
w_i = w_i + L * error * estiramiento (p_i)
donde L es la tasa de aprendizaje, típicamente alrededor de 0.001 a 0.01. La regla de actualización es la misma que la propagación hacia atrás, excepto que el estado se mueve a lo largo del gradiente de costo de codificación en lugar del gradiente de error RMS. En realidad, esto simplifica la regla de actualización al eliminar los dos factores, salida * (1 – salida).
Los compresores de gama alta como CMIX (el mejor clasificado en el Benchmark de compresión de texto grande) y PAQ8HP12 (ganador del Premio Hutter) mezclan cientos o miles de modelos, incluidas las salidas de otros mezcladores. Son extremadamente lentos y requieren mucha memoria (32 GB para CMIX). Los compresores prácticos pueden mezclar de 2 a 20 modelos contextuales, intercambiando entre velocidad y relación de compresión.
1. Schmidhuber, Jürgen y Heil, Stefan, Compresión de texto neuronal secuencial, IEEE Trans. on Neural Networks 7 (1): 142-146, 1996.
2. Compresión rápida de texto con redes neuronales