Rede neural recorrente

alt=Rede neural recorrente|miniatura|Esquema simple dunha rede neural recorrente.
As **redes neurais recorrentes** (RNN) son unha clase de redes neurais artificiais para o procesamento secuencial de datos. A diferenza das redes neurais de avance, que procesan datos nun só paso, as RNN procesan datos en varios pasos de tempo, polo que son adecuadas para modelar e procesar texto, voz e series cronolóxicas.

O bloque fundamental dunha RNN é a unidade recorrente. Esta unidade mantén un estado oculto, esencialmente unha forma de memoria, que se actualiza en cada paso de tempo en función da entrada actual e do estado oculto anterior. Este bucle de retroalimentación permite que a rede aprenda das entradas pasadas e incorpore ese coñecemento ao seu procesamento actual.

As primeiras redes neurais recorrentes sufriron o problema do esvaecemento do gradiente, limitando a súa capacidade para aprender dependencias que estaban a unha distancia considerable. Isto resolveuse coa invención das redes de memoria a longo e curto prazo (LSTM, das súas siglas en inglés, *Long Short-Term Memory*) en 1997, que se converteu na arquitectura estándar para as RNN.

Este tipo de redes aplicáronse a tarefas como o recoñecemento de escritura manual, o recoñecemento da fala, o procesamento da linguaxe natural e a tradución automática neural.

## Historia 
### Antes das redes LSTM 
Unha orixe das redes neurais recorrentes foi a mecánica estatística. O modelo de Ising foi desenvolvido por Wilhelm Lenz e Ernst Ising na década de 1920 como un simple modelo mecánico estatístico de imáns en equilibrio. En 1963, o físico Roy J. Glauber estudou como evolucionaba no tempo modelo de Ising, como un proceso cara ao equilibrio (dinámica de Glauber), engadindo esa compoñente do tempo. En 1972, Shun'ichi Amari propuxo modificar os pesos dun modelo de Ising pola regra de aprendizaxe de Hebbian, como modelo de memoria asociativa, engadindo a compoñente de aprendizaxe. Esta foi popularizada como a rede Hopfield, en 1982.

Outra orixe das redes neurais recorrentes foi a neurociencia. A palabra *recorrente* úsase para describir estruturas de tipo bucle en anatomía. En 1901, Ramón y Cajal observou "semicírculos recorrentes" no córtex cerebeloso formados por fibras paralelas, células de Purkinje e células granulares. En 1933, Lorente de Nó descubriu "conexións recíprocas e recorrentes" polo método de Golgi, e propuxo que os bucles excitadores explican certos aspectos do reflexo vestíbulo-ocular. Durante a década de 1940, varias persoas propuxeron a existencia de retroalimentación no cerebro, o que contrastaba coa comprensión anterior do sistema neural como unha estrutura puramente de retroalimentación cara adiante. O psicólogo Donald O. Hebb considerou o "circuíto reverberante" como unha explicación para a memoria a curto prazo. O artigo de McCulloch e Pitts (1943), que propuxo o modelo de neuronas McCulloch-Pitts, considerou redes que contiñan ciclos. A actividade actual de tales redes pode verse afectada por actividades que se realizaron hai moito tempo. Ambos investigadores estaban interesados en bucles pechados como posibles explicacións para, por exemplo, a epilepsia e a causalxia. A inhibición recorrente propúxose en 1946 como un mecanismo de retroalimentación negativa no control motor. Os bucles de retroalimentación neural foron un tema común de discusión nas conferencias de Macy.

Minsky e Papert sinalaron que as redes recorrentes poden despregarse no tempo nunha rede retroalimentación cara adiante en capas (páx. 354).

No rexurdir das redes neurais nos anos 80, as redes recorrentes foron estudadas de novo. Ás veces chamábanse *redes iteradas*. Dous primeiros traballos influentes foron a rede Jordan (1986) e a rede Elman (1990), que aplicou redes neurais recorrentes para estudar a psicoloxía cognitiva. En 1993, un sistema de compresor de historia neural resolveu unha tarefa de "aprendizaxe moi profunda" que requiría máis de 1000 capas nunha RNN despregada no tempo.

### LSTM 
As redes de memoria a longo e curto prazo  foron inventadas por Hochreiter e Schmidhuber en 1995, e estableceron rexistros de precisión en múltiples dominios de aplicacións. Converteuse na opción predeterminada para a arquitectura de RNN.

