REDES RECURRENTES

Deep Learning - Clase 3

Cristóbal Silva

Secuencias como entrada

¿Qué pueden ser datos secuenciales?

Señales

Audio, financieras, médicas, etc.

The only thing necessary for the triumph of evil is for good men to do nothing.

Edmund Burke

Texto

Palabras, caracteres, n-gramas, etc.

Imágenes

Videos (secuencia de frames)

Secuencias como entrada

¿Qué problemas pueden resolver?

Entrada y salida pueden ser secuencias; a veces del mismo tamaño, a veces de diferente tamaño.

A veces solo la entrada es una secuencia; a veces solo la salida es una secuencia.

Secuencias como entrada

Distintas arquitecturas, dependiendo del tamaño de la entrada y la salida

Each rectangle is a vector and arrows represent functions (e.g. matrix multiply). Input vectors are in red, output vectors are in blue and green vectors hold the RNN's state (more on this soon). From left to right: (1) Vanilla mode of processing without RNN, from fixed-sized input to fixed-sized output (e.g. image classification). (2) Sequence output (e.g. image captioning takes an image and outputs a sentence of words). (3) Sequence input (e.g. sentiment analysis where a given sentence is classified as expressing positive or negative sentiment). (4) Sequence input and sequence output (e.g. Machine Translation: an RNN reads a sentence in English and then outputs a sentence in French). (5) Synced sequence input and output (e.g. video classification where we wish to label each frame of the video). Notice that in every case are no pre-specified constraints on the lengths sequences because the recurrent transformation (green) is fixed and can be applied as many times as we like.

The Unreasonable Effectiveness of Recurrent Neural Networks,
Andrej Karpathy, 2015

Forward-Pass

Notación compacta

Forward-Pass

Many-to-Many

Forward-Pass

Many-to-Many

Forward-Pass

Many-to-Many

Forward-Pass

Many-to-Many

Forward-Pass

Las dependencias se acumulan,
la red no es solo deep ahora, si no que también es wide

Many-to-Many

Función de Costo

Many-to-Many

Back-prop through time

Many-to-Many

Forward-Pass

Many-to-One

Forward-Pass

Many-to-Many

Forward-Pass

One-to-Many

Ejemplo - Modelar Lenguaje

One-to-Many

Supongamos que queremos predecir la probabilidad de ver una secuencia de letras. Sabemos que

P(``h",``o",``l",``a") > P(``a", ``z", ``s", ``x")
P(h",o",l",a")>P(a",z",s",x")P(``h",``o",``l",``a") > P(``a", ``z", ``s", ``x")

¿Cómo transmitimos eso a la red?
\( y_t \) es un vector con la probabilidad de cada letra dada la anterior

Ejemplo - Modelar Lenguaje

One-to-Many

Supongamos que queremos predecir la probabilidad de ver una secuencia de letras. Sabemos que

P(``h",``o",``l",``a") > P(``a", ``z", ``s", ``x")
P(h",o",l",a")>P(a",z",s",x")P(``h",``o",``l",``a") > P(``a", ``z", ``s", ``x")

¿Cómo transmitimos eso a la red?
\( y_t \) es un vector con la probabilidad de cada letra dada la anterior

Ejemplo - Modelar Lenguaje

One-to-Many

Supongamos que queremos predecir la probabilidad de ver una secuencia de letras. Sabemos que

P(``h",``o",``l",``a") > P(``a", ``z", ``s", ``x")
P(h",o",l",a")>P(a",z",s",x")P(``h",``o",``l",``a") > P(``a", ``z", ``s", ``x")

¿Cómo transmitimos eso a la red?
\( y_t \) es un vector con la probabilidad de cada letra dada la anterior

Regla de la cadena de probabilidades

Ejemplo - Modelar Lenguaje

One-to-Many

Supongamos que queremos predecir la probabilidad de ver una secuencia de letras. Sabemos que

P(``h",``o",``l",``a") > P(``a", ``z", ``s", ``x")
P(h",o",l",a")>P(a",z",s",x")P(``h",``o",``l",``a") > P(``a", ``z", ``s", ``x")

¿Cómo transmitimos eso a la red?
\( y_t \) es un vector con la probabilidad de cada letra dada la anterior

Obtener muestras del modelo

Para \( \ t = 1:N \)

  • Sacar vector de probabilidades a partir de la entrada
  • Muestrear un caracter usando esas probabilidades
  • Usar el caracter obtenido como siguiente entrada

