# Red de estado de eco

Una red de estado de eco (echo state network o ESN en inglés) es un tipo de computador de reservoir que utiliza una red neuronal recurrente con una capa oculta conectada dispersamente (con una conectividad típica del 1%). La conectividad y los pesos de las neuronas ocultas son fijos y se asignan aleatoriamente. Los pesos de las neuronas de salida pueden aprenderse para que la red pueda producir o reproducir patrones temporales específicos. El principal interés de esta red es que, aunque su comportamiento es no lineal, los únicos pesos que se modifican durante el entrenamiento son los de las sinapsis que conectan las neuronas ocultas con las neuronas de salida. Así, la función de error es cuadrática con respecto al vector de parámetros y puede diferenciarse fácilmente a un sistema lineal.
Alternativamente, se puede considerar una formulación bayesiana no paramétrica de la capa de salida, bajo la cual: (i) se impone una distribución a priori sobre los pesos de salida; y (ii) los pesos de salida se marginan en el contexto de la generación de predicciones, dados los datos de entrenamiento. Esta idea ha sido demostrada mediante el uso de distribuciones a priori gaussianas, con lo que se obtiene un modelo de proceso gaussiano con función kernel impulsada por ESN. Se ha demostrado que esta solución supera a las ESN con conjuntos de pesos entrenables (finitos) en varias pruebas comparativas.
Algunas implementaciones de ESN disponibles públicamente son: (i) aureservoir: una biblioteca C++ eficiente para varios tipos de redes de estados de eco con enlaces python/numpy; y (ii) Matlab code: un matlab eficiente para una red de estados de eco, (iii) ReservoirComputing.jl: una implementación eficiente basada en Julia de varios tipos de redes de estados de eco, y (iv) pyESN: redes de estados de eco simples en Python.

## Antecedentes

La Red de Estado de Eco (ESN) pertenece a la familia de las Redes Neuronales Recurrentes (RNN) y proporciona su arquitectura y principio de aprendizaje supervisado. A diferencia de las Redes Neuronal Prealimentadas, las Redes Neuronales Recurrentes son sistemas dinámicos y no funciones. Las Redes Neuronales Recurrentes se utilizan típicamente para:
* Aprender procesos dinámicos: tratamiento de señales en ingeniería y telecomunicaciones, análisis de vibraciones, sismología, control de motores y generadores.
* Predicción y generación de señales: texto, música, señales eléctricas, señales caóticas.
* Modelado de sistemas biológicos, neurociencias (neurodinámica cognitiva), modelado de memoria, interfaces cerebro-ordenador (BCI), filtrado y procesos de Kalman, usos militares, modelado de volatilidad, etc.
Para el entrenamiento de las RNN se dispone de varios algoritmos de aprendizaje: retropropagación a través tiempo, aprendizaje recurrente en tiempo real. La convergencia no está garantizada debido a fenómenos de inestabilidad y bifurcación.
El enfoque principal de la ESN es, en primer lugar, operar una red neuronal aleatoria, grande, fija y recurrente con la señal de entrada, lo que induce una señal de respuesta no lineal en cada neurona dentro de esta red "reservoir". Y, en segundo lugar, conectar una señal de salida deseada mediante una combinación lineal entrenable de todas estas señales de respuesta.
Otra característica de las ESN es su funcionamiento autónomo en la predicción: si la Red de Estado de Eco se entrena con una entrada que es una versión inversa de la salida, puede utilizarse para la generación/predicción de señales utilizando la salida anterior como entrada.
La idea principal de las ESN está vinculada a las Máquinas de Estado Líquido (Liquid state machine o LSM en inglés) que Wolfgang Maassen desarrolló de forma independiente y simultánea con las ESN. Las LSM, las ESN y la recientemente investigada regla de aprendizaje de decorrelación de retropropagación para RNN se resumen cada vez más bajo el nombre de Reservoir Computing.
Schiller y Steil también demostraron que en los enfoques de entrenamiento convencionales para las RNN, en los que se adaptan todos los pesos (no sólo los de salida), los cambios dominantes se producen en los pesos de salida. En neurociencia cognitiva, Peter F. Dominey analizó un proceso relacionado con el modelado del procesamiento de secuencias en el cerebro de los mamíferos, en particular el reconocimiento del habla en el cerebro humano.
La idea básica también incluía un modelo de discriminación temporal de la entrada en redes neuronales biológicas. Una primera formulación clara de la idea del reservoir computing se debe a K. Kirby, que reveló este concepto en una contribución a una conferencia. La primera formulación de la idea de reservoir computing conocida hoy en día procede de L. Schomaker, que describió cómo se puede obtener una salida deseada de una RNN al aprender a combinar señales de un conjunto de redes neuronales de impulsos configuradas aleatoriamente.

## Variantes

Las redes de estado de eco pueden construirse de diferentes maneras. Pueden configurarse con o sin conexiones de entrada-salida directamente entrenables, con o sin retroalimentación de la reserva de salida, con diferentes neurotipos, diferentes patrones de conectividad interna de reservoir, etc. El peso de salida puede calcularse por regresión lineal con todos los algoritmos, ya sea que estén en línea o no. Para determinar los valores de salida se utilizan, además de las soluciones para errores con mínimos cuadrados, criterios de maximización de márgenes, denominados máquinas de vectores de soporte de entrenamiento. Otras variantes de las redes de estado de eco intentan cambiar la formulación para ajustarse mejor a los modelos comunes de los sistemas físicos, como los que suelen definirse mediante ecuaciones diferenciales. En este ámbito, los proyectos incluyen redes de estado de eco que parcialmente incluyen modelos físicos, redes de estado de eco híbridas, y redes de estados de eco de tiempo continuo.
La RNN fija actúa como un medio aleatorio no lineal cuya respuesta dinámica, el "eco", se utiliza como base de la señal. La combinación lineal de esta base puede entrenarse para reconstruir la salida deseada minimizando algunos criterios de error.

## Importancia

Las RNN apenas se utilizaban en la práctica antes de la introducción de la ESN, debido a la complejidad que entrañaba el ajuste de sus conexiones (por ejemplo, la falta de autodiferenciación, la susceptibilidad a la desaparición/explosión de gradientes, etc.). Los algoritmos de entrenamiento de las RNN eran lentos y a menudo vulnerables a problemas como los errores de ramificación, por lo que no se podía garantizar la convergencia. Por otro lado, el entrenamiento de ESN no tiene el problema de la ramificación y es fácil de implementar. En los primeros estudios, las ESN mostraron un buen rendimiento en tareas de predicción de series temporales a partir de conjuntos de datos sintéticos.
Sin embargo, hoy en día muchos de los problemas que hacían que las RNN fueran lentas y propensas a errores se han solucionado con la llegada de las bibliotecas de autodiferenciación (aprendizaje profundo), así como con arquitecturas más estables como LSTM y GRU, por lo que se ha perdido el argumento de que las ESN son únicas. Además, las RNN han demostrado su eficacia en varios ámbitos prácticos, como el procesamiento de lenguaje. Para hacer frente a tareas de complejidad similar utilizando métodos de cálculo de reservoir, se necesitaría una memoria de tamaño excesivo.
Sin embargo, las ESN se utilizan en algunos ámbitos, como muchas aplicaciones de procesamiento de señales. En particular, se han utilizado ampliamente como principio de computación que combina bien con sustratos informáticos no digitales. Dado que las ESN no necesitan modificar los parámetros de la RNN, permiten utilizar muchos objetos diferentes como su reservoir no lineal. Por ejemplo: microchips ópticos, nanoosciladores mecánicos, mezclas de polímeros o incluso miembros blandos artificiales.