Variantes de Backpropagation

Contenido

Problema 12.1

P12_1.png
Primero sin Batching
syms p w b n n1
p1 = -3;
t1 = 0.5;
p2 = 2;
t2 = 1;
w0 = 0.4;
b0 = 0.15;
n1(w,p,b) = w*p + b;
a(n) = logsig(n);
n1_n = n1(p1,w0,b0);
e1 = eval(t1 - a(n1_n))
e1 = 0.2408
s1 = eval(-2*subs(diff(logsig(n)),n,n1_n)* e1)
s1 = -0.0925
La dirección (ver formula de back)
d1 = [-s1*p1;-s1] % pesos y bias
d1 = 2×1
-0.2774 0.0925
Para la segunda entrada
n2_n = n1(p2,w0,b0);
e2 = eval(t2 - a(n2_n))
e2 = 0.2789
s2 = eval(-2*subs(diff(logsig(n)),n,n2_n)* e2)
s2 = -0.1122
La dirección (ver formula de back)
d2 = [-s2*p2;-s2]
d2 = 2×1
0.2243 0.1122
Con Batching
d = (1/2)*d1 + (1/2)*d2
d = 2×1
-0.0265 0.1023
Hay dependeciadel problema respecto a preferir incremental o batching. Incremental requiere menos almacenamiento, y si las entradas se elegen de forma aleatoria es menos probable quedar atrapado en un mínimo local. Pero toma más tiempo converger respecto al modo Batching
P12_1_2.png

Problema 12.2

P12_2.png
Solución: revisar después del reporte de Momentum II
El algoritmo estándar de gradiente descendiente
Si se cálculo con momentum
La forma cuadrática general
Con gradiente
Sustituyendo el gradiente en la actualización de momentum
Sustitutendo la definición de incremento
Se difine el vector
Entonces el momentum se puede escribir como
Este es un sistema dinamico lineal discreto, que será estable si los valores pripiios de la matriz del sistema (W) tienen magnitud menor a la unidad.
La matriz del sistema se puede esribir como
Los valores y vectorios porpios satisfacen que
Por componentes, esto es:
Pensando que es un vector porpio de la matriz T
Sustituyendo la primer ecuación en la segunda
resolviendo la cuadratica (pues el vector propio no puede ser cero)
Obteniendo la magnitud de este número (pensado en que en complejo y qie el valor propio de T es reas, pues es el valor propio de una matriz simetrica, basta ver la definición de T para esto)
como el parámetro γ esta entre cero y uno, entonces todos los valores propios tendrán magnitud menor a uno, y así el sistema será estable, siempre y cuando los valores priopios sean complejos. Entonces se vera que existe γ de tal forma que siempre los valores propios son complejos. Para ello es necesario que
Entonces se tienen que caraterizar a , que es un valor propio de T. Sean los valores propios de A y sus vectores propios. Se probara que estos vectores porpios de A también son vectores propios de T
Así los valores propios asociados son
Entonces el rango de γ queda como
TAREA MORAL: Demostar que la última desigualdad se cumple para valores de γ cecanos a uno independiente del valore deα.y de
Al aplicar la variante de momentum a la función con una tasa de convergencia inestable para gradiente descendiente, pero con

Problema 12.3

P12_3.png
Solución:
x0 = [0.5 0.5]';
alpha = 0.05;
gamma = 0.2;
eta = 1.5;
rho = 0.5;
zeta = 0.05; % 5%
syms x1 x2
F(x1,x2) = x1^2 + 25*x2^2;
GF = gradient(F)
GF(x1, x2) = 
g0 = GF(x0(1),x0(2))
g0 = 
deltax0 = gamma * [0 0]' - (1-gamma)*alpha*g0;
x1 = x0 + deltax0
x1 = 
eval(F(x0(1),x0(2)))
ans = 6.5000
eval(F(x1(1),x1(2)))
ans = 6.4616
El cambio se acepta porque la evaluación en la función es menor que la inicial
alpha = eta * alpha; % actualización de alpha
g1 = GF(x1(1),x1(2))
g1 = 
deltax1 = gamma * deltax0 - (1-gamma)*alpha*g1;
x2 = x1 + deltax1
x2 = 
eval(F(x2(1),x2(2)))
ans = 16.1575
eval((F(x2(1),x2(2))-F(x1(1),x1(2)))/F(x1(1),x1(2)))
ans = 1.5005
Aumento de más del 150% en la magnitud de la evaluación respecto al punto anterior, lo que es mayor al límite establecido (zeta) entonces se rechaza el cambio
x2 = x1; % se descarta el nuevo punto
alpha = rho * alpha;
gamma = 0;
g2 = GF(x2(1),x2(2))
g2 = 
deltax2 = gamma * deltax1 - (1-gamma)*alpha*g2; % -alpha*g2
x3 = x2 + deltax2
x3 = 
eval(F(x2(1),x2(2)))
ans = 6.4616
eval(F(x3(1),x3(2)))
ans = 4.9662
Por lo que el cambio se acepta
gamma = 0.2
gamma = 0.2000
alpha = eta * alpha
alpha = 0.0563

Problema 12.4

