Recurrent Neural Networks/es

    From Marovi AI
    < Recurrent Neural Networks
    Revision as of 04:01, 24 April 2026 by DeployBot (talk | contribs) ([deploy-bot] Deploy from CI (775ba6e))
    (diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
    Languages: English | Español | 中文
    Article
    Topic area Deep Learning
    Difficulty Intermediate
    Prerequisites Neural Networks, Backpropagation

    Las redes neuronales recurrentes (RNN) son una clase de redes neuronales disenadas para procesar datos secuenciales — datos en los que el orden de los elementos importa. A diferencia de las redes prealimentadas, las RNN contienen conexiones recurrentes que permiten que la informacion persista a traves de los pasos temporales, otorgandoles una forma de memoria.

    Modelado de secuencias

    Muchos problemas del mundo real involucran secuencias: el texto es una secuencia de palabras, el habla es una secuencia de tramas de audio, los precios de las acciones forman una serie temporal y el ADN es una secuencia de nucleotidos. Las redes prealimentadas estandar requieren entradas de tamano fijo y tratan cada entrada de forma independiente, lo que las hace inadecuadas para secuencias de longitud variable donde el contexto importa.

    Las RNN abordan esto procesando las entradas un elemento a la vez mientras mantienen un estado oculto que resume la informacion vista hasta el momento.

    RNN basica

    En cada paso temporal $ t $, una RNN basica calcula:

    $ \mathbf{h}_t = \tanh(\mathbf{W}_{hh}\,\mathbf{h}_{t-1} + \mathbf{W}_{xh}\,\mathbf{x}_t + \mathbf{b}_h) $
    $ \mathbf{y}_t = \mathbf{W}_{hy}\,\mathbf{h}_t + \mathbf{b}_y $

    donde $ \mathbf{x}_t $ es la entrada en el instante $ t $, $ \mathbf{h}_t $ es el estado oculto, $ \mathbf{y}_t $ es la salida, y $ \mathbf{W}_{hh}, \mathbf{W}_{xh}, \mathbf{W}_{hy} $ son matrices de pesos compartidas en todos los pasos temporales. El estado oculto inicial $ \mathbf{h}_0 $ se establece tipicamente como el vector cero.

    La idea clave es que los mismos parametros se aplican en cada paso temporal — comparticion de pesos en el tiempo — lo que permite a la red generalizar a traves de diferentes posiciones en la secuencia.

    Backpropagation a traves del tiempo (BPTT)

    El entrenamiento de una RNN requiere calcular los gradientes de la perdida con respecto a los pesos compartidos. Backpropagation a traves del tiempo (BPTT) "desenrolla" la RNN a lo largo de los pasos temporales, produciendo una red prealimentada profunda con pesos compartidos, y luego aplica backpropagation estandar.

    Para una secuencia de longitud $ T $, el gradiente de la perdida con respecto a $ \mathbf{W}_{hh} $ involucra un producto de jacobianos:

    $ \frac{\partial L}{\partial \mathbf{W}_{hh}} = \sum_{t=1}^{T}\frac{\partial L_t}{\partial \mathbf{W}_{hh}} = \sum_{t=1}^{T}\sum_{k=1}^{t}\frac{\partial L_t}{\partial \mathbf{h}_t}\left(\prod_{j=k+1}^{t}\frac{\partial \mathbf{h}_j}{\partial \mathbf{h}_{j-1}}\right)\frac{\partial \mathbf{h}_k}{\partial \mathbf{W}_{hh}} $

    El producto de jacobianos $ \prod \partial \mathbf{h}_j / \partial \mathbf{h}_{j-1} $ es la fuente de los problemas de gradientes que se desvanecen y explotan.

    El problema del gradiente que se desvanece

    Cuando el radio espectral del jacobiano recurrente es menor que 1, la senal del gradiente decae exponencialmente a traves del tiempo — el problema del gradiente que se desvanece. Esto hace extremadamente dificil que las RNN basicas aprendan dependencias que abarquen mas de 10–20 pasos temporales.

    Por el contrario, cuando el radio espectral supera 1, los gradientes pueden crecer exponencialmente — el problema del gradiente que explota. Los gradientes que explotan se manejan tipicamente mediante recorte de gradientes (limitar la norma del gradiente a un umbral), pero los gradientes que se desvanecen requieren soluciones arquitectonicas.

    Long Short-Term Memory (LSTM)

    El LSTM (Hochreiter y Schmidhuber, 1997) introduce un estado de celda $ \mathbf{c}_t $ que fluye a traves del tiempo con minima interferencia, y tres compuertas que controlan el flujo de informacion:

    $ \mathbf{f}_t = \sigma(\mathbf{W}_f[\mathbf{h}_{t-1}, \mathbf{x}_t] + \mathbf{b}_f) $ (compuerta de olvido)
    $ \mathbf{i}_t = \sigma(\mathbf{W}_i[\mathbf{h}_{t-1}, \mathbf{x}_t] + \mathbf{b}_i) $ (compuerta de entrada)
    $ \tilde{\mathbf{c}}_t = \tanh(\mathbf{W}_c[\mathbf{h}_{t-1}, \mathbf{x}_t] + \mathbf{b}_c) $ (estado de celda candidato)
    $ \mathbf{c}_t = \mathbf{f}_t \odot \mathbf{c}_{t-1} + \mathbf{i}_t \odot \tilde{\mathbf{c}}_t $ (actualizacion del estado de celda)
    $ \mathbf{o}_t = \sigma(\mathbf{W}_o[\mathbf{h}_{t-1}, \mathbf{x}_t] + \mathbf{b}_o) $ (compuerta de salida)
    $ \mathbf{h}_t = \mathbf{o}_t \odot \tanh(\mathbf{c}_t) $

    El estado de celda actua como una cinta transportadora: la compuerta de olvido decide que informacion antigua descartar, la compuerta de entrada decide que informacion nueva almacenar, y la compuerta de salida controla lo que se expone a la siguiente capa. Dado que el estado de celda se actualiza mediante suma (no multiplicacion), los gradientes fluyen mas facilmente a traves de secuencias largas.

    Unidad Recurrente con Compuertas (GRU)

    La GRU (Cho et al., 2014) simplifica el LSTM fusionando el estado de celda y el estado oculto y utilizando solo dos compuertas:

    $ \mathbf{z}_t = \sigma(\mathbf{W}_z[\mathbf{h}_{t-1}, \mathbf{x}_t]) $ (compuerta de actualizacion)
    $ \mathbf{r}_t = \sigma(\mathbf{W}_r[\mathbf{h}_{t-1}, \mathbf{x}_t]) $ (compuerta de reinicio)
    $ \tilde{\mathbf{h}}_t = \tanh(\mathbf{W}[\mathbf{r}_t \odot \mathbf{h}_{t-1}, \mathbf{x}_t]) $
    $ \mathbf{h}_t = (1 - \mathbf{z}_t) \odot \mathbf{h}_{t-1} + \mathbf{z}_t \odot \tilde{\mathbf{h}}_t $

    La GRU tiene menos parametros que el LSTM y a menudo alcanza un rendimiento comparable. En la practica, la eleccion entre LSTM y GRU se realiza tipicamente de forma empirica.

    RNN bidireccionales

    Una RNN bidireccional procesa la secuencia en ambas direcciones — hacia adelante (de izquierda a derecha) y hacia atras (de derecha a izquierda) — y concatena los estados ocultos:

    $ \mathbf{h}_t = [\overrightarrow{\mathbf{h}}_t;\; \overleftarrow{\mathbf{h}}_t] $

    Esto permite al modelo utilizar tanto el contexto pasado como el futuro en cada paso temporal, lo cual es beneficioso para tareas como el reconocimiento de entidades nombradas y la traduccion automatica, donde el significado de una palabra depende de su contexto circundante.

    Aplicaciones

    Las RNN y sus variantes con compuertas se han aplicado a una amplia gama de tareas secuenciales:

    • Modelado del lenguaje — predecir la siguiente palabra en una secuencia.
    • Traduccion automatica — arquitecturas codificador-decodificador para traduccion secuencia a secuencia (Sutskever et al., 2014).
    • Reconocimiento de voz — transcripcion de audio a texto (a menudo combinado con la perdida CTC).
    • Analisis de sentimiento — clasificacion del sentimiento de un texto.
    • Prediccion de series temporales — prediccion de valores futuros de datos financieros o de sensores.
    • Generacion de musica — generacion de secuencias de notas.

    Cabe destacar que para muchas tareas de procesamiento del lenguaje natural, los Transformers (Vaswani et al., 2017) han reemplazado en gran medida a las RNN debido a su capacidad para procesar secuencias en paralelo y capturar dependencias de largo alcance de manera mas efectiva mediante autoatencion.

    Vease tambien

    Referencias

    • Elman, J. L. (1990). "Finding Structure in Time". Cognitive Science, 14(2), 179–211.
    • Hochreiter, S. and Schmidhuber, J. (1997). "Long Short-Term Memory". Neural Computation, 9(8), 1735–1780.
    • Cho, K. et al. (2014). "Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation". EMNLP.
    • Sutskever, I., Vinyals, O. and Le, Q. V. (2014). "Sequence to Sequence Learning with Neural Networks". NeurIPS.
    • Goodfellow, I., Bengio, Y. and Courville, A. (2016). Deep Learning, Chapter 10. MIT Press.