Los modelos de lenguaje no son solamente a base de caracteres, también pueden construirse usando palabras completas a partir de un diccionario de palabras.

Vanishing/Exploding Gradients

Volviendo al primer ejemplo, ¿qué pasa con las dependencias en el tiempo?

¿cómo influye la primera "capa" sobre la "última"?

Volviendo al primer ejemplo, ¿qué pasa con las dependencias en el tiempo?

¿cómo influye la primera "capa" sobre la "última"?

Vanishing/Exploding Gradients

Volviendo al primer ejemplo, ¿qué pasa con las dependencias en el tiempo?

¿cómo influye la primera "capa" sobre la "última"?

¿Qué pasa si tenemos 100 en vez de 3 salidas?

Vanishing/Exploding Gradients

A medida que volvemos en el tiempo, la influencia depende de una mayor cantidad de multiplicaciones de matrices \( W_{hh} \)

Vanishing/Exploding Gradients

Si los valores propios de la matriz no son cercanos a 1

Matriz de valores propios

A medida que volvemos en el tiempo, la influencia depende de una mayor cantidad de multiplicaciones de matrices \( W_{hh} \)

Vanishing/Exploding Gradients

A medida que volvemos en el tiempo, la influencia depende de una mayor cantidad de multiplicaciones de matrices \( W_{hh} \)

Vanishing/Exploding Gradients

Exploding Gradient puede mitigarse poniendo una cota superior al gradiente

Vanishing Gradient requiere una solución más compleja

Una capa oculta es simplemente una fully-connected con entrada y salida únicas.

Usualmente la función de activación será \( \tanh \) .

La entrada puede ser \( x_t \) o \( h_t \) pero por simplicidad usaremos solo la primera.

Capa oculta actual

Long-Short-Term-Memory (LSTM)

Supongamos que existe una compuerta que permite controlar si una activación pasa o no con cierta probabilidad (short-term memory)

Long-Short-Term-Memory (LSTM)

Adicionalmente existirá una entrada \( c_{t-1} \) que contiene información de todos los estados anteriores (long-term memory) y no pasa por el filtro de input

Supongamos que existe una compuerta que permite controlar si una activación pasa o no con cierta probabilidad (short-term memory)

La salida es una combinación entre short-term y long-term más una función de activación

Long-Short-Term-Memory (LSTM)

Adicionalmente existirá una entrada \( c_{t-1} \) que contiene información de todos los estados anteriores (long-term memory) y no pasa por el filtro de input

Supongamos que existe una compuerta que permite controlar si una activación pasa o no con cierta probabilidad (short-term memory)

La salida es una combinación entre short-term y long-term más una función de activación
La nueva long-term memory es pasada al estado siguiente sin aplicar activación no-lineal

Long-Short-Term-Memory (LSTM)

La salida pasará por una compuerta similar a la de entrada, controlando las partes de la long-term memory que formarán parte de la salida que usará el estado siguiente \( h_{t+1} \) y la salida actual \( y_t \)

Adicionalmente existirá una entrada \( c_{t-1} \) que contiene información de todos los estados anteriores (long-term memory) y no pasa por el filtro de input

Supongamos que existe una compuerta que permite controlar si una activación pasa o no con cierta probabilidad (short-term memory)

La salida es una combinación entre short-term y long-term más una función de activación
La nueva long-term memory es pasada al estado siguiente sin aplicar activación no-lineal

Long-Short-Term-Memory (LSTM)

La salida pasará por una compuerta similar a la de entrada, controlando las partes de la long-term memory que formarán parte de la salida que usará el estado siguiente \( h_{t+1} \) y la salida actual \( y_t \)

Adicionalmente existirá una entrada \( c_{t-1} \) que contiene información de todos los estados anteriores (long-term memory) y no pasa por el filtro de input

Supongamos que existe una compuerta que permite controlar si una activación pasa o no con cierta probabilidad (short-term memory)

La salida es una combinación entre short-term y long-term más una función de activación
La nueva long-term memory es pasada al estado siguiente sin aplicar activación no-lineal

Finalmente se añade la compuerta de olvido, que borrará partes de long-term memory según sea necesario para la red

Long-Short-Term-Memory (LSTM)

Reordenando todo lo anterior tenemos el siguiente esquema de LSTM.

¿De dónde salen las probabilidades de cada compuerta?

Long-Short-Term-Memory (LSTM)

Reordenando todo lo anterior tenemos el siguiente esquema de LSTM.