Ao redor do 2006, as redes LSTM comezaron a revolucionar o recoñecemento de voz, superando os modelos tradicionais en determinadas aplicacións de fala. Ademais, tamén melloraron o recoñecemento de voz de gran vocabulario  e utilizáronse na busca por voz de Google e no ditado en dispositivos Android. da modelaxe lingüística e do procesamento de linguaxe multilingüe. Combinadas coas redes neurais convolucionais (CNN) melloraron o subtitulado automático en imaxes.

Un modelo importante que utiliza redes LSTM xurdiu da idea da transdución de secuencias codificador-descodificador desenvolveuse a principios da década do 2010. Unha arquitectura seq2seq emprega dúas RNN, normalmente LSTM, un codificador e un descodificador, para a transdución de secuencias, como a tradución automática. Convertéronse no estado da arte na tradución automática, e foron fundamentais no desenvolvemento do mecanismo de atención e dos transformadores.

## Configuracións 
Un modelo baseado en RNN pódese dividir en dúas partes: configuración e arquitectura. Pódense combinar varias redes neurais recorrentes nun fluxo de datos e o propio fluxo de datos é a configuración. Cada RNN en si pode ter calquera arquitectura, incluíndo LSTM, GRU, etc.

### RNN estándar 
miniatura| Rede neural recorrente básica comprimida (esquerda) e desdobrada (dereita).
As redes neurais recorrentes teñen moitas variantes. Falando en abstracto, unha RNN é unha función f_\theta de tipo (x_t, h_t) \mapsto (y_t, h_{t+1}), onde:

* x_t é o vector de entrada;
* h_t é o vector oculto;
* y_t é o vector de saída;
* \theta son parámetros da rede neural.

É dicir, é unha rede neural que converte unha entrada x_t nunha saída y_t, co vector oculto h_t desenvolvendo o papel de memoria, é dicir, un rexistro parcial de tódolos pares entrada-saída anteriores. En cada paso, transforma a entrada nunha saída e modifica a súa memoria para axudarlle a realizar mellor o procesamento futuro.

A ilustración pode ser enganosa para moitos porque as topoloxías usuais de redes neurais adoitan organizarse en capas e o debuxo dá esa aparencia. Non obstante, o que parecen ser capas son, en realidade, diferentes pasos no tempo, desdobrados para producir a aparencia de capas.

### RNN amoreada 
miniatura| RNN amoreada.
Unha RNN amoreada, ou RNN profunda, está composta por varias redes neurais recorrentes amoreadas unhas enriba das outras. Matematicamente, estrutúrase do seguinte xeito

# A capa 1 ten un vector oculto h_{1, t}, parámetros \theta_1, e convertef_{\theta_1} : (x_{0, t}, h_{1, t}) \mapsto (x_{1, t}, h_{1, t+1}) .
# A capa 2 ten un vector oculto h_{2, t}, parámetros \theta_2, e convertef_{\theta_2} : (x_{1, t}, h_{2, t}) \mapsto (x_{2, t}, h_{2, t+1}) .
# ...
# Capa n  ten un vector oculto h_{n, t}, parámetros \theta_n, e convertef_{\theta_n} : (x_{n-1, t}, h_{n, t}) \mapsto (x_{n, t}, h_{n, t+1}) .

Cada capa funciona como unha RNN autónoma e a secuencia de saída de cada capa utilízase como secuencia de entrada á capa superior. Non hai límite conceptual para a profundidade da RNN.

### Bidireccional 
miniatura| RNN bidireccional.
Unha RNN bidireccional está composta por dúas redes neurais recorrentes, unha procesando a secuencia de entrada nunha dirección e outra na dirección oposta. Matematicamente, estrutúrase do seguinte xeito:

A RNN cara adiante procesa nunha dirección:

f_{\theta}(x_0, h_0) = (y_0, h_{1}), f_{\theta}(x_1, h_1) = (y_1, h_{2}), \dots

Mentres que a RNN cara atrás procesa na dirección oposta:

f'_{\theta'}(x_N, h_N') = (y'_N, h_{N-1}'), f'_{\theta'}(x_{N-1}, h_{N-1}') = (y'_{N-1}, h_{N-2}'), \dots

As dúas secuencias de saída concaténanse para dar a saída total: ((y_0, y_0'), (y_1, y_1'), \dots, (y_N, y_N')).

A RNN bidireccional permite que o modelo procese unha porción tanto no contexto do que veu antes como do que veu despois. Ao amorear varias redes neurais recorrentes bidireccionais, o modelo pode procesar unha porción de forma cada vez máis contextual. O modelo ELMo (2018) é unha rede LSTM bidireccional amoreada que toma os caracteres como entradas e produce incrustacións a nivel de palabra.

### Codificador-descodificador 
miniatura| Un descodificador sen codificador.
miniatura| RNN de codificador-descodificador sen mecanismo de atención.
miniatura| RNN de codificador-descodificador con mecanismo de atención.

Pódense executar dúas redes neurais recorrentes nunha configuración de codificador-descodificador. A RNN que xoga o papel de codificador procesa unha secuencia de entrada nunha secuencia de vectores ocultos, e a RNN que xoga o papel de descodificador procesa a secuencia de vectores ocultos nunha secuencia de saída, cun mecanismo de atención opcional. Isto utilizouse para construír tradutores automáticos neurais de última xeración entre o ano 2014 e o ano 2017. Este foi un paso fundamental para o desenvolvemento dos transformadores, creados en 2017.

### PixelRNN 
Unha RNN pode procesar datos con máis dunha dimensión. PixelRNN procesa datos con moitas direccións posibles. Por exemplo, a dirección fila por fila procesa unha cuadrícula n \times n de vectores x_{i, j} na seguinte orde:

x_{1, 1}, x_{1, 2}, \dots, x_{1, n}, x_{2, 1}, x_{2, 2}, \dots, x_{2, n}, \dots, x_{n, n}

A diagonal BiLSTM usa dúas redes LSTM para procesar a mesma reixa. Unha procésaa desde a esquina superior esquerda ata a parte inferior dereita, de xeito que procesa x_{i, j} dependendo do seu estado oculto e do estado da cela na parte superior e no lado esquerdo: h_{i-1, j}, c_{i-1, j} e h_{i, j-1}, c_{i, j-1}. A outra procésaa dende a esquina superior dereita ata a parte inferior esquerda.

## Arquitecturas 
### Totalmente recorrente 
miniatura| Unha RNN totalmente conectada con 4 neuronas.
As redes neurais totalmente recorrentes (FRNN, das súas siglas en inglés, *Fully Recurrent Neural Networks*) conectan as saídas de tódalas neuronas ás entradas de tódalas neuronas. Noutras palabras, é unha rede totalmente conectada . Esta é a topoloxía de rede neural máis xeral, porque tódalas demais topoloxías pódense representar configurando algúns pesos de conexión a cero para simular a falta de conexións entre esas neuronas.
miniatura| Unha rede de Elman simple, onde \sigma_h = \tanh, \sigma_y = \text{Identity} .

### Rede de Hopfield 
A rede de Hopfield é unha RNN na que tódalas conexións entre capas teñen o mesmo tamaño. Require entradas estacionarias e, polo tanto, non é unha RNN xeral, xa que non procesa secuencias de patróns. Non obstante, garante que vai converxer. Se as conexións se adestran mediante a aprendizaxe de Hebbian, a rede de Hopfield pode funcionar coma unha memoria sólida de contido direccional, resistente á alteración da conexión.

### Redes de Elman e Redes de Jordan 
dereita|miniatura| A rede de Elman.
Unha rede de Elman é unha rede de tres capas (disposta horizontalmente como *x*, *y* e *z* na ilustración) coa adición dun conxunto de unidades de contexto (*u* na ilustración). A capa media (oculta) está conectada a estas unidades de contexto fixadas cun peso de un. En cada paso de tempo, aplícase unha regra de aprendizaxe. As conexións posteriores fixas gardan unha copia dos valores anteriores das unidades ocultas nas unidades de contexto (xa que se propagan sobre as conexións antes de que se aplique a regra de aprendizaxe). Así, a rede pode manter unha especie de estado, o que lle permite realizar tarefas como a predición de secuencias que están máis alá do poder dun perceptrón multicapa estándar.

Matematicamente, unha rede de Elman pódese representar do seguinte xeito:

\begin{align}
h_t &= \sigma_h(W_{h} x_t + U_{h} h_{t-1} + b_h) \\
y_t &= \sigma_y(W_{y} h_t + b_y)
\end{align}

Denotando como:

* **x_t** o vector de entrada
* h_t o vector de capa oculta
* y_t o vector de saída
* W, U e b as matrices e vector de parámetros
* \sigma_h e \sigma_y as funcións de activación

En canto ás redes de Jordan, son similares ás de Elman. As unidades de contexto aliméntanse dende a capa de saída en lugar da capa oculta. As unidades de contexto nunha rede de Jordan tamén se denominan capa de estado.

Matematicamente, unha rede de Jordan pódese representar do seguinte xeito:

\begin{align}
h_t &= \sigma_h(W_{h} x_t + U_{h} y_{t-1} + b_h) \\
y_t &= \sigma_y(W_{y} h_t + b_y)
\end{align}

As redes de Elman e Jordan tamén se coñecen como "Redes simples recorrentes" (SRN, das súas siglas en inglés, *Simple recurrent networks*), por teren unha conexión recorrente.

### Memoria a longo e curto prazo 
miniatura| Unidade de memoria a longo e curto prazo.
A memoria a longo e curto prazo (LSTM) é a arquitectura de RNN máis utilizada. Foi deseñada para resolver o problema do esvaecemento do gradiente. A LSTM é normalmente aumentada por portas recorrentes chamadas *portas esquecidas*. A LSTM evita que os erros de retropropagación desaparezan ou exploten. Pola contra, os erros poden retroceder a través dun número ilimitado de capas virtuais despregadas no espazo. É dicir, unha rede LSTM pode aprender tarefas que requiren lembranzas de eventos que sucederon miles ou mesmo millóns de pasos discretos de tempo antes. Pódense desenvolver topoloxías tipo LSTM específicas para o problema que se estea a tratar. As redes LSTM funcionan incluso tendo grandes atrasos entre eventos significativos e poden xestionar sinais que mesturan compoñentes de baixa e alta frecuencia.

Moitas aplicacións usan pilas de LSTM, o que se chama *LSTM profundo*. A rede LSTM pode aprender a recoñecer linguaxes sensibles ao contexto (a diferenza dos modelos anteriores baseados en modelos de Markov ocultos) e conceptos similares.

### Unidade recorrente pechada 
miniatura| Unidade recorrente pechada.
As unidades recorrentes pechadas (GRU, polas súas siglas en inglés, *Gated Recurrent Unit*), introducidas en 2014, foron deseñadas como unha simplificación da LSTM. Utilízanse na súa forma completa e en varias variantes simplificadas. Teñen menos parámetros que as LSTM, xa que carecen de porta de saída.

Na modelaxe de música polifónica e na modelaxe de sinal de fala, por exemplo, o seu rendemento foi similar ao da memoria a longo e curto prazo. Non parece haber unha diferenza de rendemento particular entre LSTM e GRU.

#### Memoria asociativa bidireccional 
Introducida por Bart Kosko, unha rede de memoria asociativa bidireccional (BAM, polas súas siglas en inglés, *Bidirectional Associative Memory*) é unha variante dunha rede de Hopfield que almacena datos asociativos como un vector. A bidireccionalidade provén de pasar información a través dunha matriz e a súa transposición. Normalmente prefírese a codificación bipolar á codificación binaria dos pares asociativos. Recentemente, optimizáronse os modelos BAM estocásticos que usan o paso de Markov para aumentar a estabilidade da rede, ademais de pola súa relevancia para as aplicacións do mundo real.

Unha rede BAM ten dúas capas, onde calquera delas pode ser dirixida como entrada para lembrar unha asociación e producir unha saída na outra capa.

### Estado de eco 
As redes de estado de eco (ESN, das súas siglas en inglés, *Echo State Networks*) teñen unha capa oculta aleatoria pouco conectada. Os pesos das neuronas de saída son a única parte da rede que pode ser adestrada. As ESN son boas para reproducir certas series temporais. Unha variante para aumentar as neuronas coñécese como máquina de estado líquido.

### Recursividade 
Unha rede neural recursiva créase aplicando o mesmo conxunto de pesos de forma recursiva sobre unha estrutura diferenciable atravesando a estrutura en orde topolóxica. Tales redes normalmente tamén son adestradas polo modo inverso de diferenciación automática. Poden procesar representacións distribuídas da estrutura, como termos lóxicos. Un caso especial de redes neurais recursivas é unha RNN cuxa estrutura corresponde a unha cadea linear. Estas redes aplicáronse ao procesamento da linguaxe natural.

### Máquinas de Turing neurais 
As máquinas de Turing neurais son un método de estender redes neurais recorrentes acoplándoas a recursos de memoria externos cos que interactúan. O sistema combinado é análogo a unha máquina de Turing ou a arquitectura Von Neumann, mais é diferenciable de extremo a extremo, o que lle permite ser adestrado de forma eficiente co método do descenso do gradiente.

As computadoras neurais diferenciables son unha extensión das máquinas de Turing neurais, que permiten o uso de cantidades difusas de cada enderezo de memoria e un rexistro da cronoloxía.

Os autómatas de pulo de redes neurais son similares ás Máquinas de Turing neurais, pero as cintas substitúense por pilas analóxicas diferenciables que se poden adestrar. Deste xeito, son similares en complexidade aos recoñecedores de gramáticas libres de contexto.

As redes neurais recorrentes son Turing completas e poden executar programas arbitrarios para procesar secuencias arbitrarias de entradas.

## Adestramento 
### *Teacher forcing* 
miniatura| RNN de codificador-descodificador sen mecanismo de atención. A forza do profesor móstrase en vermello.
Unha RNN pode ser adestrada nun modelo condicionalmente xerativo de secuencias, tamén coñecido como autorregresión.

Concretamente, considérese o problema da tradución automática, é dicir, dada unha secuencia (x_1, x_2, \dots, x_n) de palabras inglesas, o modelo ten que producir unha secuencia (y_1, \dots, y_m) de palabras galegas. Debe resolverse mediante un modelo seq2seq.

Durante o adestramento, a parte do codificador do modelo inxeriría primeiro (x_1, x_2, \dots, x_n). Logo, a parte do descodificador comezaría a xerar unha secuencia (\hat y_1, \hat y_2, \dots, \hat y_{l}). O problema é que se o modelo comete un erro dende o principio, sexa \hat y_2, entón é probable que as porcións posteriores tamén sexan erros. Isto fai que sexa ineficiente que o modelo obteña un sinal de aprendizaxe, xa que o modelo aprendería principalmente a cambiar \hat y_2 cara a y_2, pero non os demais.

O *teacher forcing* fai que o descodificador utilice a secuencia de saída correcta para xerar a seguinte entrada na secuencia. Así, por exemplo, veríase (y_1, \dots, y_{k}) para xerar \hat y_{k+1}.

### Descenso do gradiente con RNN 
O descenso do gradiente é un algoritmo de optimización iterativo de primeira orde para atopar o mínimo dunha función. Nas redes neurais, pódese usar para minimizar o termo de erro cambiando cada peso en proporción á derivada do erro con respecto a ese peso, sempre que as funcións de activación non lineares sexan diferenciables.

O método estándar para adestrar unha RNN por descenso do gradiente é o algoritmo de retropropagación a través do tempo (BPTT, das súas siglas en inglés, *BackPropagation through time*), que é un caso especial do algoritmo xeral de retropropagación. Unha variante máis cara computacionalmente chámase *Real-Time Recurrent Learning* (RTRL), que é un exemplo de diferenciación automática. A diferenza do algoritmo de retropropagación a través do tempo, este algoritmo é local no tempo pero non local no espazo.

Neste contexto, ser local no espazo significa que o vector de peso dunha unidade pode actualizarse usando só a información almacenada nas unidades conectadas e na propia unidade, de xeito que a complexidade de actualización dunha única unidade é linear na dimensión do vector de peso. Ser local no tempo significa que as actualizacións teñen lugar continuamente e dependen só do paso de tempo máis recente e non de varios pasos de tempo nun horizonte temporal determinado, coma no algoritmo de retropropagación a través do tempo. As redes neurais biolóxicas parecen ser locais tanto no tempo como no espazo.

Para calcular recursivamente as derivadas parciais, RTRL ten unha complexidade temporal de O(\text{numero de pesos ocultos} \times  \text{numero de pesos}) por paso de tempo para calcular as matrices xacobianas, mentres que BPTT só ten orde O(\text{numero de pesos}) por paso de tempo, polo custo de almacenar tódalas activacións cara adiante dentro do horizonte temporal dado. Existe un híbrido en liña entre BPTT e RTRL con complexidade intermedia, xunto con variantes para tempo continuo.

Un problema importante co descenso do gradiente para as arquitecturas RNN estándar é que os gradientes do erro desaparecen exponencialmente rápido co tamaño do desfase de tempo entre eventos importantes. LSTM combinado cun método de aprendizaxe híbrido BPTT/RTRL intenta superar estes problemas. Funciona coa maioría das redes localmente recorrentes. O algoritmo CRBP pode minimizar o termo de erro global. Este feito mellora a estabilidade do algoritmo, proporcionando unha visión unificadora das técnicas de cálculo de gradientes para redes recorrentes con retroalimentación local.

Unha aproximación ao cálculo da información do gradiente en redes neurais recorrentes con arquitecturas arbitrarias baséase na derivación esquemática de grafos de fluxo de sinal. Este esquema usa o algoritmo por lotes BPTT, baseado no teorema de Lee para os cálculos da sensibilidade da rede. Foi proposto por Wan e Beaufays, mentres que a súa versión rápida en liña foi proposta por Campolucci, Uncini e Piazza. é unha función de perda especializada para adestrar redes neurais recorrentes para problemas de modelaxe de secuencias onde o tempo é variable.

### Métodos de optimización global para RNN 
O adestramento dos pesos nunha rede neural pódese modelar como un problema de optimización global non linear. Pódese formar unha función obxectivo para avaliar a aptitude ou o erro dun vector de peso particular. En primeiro lugar, os pesos na rede establécense segundo o vector de peso. A continuación, avalíase a rede en función da secuencia de adestramento. Normalmente, a diferenza da suma dos cadrados entre as predicións e os valores obxectivo especificados na secuencia de adestramento úsase para representar o erro do vector de peso actual. Pódense empregar técnicas de optimización global arbitrarias para minimizar esta función obxectivo.

O método de optimización global máis común para adestrar redes neurais recorrentes son os algoritmos xenéticos, especialmente en redes non estruturadas.

Inicialmente, o algoritmo xenético está codificado cos pesos da rede neural dun xeito predefinido onde un xene do cromosoma representa un enlace de peso. Toda a rede represéntase como un único cromosoma. A función de *fitness* avalíase do seguinte xeito:

* Cada peso codificado no cromosoma está asignado ao enlace de peso respectivo da rede.
* O conxunto de adestramento preséntase á rede que propaga os sinais de entrada cara adiante.
* O erro cadrático medio devólvese á función de *fitness*.
* Esta función dirixe o proceso de selección xenética.

Moitos cromosomas conforman o que che chama poboación. Mentres tanto, moitas redes neurais diferentes van evolucionando ata que se cumpre un criterio de parada. As tres seguintes condicións son esquemas de parada comúns:

* Cando a rede neural aprendeu unha determinada porcentaxe dos datos de adestramento.
* Cando se cumpre o valor mínimo do erro cadrático medio.
* Cando se alcance o número máximo de xeracións de formación.

A función de *fitness* avalía o criterio de parada xa que recibe o erro cuadrático medio recíproco de cada rede durante o adestramento. Polo tanto, o obxectivo do algoritmo xenético é maximizar a función de *fitness*, reducindo o erro cadrático medio.

Pódense usar outras técnicas de optimización globais (e/ou evolutivas) para buscar un bo conxunto de pesos, como o recocido simulado ou a optimización do enxame de partículas.

## Outras arquitecturas 
### RNN independente (IndRNN) 
A rede neural recorrente independente (IndRNN) aborda os problemas de esvaecemento e explosión do gradiente na RNN tradicional totalmente conectada. Cada neurona dunha capa só recibe o seu propio estado pasado como información de contexto (en lugar de conectividade total con todas as outras neuronas desta capa) e, polo tanto, as neuronas son independentes da historia das outras. A retropropagación do gradiente pódese regular para evitar que o gradiente desapareza e explote, e tamén para manter a memoria a longo ou curto prazo. A información entre neuronas é explorada nas capas seguintes. A IndRNN pódese adestrar de forma robusta con funcións non lineares non saturadas como ReLU. As redes profundas pódense adestrar usando conexións de salto.

### Compresor de historia neural 
O compresor do historial neural é unha pila non supervisada de RNN. A nivel de entrada, aprende a predicir a súa próxima entrada a partir das entradas anteriores. Só as entradas imprevisibles dalgunhas RNN na xerarquía convértense en entradas para a RNN de nivel superior, que só ás veces volve calcular o seu estado interno. Así, cada RNN de nivel superior estuda unha representación comprimida da información da RNN seguinte. Isto faise de xeito que a secuencia de entrada poida ser reconstruída con precisión a partir da representación do nivel máis alto.

O sistema minimiza a lonxitude da descrición ou o logaritmo negativo da probabilidade dos datos. A RNN de máis alto nivel pode usar a aprendizaxe supervisada para clasificar facilmente secuencias profundas con longos intervalos entre eventos importantes.

É posible destilar a xerarquía das redes neurais recorrentes en dúas RNN: o fragmentador "consciente" (nivel superior) e o automatizador "subconsciente" (nivel inferior). Unha vez que o fragmentador aprendeu a predicir e comprimir entradas que son imprevisibles polo automatizador, este último pode verse obrigado na seguinte fase de aprendizaxe a predicir, ou imitar a través de unidades adicionais, as unidades ocultas do fragmentador que cambia máis lentamente. Isto facilita que o automatizador aprenda adecuadamente. Á súa vez, isto axuda ao automatizador a facer previsibles moitas das súas entradas, antes impredicibles, de forma que o fragmentador poida centrarse nos eventos imprevisibles restantes. A memoria a longo e curto prazo é un exemplo diso, pero non ten tales cartografías formais nin probas de estabilidade.

### Rede neural recorrente xerárquica 
As redes neurais recorrentes xerárquicas (HRNN, das súas siglas en inglés, *Hierarchical Recurrent Neural Networks*) conectan as súas neuronas de varias maneiras para descompoñer o comportamento xerárquico en subprogramas útiles. Tales estruturas xerárquicas da cognición están presentes nas teorías da memoria presentadas polo filósofo Henri Bergson, cuxas visións filosóficas inspiraron modelos xerárquicos.

As redes neurais recorrentes xerárquicas son útiles na previsión, axudando a predicir os compoñentes desagregados da inflación do índice de prezos ao consumidor (IPC). O modelo HRNN aproveita a información dos niveis máis altos da xerarquía do IPC para mellorar as predicións de nivel inferior. A avaliación dun conxunto de datos substancial do índice CPI-U dos Estados Unidos demostra o rendemento superior do modelo HRNN en comparación con varios métodos establecidos de predición da inflación.

### Rede perceptrón multicapa recorrente 
Xeralmente, unha rede perceptrón multicapa recorrente (rede RMLP, das súas siglas en inglés, *Recurrent Multilayer Perceptron Network*) consta de subredes en cascada, onde cada unha contén varias capas de nodos. Cada subrede é de propagación cara adiante excepto a última capa, que pode ter conexións de retroalimentación. Cada unha destas subredes está conectada só mediante conexións de propagación cara adiante.

### Modelo de varias escalas de tempo 
Unha rede neural recorrente en varias escalas de tempo é un modelo computacional baseado en neuronas que pode simular a xerarquía funcional do cerebro mediante a autoorganización dependendo da conexión espacial entre as neuronas e de distintos tipos de actividades neurais, cada unha con distintas propiedades de tempo. Con actividades neurais tan variadas, as secuencias continuas de calquera conxunto de comportamentos están segmentadas en primitivas reutilizables, que á súa vez se integran de forma flexible en diversos comportamentos secuenciais. A aprobación biolóxica deste tipo de xerarquía foi discutida na teoría da memoria e predición da función cerebral de Hawkins no seu libro *Sobre a intelixencia*. Tal xerarquía tamén concorda coas teorías da memoria formuladas polo filósofo Henri Bergson, que foron incorporadas a un modelo deste tipo.

### Redes *memristivas* 
Greg Snider de HP Labs describe un sistema de computación cortical con nanodispositivos *memristivos*. Os *memristores* (resistencias de memoria) están implementados por materiais de película delgada nos que a resistencia está axustada electricamente mediante o transporte de ións ou vacantes de osíxeno dentro da película. O proxecto SyNAPSE de DARPA financiou IBM Research e HP Labs, en colaboración co Departamento de Sistemas Cognitivos e Neurais (CNS) da Universidade de Boston, para desenvolver arquitecturas neuromórficas que puideran estar baseadas en sistemas *memristivos*. As redes *memristivas* son un tipo particular de redes neurais físicas que teñen propiedades moi similares ás redes (Little-)Hopfield, xa que teñen dinámica continua, capacidade de memoria limitada e relaxación natural mediante a minimización dunha función que é asintótica do modelo de Ising. Neste sentido, a dinámica dun circuíto *memristivo* ten a vantaxe en comparación cunha rede Resistor-Condensador de ter un comportamento non linear máis interesante. Dende este punto de vista, as redes *memristivas* analóxicas de enxeñaría representan un tipo peculiar de enxeñaría neuromórfica na que o comportamento do dispositivo depende do cableado ou da topoloxía do circuíto. A evolución destas redes pódese estudar analiticamente utilizando variacións da ecuación Caravelli–Traversa–Di Ventra.

## Tempo continuo 
Unha rede neural recorrente en tempo continuo (CTRNN, das súas siglas en inglés *Continuous-Time Recurrent Neural Network*) usa un sistema de ecuacións diferenciais ordinarias para modelar os efectos sobre unha neurona das entradas de entrada. Normalmente son analizados pola teoría de sistemas dinámicos. Moitos modelos RNN en neurociencia son de tempo continuo.

Para unha neurona i na rede con activación y_{i}, a taxa de cambio de activación vén dada por:

: \tau_{i}\dot{y}_{i}=-y_{i}+\sum_{j=1}^{n}w_{ji}\sigma(y_{j}-\Theta_{j})+I_{i}(t)

Onde:

* \tau_{i} é a constante de tempo do nodo postsináptico.
* y_{i} é a activación do nodo postsináptico.
* \dot{y}_{i} é a taxa de cambio de activación do nodo postsináptico.
* w{}_{ji} é o peso da conexión do nodo presináptico ao nodo postsináptico.
* \sigma(x) é a función sigmoide de x, por exemplo, \sigma(x) = 1/(1+e^{-x}).
* y_{j} é a activación do nodo presináptico.
* \Theta_{j} é o nesgo do nodo presináptico.
* I_{i}(t) é a entrada (se existe) ao nodo.

As CTRNN aplicáronse á robótica evolutiva, onde se utilizaron para abordar a visión, a cooperación e o comportamento cognitivo mínimo.

Nótese que, segundo o teorema de mostraxe de Shannon, as redes neurais recorrentes en tempo discreto poden verse como redes neurais recorrentes en tempo continuo onde as ecuacións diferenciais transformáronse en ecuacións diferenciais equivalentes.

Estas redes son, de feito, redes neurais recursivas cunha estrutura particular: a dunha cadea linear. Mentres que as redes neurais recursivas operan en calquera estrutura xerárquica, xuntando representacións fillas e representacións nais, as redes neurais recorrentes operan na progresión linear do tempo, convertendo o paso de tempo anterior e unha representación oculta na representación do paso de tempo actual.

Dende unha perspectiva de series temporais, as RNN poden aparecer como versións non lineares de filtros de resposta de impulso finito, de resposta de impulso infinito e como un modelo esóxeno autorregresivo non linear. Por exemplo, as redes neurais recorrentes teñen unha resposta de impulso infinita, mentres que as redes neurais convolucionais teñen unha resposta de impulso finita . Ambas clases de redes presentan un comportamento dinámico temporal. Unha rede recorrente de impulso finito é un grafo acíclico dirixido que se pode desenrolar e substituír por unha rede neural estritamente de avance, mentres que unha rede recorrente de impulso infinito é un grafo cíclico dirixido que non se pode desenrolar.

O efecto da aprendizaxe baseada na memoria para o recoñecemento de secuencias tamén se pode implementar mediante un modelo de base máis biolóxica que utiliza o mecanismo de silenciamento exhibido nas neuronas cunha actividade de picos de frecuencia relativamente alta.

Pódense engadir estados almacenados adicionais e o almacenamento baixo control directo pola rede tanto ás redes de impulso infinito como ás redes de impulso finito. Outra rede ou grafo tamén pode substituír o almacenamento se incorpora atrasos de tempo ou ten bucles de retroalimentación. Estes estados controlados denomínanse estados con porta ou memoria con porta e forman parte das redes de memoria a longo e curto prazo (LSTM) e das unidades recorrentes con porta. Isto tamén se denomina Rede Neural de Propagación cara adiante (FNN, das súas siglas en inglés, *Feedback Neural Network*).

## Bibliotecas 
O seguinte pseudocódigo (baseado na linguaxe de programación Python) ilustra a funcionalidade dunha rede neural recorrente.
```python
def RNN_forward(x, lonxitude_secuencia, rede_neural, tamano_oculto):
  oculto = zeros(size=tamano_oculto) # inicializar con ceros para cada serie temporal
  y_pred = zeros(size=lonxitude_secuencia)
  for i in range(lonxitude_secuencia):
    y_pred[i], oculto = rede_neural(x[i], oculto) # actualizar o estado oculto
  return y_pred
```
As bibliotecas modernas ofrecen implementacións optimizadas para o tempo de execución da funcionalidade anterior ou permiten acelerar o ciclo lento mediante a compilación en tempo de execución.

## Aplicacións 
As aplicacións das redes neurais recorrentes inclúen:

* Tradución automática 
* Predición de series temporais
* Recoñecemento de voz 
* Interfaces cerebro-ordenador 
* Detección de anomalías de serie temporal 
* Modelo de texto a vídeo 
* Aprendizaxe do ritmo 
* Composición musical 
* Aprendizaxe da gramática
* Recoñecemento da acción humana
* Detección de homoloxía de proteínas
* Predición da localización subcelular das proteínas
* Varias tarefas de predición no ámbito da xestión de procesos de negocio
* Predición nas vías de atención médica
* Predicións de interrupcións de plasma de fusión en reactores (código de Rede Neural Recorrente de Fusión)

## Notas 
## Véxase tamén 
### Outros artigos 
*Intelixencia artificial
*Rede neural artificial
*Rede neural convolucional