sc(x) = 1/ (1 + e cx)
o su variante bipolar
Scb(x) = 2sc(x) - 1
la funcin de error ser, obviamente, continua y derivable a su vez, lo que permitir emplear tcnicas de
optimizacin clsicas para determinar la combinacin de pesos que resuelve un problema de aprendizaje dado.
Las funciones sc, Scb y otras similares se denominan sigmoides, porque su representacin grfica recuerda a la
forma de la letra s.
Una vez que se ha decidido reemplazar el signo por la sigmoide, se define una funcin de error que
tambin sea continua y derivable. La funcin de error ms empleada en la prctica es
f : real ;
f: vector
; delta : vector
virtual real funcin (mensaje :vector)
virtual vector gradiente-funcion(mensaje :vector)
mensaje_adelante (mensaje: vector)
f = funcion (mensaje) ; f' = gradiente_funcion (mensaje)
enva f al arco de salida
fin mensaje_adelante
mensaje_detrs (mensaje: real)
delta = f *mensaje
enva cada delta[i] a su arco de entrada i
fin mensaje_detrs
fin nodo
donde los mtodos funcin y gradiente-funcion contienen el cdigo para evaluar la salida de un nodo ante una
entrada y la evaluacin de la derivada de esa misma funcin ante la entrada. Por ejemplo, si la funcin de
agregracin es la suma y la funcin de activacin es la sigmoide si, la funcin ser
donde s'c es la derivada de sc. Si la funcin de agregacin no fuese la suma, las componentes de s'c podran ser
distintas entre s, aunque esto no es habitual.
En el recorrido "hacia detrs" se deposita un valor en los nodos de salida y se recorren los arcos en el orden
contrario al definido para el recorrido "hacia adelante". Los arcos se comportan igual (multiplican el valor que
se transmite por el peso que tienen asociado) y en los nodos se multiplica el valor almacenado de f' por el
mensaje y se retransmite el resultado a todas sus entradas (ver el cdigo del mtodo mensaje_detrs).
En el recorrido hacia detrs es posible que dos o ms arcos se unan (por ejemplo, cuando la salida de una
neurona se conecta a la entrada de varias neuronas). El valor que se propaga al origen comn de varios arcos es
la suma de los valores propagados por cada uno de los arcos.
Con esta construccin, para cada valor que se deposite en los nodos de entrada se recoge otro en los
nodos de salida. Llamemos F a la funcin que relaciona la salida con la entrada, oi = F(xi). Demostraremos que
1. Fase "Hacia Adelante": Se alimenta una entrada Xi a la red. Se transmiten todos los valores y las salidas
de cada nodo y sus derivadas se almacenan en las variables de estado de los nodos.
2. Fase "Hacia Detrs": Se alimenta el valor 1" a cada nodo de salida y se recorre el grafo hacia atrs. Los
valores que llegan a los nodos de entrada son las derivadas parciales F/xi con respecto a cada entrada.
Una vez recorrida la red en los dos sentidos (fig. 1 y 2) calcular F/w para cada peso w es inmediato:
- Si un arco con peso w une una neurona con salida s con la entrada de otra neurona, la entrada que
llega a la segunda neurona es ws y por tanto la componente de la variable delta asociada al nodo en
el que incide el arco de peso w contiene la derivada parcial de F con respecto al producto ws:
= F/ws
Para calcular F/w aplicamos que s(F/ws) = F/w , es decir, multiplicamos la componente
adecuada de la variable delta del nodo en que el arco incide por la salida de la neurona en la que se
origina el arco en el recorrido hacia adelante.
Figura 2.9.
F(x)/xi = ( (s) / xi) [w1 (F1(x)/xi) + ... + wm (Fm(x)/xi) ] con s = w1F1(x) + w2F2(x) + ...+ wmFm(x.)).
El subgrafo que incluye todos los caminos posibles entre la unidad de entrada y la unidad cuya salida es
F1(x) es una subred que calcula la funcin F1 y que tiene n o menos nodos, y lo propio puede decirse de las
subredes que calculan F2 a Fm. Por la hiptesis de induccin, podemos calcular las derivadas parciales de F1 con
respecto a xi introduciendo un 1 en la salida y recorriendo el grafo hacia detrs. Debido a que todos los pasos del
recorrido hacia detrs son lineales (multiplicar por constantes y sumar) si se introduce una constante ki en cada
salida se obtiene en la entrada el valor p kp (Fp(x)/xi) y por tanto si se introducen wp ( (s)/xi) se
obtiene en la entrada el valor
p wp ( (s)/xi) (Fp(x)/xi) = ( (s)/xi) p wp (Fp(x)/xi)
que es la derivada parcial que queramos obtener.
estas derivadas parciales del uso que se les da ms tarde para corregir los pesos de la red mediante un algoritmo
del tipo de descenso de gradiente, con lo que existe cierta confusin en la nomenclatura, y se hace referencia a la
retropropagacin tanto para calcular las derivadas como para optimizar los pesos de una red. Se debe entender
que el algoritmo de retropropagacin se puede integrar con otros mtodos de optimizacin ms eficaces basados
tambin en el conocimiento del gradiente.
finales del algoritmo y con constantes reducidas las oscilaciones tardan ms en aparecer, pero el nmero de
evaluaciones de la funcin crece y el proceso se ralentiza. Este comportamiento es tpico de los mtodos de paso
fijo y no se debe a las propiedades de las redes neuronales.
El algoritmo original de la retropropagacin on-line es como sigue:
* Algoritmo original
inicio
elegir aleatoriamente w; elegir
repetir
seleccionar i
para j de 1 a np
wj wj + [(Tw(xi) yi)2 /wj ]
fin para
hasta limite de iteraciones
fin
var
w: tabla [1 ... np] de reales
fvar
inicio
elegir aleatoriamente w ; elegir
repetir
seleccionar i
para j de 1 a np
wj 0
fin para
para i de 1 a np
para j de 1 a n
wj wj + [(Tw(xi) yi)2 /wj ]
fin para
fin para
para j de 1 a np
wj wj + wj
fin para
epoca = epoca+1
hasta limite de iteraciones
fin
var
Regla Delta-Bar-Delta
Una de las aceleraciones ms empleadas es la regla conocida como "delta-bar-delta", que se basa en la
existencia de una constante de aprendizaje distinta para cada peso de la red. Se aplica la siguiente regla a cada
peso: si la direccin en la que el error decrece es la misma que la que en la que ha decrecido recientemente,
aumenta el tamao del paso. Si la direccin es opuesta, decrementa el tamao del paso. La direccin en la que el
error decrece se determina mediante el signo de la derivada del error con respecto al peso en la poca actual: si
es positivo, el error crece al aumentar el peso. Si es negativo, el error decrece al aumentar el peso.
Este mtodo utiliza la direccin en la que el error haya decrecido 'recientemente". Para definir
"recientemente" se recurre a un alisado exponencial. Si de es la derivada del error con respecto al peso y f es el
promedio de la derivada actual y de las pasadas, podemos definir fe+1 = fe + (1 - ) de
con entre O y 1.
Cuanto mayor es el valor de ms pesan las derivadas pasadas en la media. El signo de d nos da una indicacin
de la tendencia de cambio actual del peso, y el signo de f nos da una indicacin de las tendencias pasadas. Si
ambos tienen igual signo podemos aumentar el tamao del paso. Si tienen distinto signo, la direccin ha
cambiado y debemos reducir el paso.El criterio es entonces:
e = e-1 +
si de fe > 0
e = e-1
si de fe < 0
elegir
j 0
fin para
repetir
para j de 1 a np
dj 0
fin para
para i de 1 a N
para j de 1 a np
dj dj + [(Tw(xi) yi)2 /wj ]
fin para
fin para
para j de 1 a np
wj wj - j dj
si dj fj > 0 entonces
j j +
sino
j j
fin si
fj fj + (1 - ) dj
fin para
epoca epoca+1
hasta limite de iteraciones
fin
Quickpropagation
Una alternativa al empleo del mtodo delta-bar-delta consiste en emplear una iteracin del mtodo de la
se hace
secante en vez de un paso simple. Es decir en lugar de hacer
w = - (E /w)
2
2 -1
w = - ( E /w ) (E /w) que es una iteracin del mtodo de Newton, es decir, se supone que la funcin
de error es cuadrtica, y para no tener que calcular las derivadas segundas, lo cual sera muy costoso, se hace
Algoritmo Levenberg-Marquardt.
Como los mtodos del cuasi-newton, el algoritmo de Levenberg-Marquardt fue diseado para acercarse a la
velocidad del entrenamiento del segundo-orden sin tener que calcular la matriz Hessiana. Cuando la funcin de
error tiene la forma de una suma de cuadrados (como es tpico entrenando redes feedforward ), entonces la
matriz Hessiana puede aproximarse como H = Jt J, y la pendiente puede computarse como; g = Jt e
donde J es la matriz Jacobiana que contiene las derivadas (primeras) de los errores de la red con respecto a los
pesos y tendencias, y e es un vector de errores de la red. La matriz Jacobiana puede calcularse a travs de una
tcnica de backpropagation estandar (vea [HaMe94]) que es mucho menos complejo que calcular la Hessiana.
El algoritmo de Levenberg-Marquardt usa esta aproximacin a la matriz Hessiana en la siguiente adaptacin
tipo Newton:
Xk+1 = Xk - [ Jt J + I ] 1 Jt e
Cuando el escalar es cero, es el mtodo de Newton, usando la matriz Hessiana aproximada. Cuando es
grande, tenemos el gradiente descendente de pendiente con un tamao del paso pequeo. El mtodo de Newton
es ms rpido y ms exacto cerca de un mnimo del error, as que el objetivo es cambiar tan rpidamente como
posible hacia el mtodo de Newton (cambiando ). As, disminuye despus de cada paso exitoso (hay
reduccin en la funcin de error) y aumenta cuando un paso tentativo aumentara el error. De esta manera, la
funcin de error se reducir siempre en cada iteracin del algoritmo.
accion entrena_red(
ejemplo: tabla[1 ... N] de pares (entrada,salida)
var
w:
tabla[1 ... np] de reales
ET :
funcion Rnp R
)
ET : funcion Rnp R
var
p: tabla[1. np] de reales
: real
fvar
inicio
elegir aleatoriamente w
repetir
elegir aleatoriamente p
buscar que minimice ET (w+_p)
w w + p
hasta limite de iteraciones
fin