P12_4.png
Solución
syms x1 x2
A = [2 1;1 2];
F(x1,x2) = (1/2)* [x1 x2] * A * [x1; x2]
F(x1, x2) = 
x0 = [0.8 -0.25]';
GF = gradient(F)
GF(x1, x2) = 
g0 = GF(x0(1),x0(2));
p0 = -g0
p0 = 
Se minimiza F a lo largo del vector
syms alpha0
x11(alpha0) = x0(1) + alpha0*p0(1)
x11(alpha0) = 
x12(alpha0) = x0(2) + alpha0*p0(2)
x12(alpha0) = 
a1 = 0;
Fa1 = F(x11(a1),x12(a1));
eval(Fa1)
ans = 0.5025
epsilon = 0.075;
b1 = epsilon;
Fb1 = F(x11(b1),x12(b1));
eval(Fb1)
ans = 0.3721
b2 = 2 * epsilon
b2 = 0.1500
Fb2 = F(x11(b2),x12(b2));
eval(Fb2)
ans = 0.2678
b3 = 4 * epsilon;
Fb3 = F(x11(b3),x12(b3));
eval(Fb3)
ans = 0.1373
b4 = 8 * epsilon
b4 = 0.6000
Fb4 = F(x11(b4),x12(b4));
eval(Fb4)
ans = 0.1893
La elección es en el intervalo [0.15, 0.60] del parámetro.
Ahora se reduce el intervalo con el algoritmo de busqueda aurea.
a1 = 0.15;
b1 = 0.6;
tau = 0.618;
c1 = a1 + (1 - tau) * (b1 - a1)
c1 = 0.3219
d1 = b1 - (1 - tau) * (b1 - a1)
d1 = 0.4281
eval(F(x11(c1), x12(c1)))
ans = 0.1270
eval(F(x11(d1), x12(d1)))
ans = 0.1085
Algoritmo
a2 = c1;
b2 = b1;
c2 = d1;
d2 = b2 -(1 - tau)*(b2 - a2)
d2 = 0.4938
eval(F(x11(c2), x12(c2)))
ans = 0.1085
eval(F(x11(d2), x12(d2)))
ans = 0.1232
Algoritmo
a3 = a2;
b3 = d2;
d3 = c2;
c3 = a3 + (1 - tau)*(b3 - a3)
c3 = 0.3876
Esto sigue hasta que
P12_4_2.png

Problema 12.5

P12_5_1.png
P12_5_2.png
Solución
p1 = 1;
t1 = 1;
p2 = 2;
t2 = 2;
W1 = 1;
b1 = 0;
W2 = 2;
b2 = 1;
f1 = @(n) n.^2;
f2 = @(n) n;
% el primer indice hace referencia al nuemro de entrada
a10 = p1;
n11 = W1 * a10 + b1
n11 = 1
a11 = f1(n11)
a11 = 1
n12 = W2 * a11 + b2
n12 = 3
a12 = f2(n12)
a12 = 3
e1 = (t1-a12)
e1 = -2
a20 = p2;
n21 = W1 * a20 + b1
n21 = 2
a21 = f1(n21)
a21 = 4
n22 = W2 * a21 + b2
n22 = 9
a22 = f2(n22)
a22 = 9
e2 = (t2-a22)
e2 = -7
Las sensibiidades de Marquardt
syms n
F1(n) = n^2;
F2(n) = n;
dF1 = diff(F1)
dF1(n) = 
dF2 = diff(F2)
dF2(n) = 
1
% el primer indice hace referencia al nuemro de entrada
s12 = -dF2(n12)
s12 = 
s11 = dF1(n11)*W2'*s12
s11 = 
s22 = -dF2(n22)
s22 = 
s21 = dF1(n21)*W2'*s22
s21 = 
S1 = [s11 s21]
S1 = 
S2 = [s12 s22]
S2 = 
La matriz Jacobina del problema
% el último subindice hace referencia a la capa
syms w111 b11 w112 b12
n111(w111,b11) = w111 * a10 + b11;
dn111w111 = diff(n111,w111);
J11 = s11 * dn111w111(W1,b1)
J11 = 
dn111b11 = diff(n111,b11);
J12 = s11 * dn111b11(W1,b1)
J12 = 
n112(w112,b12) = w112 * a11 + b12;
dn112w112 = diff(n112,w112);
J13= s22 * dn112w112(W2,b2)
J13 = 
dn112b12 = diff(n112,b12);
J14 = s22 * dn112b12(W2,b2)
J14 = 
n121(w111,b11) = w111 * a20 + b11;
dn121w111 = diff(n121,w111);
J21 = s21 * dn121w111(W1,b1)
J21 = 
dn121b11 = diff(n121,b11);
J22 = s21 * dn121b11(W1,b1)
J22 = 
n122(w112,b12) = w112 * a21 + b12;
dn122w112 = diff(n122,w112);
J23= s12 * dn122w112(W2,b2)
J23 = 
dn122b12 = diff(n122,b12);
J24= s12 * dn122b12(W2,b2)
J24 = 
J = [J11 J12 J13 J14;J21 J22 J23 J24]
J = 

App

Steepenst Descent Backpropagation
nnd12sd1
nnd12sd2
Momentum Backpropagation
nnd12mo
Variable Learning Rate Backpropagation
nnd12vl
Conjugate Gradinet Line Search
nnd12ls
Conjugate Gradient Backprop
nnd12cg
Marquardt Step
nnd12ms
Marquardt Backpropagation
nnd12m

Referencias

El material se toma del libro de Martin Hagan et. al. enlace