Revolución IA

La Inteligencia Artificial está llamada a protagonizar la próxima Revolución tecnológica

Inicio Sobre Revolucionia Temas Para saber más Contacto

Back-Propagation: gradiente con diferencias finitas (II)

Fernando P.    15/01/2018

Temas:  Fundamentos

Segunda entrega sobre la aproximación del gradiente de la función de coste mediante diferencias finitas para el algoritmo Back-Propagation.

En la primera entrega plateamos la cuestión general sobre cómo era posible aproximar el gradiente de la función de coste en los casos en los que no fuera posible calcular de forma fácil las derivadas de las funciones de activación y se describió el método de la perturbación de los pesos de la red para llevarlo a cabo la aproximación del gradiente.

En esta entrega vamos a ver otro método de aproximación basado en diferencias finitas, que es más eficiente que el método de la perturbación de los pesos.

Neuronas de la red
Las redes neuronales artificiales que se entrenan usando el algoritmo Back-Propagation suelen ser lo que se denomina redes orientadas hacia adelante, el ejemplo más común de este tipo de redes son los perceptrones multicapa.

Una de estas redes está compuesta por muchas neuronas artificiales organizadas en varias capas. Cada una de estas neuronas recibe una serie de entradas de neuronas pertenecientes a la capa anterior, estas entradas se ponderan por los pesos en esas conexiones y se suman para formar lo que podemos llamar el valor de esa neurona para el caso de entrada presentado.

Los valores de las neuronas se introducen en la función de activación de la neurona y esa será la salida de esa neurona.

Pero el valor de la neurona tiene una propiedad muy interesante a la hora de calcular el gradiente de la función de coste de la red para poder usarlo con la Regla Delta Generalizada.

Consideremos una neurona  A  de la red
y sea  q  su valor al presentar a la red determinado caso de entrada

Sea  E()  la función de coste de la red para el caso de entrada considerado

Sea  w  un peso en una conexión que llega a la neurona  A
y sea  x  el valor que llega a la neurona por esa conexión

Nos interesa poder calcular  E / ∂w

Por la regla de la cadena, tenemos que  E / ∂w = ∂E / ∂q ⋅ ∂q / ∂w = ∂E / ∂qx

Es decir, tenemos que la derivada de la función de coste respecto a un peso de la red es igual a la derivada de la función de coste respecto al valor de la neurona, afectada por ese peso, multiplicado por el valor que llega a la neurona en la conexión afectada por el peso.

Los valores  x  que circulan por las conexiones entre neuronas, han de calcularse en la fase hacia adelante del algoritmo Back-Propagation (para cada caso de entrada), así que no son algo nuevo.
Back-Propagation: gradiente con perturbación de nodos
Si fuéramos capaces de calcular las derivadas de la función de coste de la red respecto a los valores de las neuronas, usando la expresión anterior, tendríamos una forma muy sencilla de poder obtener directamente el gradiente de la función de coste respecto a los pesos.

Nótese que estamnos considerando un único caso de entrada pero es fácilmente extrapolable a un coste que incluya múltiples casos por ser el coste aditivo y también el gradiente.

Estimación de las derivadas respecto al valor de neuronas
De la misma forma que en la entrega anterior usábamos el desarrollo de Taylor para obtener una estimación de las derivadas de la función de coste respecto a los pesos, podemos hacer lo propio con los valores de las neuronas en la red.

Sea  E()  la función de coste de la red

Queremos calcular  E / ∂q, donde  q  es el valor de una neurona la red

Podemos considerar que  E(q)  es una función real de variable real, derivable.
Entonces nuestro problema consiste en calcular  E'(q)

Sea  ε > 0, usando el desarrollo de Taylor para  E()  tenemos que:

E(q + ε) = E(q) + E'(q)⋅ε + E''(q)⋅ε2 + O(ε3)
E(q - ε) = E(q) - E'(q)⋅ε + E''(q)⋅ε2 + O(ε3)

