Documentos de Académico
Documentos de Profesional
Documentos de Cultura
desde 0 en R
En R existen varios paquetes que nos permiten crear Redes Neuronales, como
neuralnet o las más recientes (y conocidas) tensorflow y keras. Sí son paquetes
muy potentes y seguramente escriba sobre ellos en un futuro, pero me gustaría
comenzar explicando qué es una red neuronal, qué partes tiene y cómo podemos
programar una desde 0 en R. Así que vamos a ello.
Ahora solo nos queda programar la función relu, junto con su derivada, como hago a
continuación:
Por último, nos queda poner todo de forma conjunta para crear la estructura de la red
neuronal, es decir, las capas que conforman la red.
En nuestro caso, al haber creado la clase neurona, crearemos las capas de manera
iterativa. Así, esta misma forma de programar las neuronas nos servirá también para
otras redes neurionales con otra estructura.
Ahora que ya tenemos la estructura de la red neuronal, pero de momento esto nos
sirve de poco. Tenemos que entrenar a nuestra red neuronal, así que vamos a ello.
Programar una red neuronal en R: entrenando a la
red neuronal
El entrenamiento de una red neuronal tiene tres pasos:
Front propagation: la red neuronal recibirá unos valores de entrada. Capa a
capa se irán haciendo unas operaciones hasta que la red nos devuelva un valor.
Seguramente, como la red no esté entrenada fallará más que una escopeta de feria,
por lo que habrá que ir haciendo ajustes, mediante los dos siguientes pasos:
Back propagation: una vez hemos recibido el resultado, lo comparamos con el
resultado real. Esta comparación la hacemos aplicando una función de coste, lo cual
nos devolverá un error. Utilizaremos ese error para ir ajustando los valores de la red
neuronal hacia atrás: última capa, anteúltima, etc.
Optimizamos la función de coste: a medida que se va propagando hacia
atrás, usamos una función de optimización (general
mente el descenso del gradiente) para ir optimizando los parámetros b y W.
Así, la red irá mejorando en el entrenamiento poco a poco.
Hechas las introducciones, ¡vamos con la propagación hacia adelante!
Entrenando a la Red Neuronal: Propagación hacia adelante
A la hora de hacer la propagación hacia adelante, iremos guardando el resultado de
la neurona antes (a) y después de aplicar la función de activación (z). ¿Por qué?
Pues para tener los valores guardados para cuando hagamos la propagación hacia
atrás, más que nada.
Ya tenemos nuestra función de coste para “juzgar” nuestra red neuronal programada
en R. Ahora, vamos a entrenarla.
Entrenando a la Red Neuronal: Back Propagation
En este caso, tenemos que hacer la propagación hacia atrás. Para ello, usaremos la
funciónrev, la cual devuelve el reverso del objeto que le pasemos, en nuestro caso,
la lista out, que son los resultados por capa del front propagation.
Ahora, en cada caso tendremos que calcular el error de la capa respecto al coste,
también conocido como la delta. Para calcular la delta respecto a la capa previa,
habría dos casos:
En la última capa debemos multiplicar la derivada de la función de coste y el
resultado de la función de activación en la última capa.
En las demás capas, debemos usar el error (delta) de la capa anterior, multiplicado
de forma matricial por el vector de pesos de la capa siguiente, para así moverlo
hacia atrás.
¡F
unciona! Ahora solo queda lo último. Iterar para que la red vaya aprendiendo.
Además, iremos mostrando el error de la red para ir viendo cómo va mejorando a
medida que pasa el tiempo.
Para ello, vamos a hacer 1000 iteraciones e ir calculando y guardando el error cada
20 iteraciones.