¿De dónde salen las probabilidades de cada compuerta?

Se aprenden a partir de la entrada

Long Short Term Memory,
Hochreiter S., Schmidhuber J., Neural Computation, 1997

Long-Short-Term-Memory (LSTM)

\begin{aligned} o &= \sigma(W_{ox}x_t + W_{oh}h_{t-1}) \\ i &= \sigma(W_{ix}x_t + W_{ih}h_{t-1}) \\ f &= \sigma(W_{fx}x_t + W_{fh}h_{t-1}) \\ g &= \tanh(W_{gx}x_t + W_{gh}h_{t-1}) \end{aligned}
o=σ(Woxxt+Wohht1)i=σ(Wixxt+Wihht1)f=σ(Wfxxt+Wfhht1)g=tanh(Wgxxt+Wghht1)\begin{aligned} o &= \sigma(W_{ox}x_t + W_{oh}h_{t-1}) \\ i &= \sigma(W_{ix}x_t + W_{ih}h_{t-1}) \\ f &= \sigma(W_{fx}x_t + W_{fh}h_{t-1}) \\ g &= \tanh(W_{gx}x_t + W_{gh}h_{t-1}) \end{aligned}
\begin{aligned} c_t &= f * c_{t-1} + i * g \\ h_t &= o * \tanh (c_t) \end{aligned}
ct=fct1+ight=otanh(ct)\begin{aligned} c_t &= f * c_{t-1} + i * g \\ h_t &= o * \tanh (c_t) \end{aligned}

Reordenando todo lo anterior tenemos el siguiente esquema de LSTM.

¿De dónde salen las probabilidades de cada compuerta?

Se aprenden a partir de la entrada

Long Short Term Memory,
Hochreiter S., Schmidhuber J., Neural Computation, 1997

Long-Short-Term-Memory (LSTM)

La nueva celda reemplaza todas las neuronas de la capa oculta

Gated-Recurrent-Unit (GRU)

Más simple que LSTM en cantidad de parámetros y activaciones

Diferencias con LSTM

Ya no existe long-term memory \( c_t \)

Una compuerta controla el input y el forget.

Si la salida de la compuerta es 1

  • input se abre, forget se cierra

Si la salida de la compuerta es 0

  • forget se abre, input se cierra

Ya no existe compuerta output

Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation,
Cho K. et. al., Conference on Empirical Methods in Natural Language Processing, 2014

Gated-Recurrent-Unit (GRU)

Más simple que LSTM en cantidad de parámetros y activaciones

\begin{aligned} z &= \sigma(W_{xz}x_t + W_{hz}h_{t-1}) \\ r &= \sigma(W_{xr}x_t + W_{hr}h_{t-1}) \\ g &= \sigma(W_{xg}x_t + W_{hg}(r * h_{t-1})) \end{aligned}
z=σ(Wxzxt+Whzht1)r=σ(Wxrxt+Whrht1)g=σ(Wxgxt+Whg(rht1))\begin{aligned} z &= \sigma(W_{xz}x_t + W_{hz}h_{t-1}) \\ r &= \sigma(W_{xr}x_t + W_{hr}h_{t-1}) \\ g &= \sigma(W_{xg}x_t + W_{hg}(r * h_{t-1})) \end{aligned}
\begin{aligned} h_t &= (1-z) * \tanh (W_{xg}h_{t-1} + z*g) \end{aligned}
ht=(1z)tanh(Wxght1+zg)\begin{aligned} h_t &= (1-z) * \tanh (W_{xg}h_{t-1} + z*g) \end{aligned}

Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation,
Cho K. et. al., Conference on Empirical Methods in Natural Language Processing, 2014

Redes Neuronales Recurrentes

  • Chapter 14: Recurrent Neural Networks,
    Hands-on Machine Learning with Scikit-Learn and TensorFlow, 1st ed., 2017

Celdas

  • LSTM
    • Hochreiter et. al., Long Short Term Memory,
      Neural Computation, 1997
  • GRU
    • Cho et. al., Learning Phrase Representations using RNN Encoder-Decoder for Statistical Machine Translation, Conference on Empirical Methods in Natural Language Processing, 2014
  • Week 1: Recurrent Neural Networks,
    Sequence Models, deeplearning.ai, 2018

Referencias

Frameworks

Programación Probabilística

Otras referencias

Redes Neuronales Convolucionales

Referencias

3 - Redes Recurrentes

By crsilva

3 - Redes Recurrentes

  • 234
Loading comments...

More from crsilva