Restando la segunda ecuación a la primera podemos despejar la aproximación a la derivada:

E'(q) = ( E(q + ε) - E(q - ε) ) / 2ε + O(ε2)

De esta forma podemos estimar todas las derivadas parciales de la función de coste respecto a los valores de las neuronas de la red. Multiplicando por el valor de las conexiones que llegan a esa neurona tendremos todas las derivadas parciales de la función de coste respecto a los pesos correspondientes a esas conexiones.

El error cometido es del orden de  O(ε2), lo que significa que para valores suficientemente pequeños de  ε  el error será mucho más pequeño (podemos sacarlo fácilmente fuera de la precisión del computador).

Back-Propagation usando perturbación de nodos
Esta forma descrita de proceder, usando una aproximación al gradiente respecto a los valores de las neuronas, se denomina perturbación de los nodos, porque consiste en recalcular toda la salida de la red para dos valores distintos de cada neurona, que son  q + ε  y  q - ε.

El problema de esta forma de proceder consiste en que el número de operaciones que debemos realizar para ejectuar el algoritmo es superior a la forma más sencilla (con expresiones explícitas), debido a que por cada perturbación hay que volver a evaluar la salida de la red para todo el conjunto de entrenamiento.

Pero la complejidad de este procedimiento es inferior al procedimiento de perturbación de pesos que vimos en la entrega anterior, porque una única perturbación del valor de una neurona (nodo) nos sirve para calcular las componentes del gradiente de la función de coste respecto a todos los pesos asociados a esa neurona.

La complejidad del algoritmo usando perturbación de nodos es del orden de  O(WH), donde  W  es el número total de pesos en la red y  H es el número de neuronas de la red. Si la red es relativamente grande,  W  será más grande que  H  y el método de la perturbación de nodos será más eficiente que el método de la perturbación de pesos.

Este nuevo método sigue siendo menos eficiente que el uso de expresiones exactas para la Regla Delta Generalizada, que tiene complejidad del orden de  O(W), pero es razonablemente eficiente.

La pérdida de precisión en la que incurrimos puede ser tan pequeña como queramos, en realidad estaremos limitados por la precisión del computador. No es la versión más eficiente del algoritmo Back-Propagation pero es relativamente sencilla de implementar y funcionará siempre que la red se comporte como una función derivable.

Si introducimos funciones de activación que hacen que la red no se comporte como una función derivable entonces tendremos que ver cómo evitar esas singularidades.

Otra ventaja del método de perturbación de nodos (igual que sucedía con el método de perturbación de pesos) consiste en que es independiente del número de capas que tenga la red. En redes con muchas capas, las expresiones exactas de la Regla Delta Generalizada se complican progresivamente y su implementación puede llegar a ser bastante compleja. Pero con el método de perturbación de nodos el cálculo del gradiente es independiente del número de capas de la red.



El algoritmo Back-Propagation usando perturbaciones sobre los nodos es una buena opción para calcular el gradiente de la función de coste respecto a los pesos de la red. Aumenta algo la complejidad del algoritmo, pero resulta bastante eficiente.



Para saber más:

Libro de Russell Reed y Robert J Marks dedicado a redes neuronales artificiales orientadas hacia adelante. El capítulo 5 introduce el algoritmo Back-Propagation y contiene una discusión sobre el método de la perturbación de nodos.



 

Inicio Powered by NetBSD
 
HTML5
 
En general, todo el contenido de este sitio web es original, salvo referencias o enlaces a otros sitios web y citas o reproducciones expresamente presentadas como tales.

No está permitida la reproducción ni la copia del contenido de este sitio web sin el permiso expreso de la propiedad del mismo.

Este sitio web no utiliza cookies ni ningún otro mecanismo para almacenar información en los navegadores de los visitantes ni para realizar seguimiento de los mismos.

2017,2018 Revolucionia.net
Sobre Revolucionia
Temas
Para saber más
Contacto