Julia

Redes neuronales

Author

David Gómez-Castro

Redes neuronales

https://commons.wikimedia.org/wiki/File:Colored_neural_network.svg

Una capa

https://commons.wikimedia.org/wiki/File:Single_layer_ann.svg

  • \(x_1, x_2, \cdots\) son las entradas

  • \(y_1, y_2, \cdots\) son las salidas

  • \(w_{11}, w_{12}, \cdots\) son los

  • Se calcula \(\displaystyle b_1 = w_{11} x_1 + w_{21} x_2 + w_{31} x_3 + \cdots\)

  • Y luego \(y_1 = f ( b_1 )\)

  • \(f\) es la llamada

Denotamos \(\mathbf x = (x_1, \cdots, x_p)\), \(\mathbf y = (y_1, \cdots, y_q)\), \(\mathbf W = (w_{11}, w_{12}, \cdots )\)

Red de neuronas

Se pueden hacer redes

de varias capas:

la salida de una

es la entrada de la otra.

Si tenemos muchos pares de entradas y sus respectivas salidas

\[ \widehat{\mathbf y_i} = F(\mathbf x_i, \mathbf W) \]

Buscar los mejores pesos \(\mathbf W\) se llama

entrenar la red

Hay muchas generalizaciones de esta idea: redes profundas (muchas capas), redes convolucionales, …

¿Cómo de potente es esto? Vídeo de Google DeepMind

Evaluación de la red: forward-propagation

Al algoritmo para, dados los pesos y la entrada calcular la salida se lo llama forward propagation.

Entrenamiento de redes

Se separan los datos en un conjunto de entrenamiento y conjunto de pruebas

Para ajustar la red tenemos que elegir una función de pérdida \(d({\mathbf y}, \widehat{\mathbf y})\). Por ejemplo \(|{\mathbf y} - \widehat{\mathbf y}|^2\).

A partir de ella elegimos una función de coste, que tenga en cuenta todos las pérdidas. Por ejemplo el error cuadrático medio \[ J(W) = \frac{1}{N} \sum_{i=1}^N |{\mathbf y_i} - \widehat{\mathbf y_i}|^2 \]

Así:

  • Se elige \(\mathbf W\) minimizando el coste sobre el conjunto de entrenamiento
  • Se comprueba que es “bueno” en general el coste con este \(\mathbf W\) sobre el conjunto de prueba (que debe ser distinto al de entrenamiento)

Hay múltiples opciones para la elección de función de coste y hacer la optimización eficientemente es gran parte de la dificultad.

Optimización en el entrenamiento

Para optimizar se utilizan múltiples procedimientos.

El ejemplo más sencillo es el descenso por gradiente \[ W_{n+1} = W_n - \gamma \Delta J (W_n). \]

Para calcular \(\nabla J\) se emplea la regla de cadena. A este proceso lo llama back-progation.

Un ejemplo detallado en Julia

Flux.jl

Flux es una de las mejores librerías de ML en Julia.

Video de introducción

Ajustar una línea

Un ejemplo no trivial

Otros paquetes

MLJ.jl