2.3 BACKPROPAGATION
2.3.3.4 Algoritmo de Levenberg - Marquardt:[] Este algoritmo es una modificación del método de Newton, el que fue diseñado para minimizar funciones que sean la suma de los cuadrados de otras funciones no lineales; es por ello que el algoritmo de Levenberg - Marquardt, tiene un excelente desempeño en el entrenamiento de redes neuronales donde el rendimiento de la red esté determinado por el error medio cuadrático.
El método de Newton para optimizar el rendimiento e(x) es:
(2.3.48)
(2.3.49)
Si asumimos que e(x) es una suma de funciones cuadráticas:
(2.3.50)
El gradiente puede ser escrito entonces en forma matricial:
(2.3.51)
Donde J(x) es la matriz Jacobiana.
Ajustando el método de Newton, obtenemos el algoritmo de Levenberg Marquardt
(2.3.52)
o
(2.3.53)
La nueva constante
determina
la tendencia el algoritmo, cuando
se incrementa, este algoritmo se aproxima
al algoritmo de pasos descendientes para ratas de aprendizaje muy pequeñas;
cuando
se decrementa este
algoritmo se convierte en el método de Gauss - Newton
El algoritmo comienza con un valor
pequeño para
,
por lo general 0.01, si en ese paso no se
alcanza el valor para e(x)
entonces el paso es repetido con
multiplicado
por un factor
. Si se ha escogido
un valor pequeño de paso en la dirección de paso descendiente,
e(x) debería
decrecer. Si un paso produce un pequeño valor para
e(x), entonces
el algoritmo tiende al método de Gauss - Newton, el que se supone
garantiza una rápida convergencia. Este algoritmo genera un compromiso
entre la velocidad del método de Gauss-Newton y la garantía de
convergencia del método de paso descendiente.
Los elementos de la matriz Jacobiana necesarios en el algoritmo de Levenberg-Marquardt son de este estilo:
(2.3.54)
Donde x es el vector de parámetros de la red, que tiene la siguiente forma:
(2.3.55)
Para utilizar este algoritmo en las aplicaciones para redes multicapa, se redefinirá el término sensitividad de forma que sea más simple hallarlo en cada iteración.
(2.3.56)
Donde h=(q-1)SM + k
Con la sensitividad definida de esta manera, los términos de la matriz Jacobiana pueden ser calculados más fácilmente:
(2.3.57)
y para las ganancias:
(2.3.58)
De esta forma, cuando la entrada pQ ha sido aplicada a la red y su correspondiente salida aMQ ha sido computada, el algoritmo Backpropagation de Levenberg-Marquardt es inicializado con:
(2.3.59)
Cada columna de la matriz SMQ debe ser propagada inversamente a través de la red para producir una fila de la matriz Jacobiana. Las columnas pueden también ser propagadas conjuntamente de la siguiente manera:
(2.3.60)
La matrices sensitividad total para cada capa en el algoritmo de Levenberg-Marquardt son formadas por la extensión de las matrices computadas para cada entrada:
(2.3.61)
Para cada nueva entrada que es presentada a la red, los vectores de sensitividad son propagados hacia atrás, esto se debe a que se ha calculado cada error en forma individual, en lugar de derivar la suma al cuadrado de los errores. Para cada entrada aplicada a la red habrá SM errores, uno por cada elemento de salida de la red y por cada error se generara una fila de la matriz Jacobiana.
Este algoritmo puede resumirse de la siguiente manera:
(2.3.62)
se calcula después, la suma de los errores cuadrados para cada entrada e(x)
El algoritmo debe alcanzar convergencia cuando la norma del gradiente de
(2.3.63)
sea menor que algún valor predeterminado, o cuando la suma de los errores cuadrados ha sido reducida a un error que se haya trazado como meta.
El comportamiento de este algoritmo
se visualiza en la figura 2.3.12, la cual muestra la trayectoria de convergencia
con
y ![]()

Figura 2.3.12 Trayectoria del algoritmo Levenberg-Marquardt
Como puede verse, este algoritmo converge en menos iteraciones que cualquier método discutido anteriormente, por supuesto requiere mucha más computación por iteración, debido a que implica el cálculo de matrices inversas. A pesar de su gran esfuerzo computacional sigue siendo el algoritmo de entrenamiento más rápido para redes neuronales cuando se trabaja con un moderado número de parámetros en la red, si el número de parámetros es muy grande utilizarlo resulta poco práctico.