Aprendizaje Widrow-Hoff
ADALINE
ADALINE (ADAptive LInear NEuron)
- Finales de los 50' del siglo pasado
- Se busca que los parámetros de la red minimicen el error cuadrado promedio
- El algoritmo de optimización lo llamarón minimos cuadrados promedio
- Es una red para resolver porblemas de aprendizaje supervisado
- Se puede utiliar para clasificar (en ese sentido más potente que el perceptron)
- Cuando se utiliza para clasificar de igual forma que el perceptron solo sirve para clasificació linealmente separable
Una ADALINE de una capa
observemos que la activación es la identidad. Ahora si se tiene dos enradas y una neurona, podemos dibujar el hiperplano separador
Tendríamos un clasificador tipo popsitivo (contra perceptron tipo 1), tipos negativa (contra perceptron tipo 0), y una tercer clasificación tipo 0, esta última esta asociada al perceptron como tipo 1 (hardlims), entonces siguiendo esto, esta tercer clasificación la pordriamos asociar a tipo positivo en nuestra ADALINE y así sustituir una red perceptron por una ADALINE
Convergencia
Ejemplo: Solución analítica
R = (1/2) * p1 * p1' + (1/2) * p2 * p2'
h = (1/2) * t1 * p1 + (1/2) * t2 * p2
c = (1/2) * (-1)^2 + (1/2) * (1)^2
F(w1,w2,w3) = c -2*x'*h + x'*R*x % Error cuadrado promedio
F(w1, w2, w3) = 
(w2-1)^2 + (w1-w3)^2 % una infinidad optimizan w2 = 1, w1 = w3
ans = 
E = gradient(F)==0
E(w1, w2, w3) =

% Compute analytic solution of a symbolic equation
E
E(w1, w2, w3) =

solution = solve(E,[w1,w2,w3]);
Warning: Unable to solve symbolically. Returning a numeric solution using vpasolve.
% Display symbolic solution returned by solve
displaySymSolution(solution);
solution =
w1: [1×1 sym]
w2: [1×1 sym]
w3: [1×1 sym]
xopt = inv(R)*h % no tenemos solución unica
Warning: Matrix is singular to working precision.
tasa_estable_max = 1/max(eig(R))
tasa_estable_max = 0.5000
Ejemplo: Solución númerica
%adaline(W0,b0,alpha, p,t,ba)
%adaline(W0,b0,alpha, p,t,ba)
[W,b] = adaline_epoca(W0,[0],0.2,p,t)
0 -0.4000 0.1600
0 0.4000 0.9600
0 0.4000 -0.1600
b = 0
[W,b] = adaline_epoca(W(:,end)',[0],0.2,p,t)
0.1600 0.0160 -0.0384
0.9600 1.1040 1.0496
-0.1600 -0.0160 0.0384
b = 0
[W,b] = adaline_epoca(W(:,end)',[0],0.2,p,t)
-0.0384 0.0122 0.0028
1.0496 0.9990 0.9897
0.0384 -0.0122 -0.0028
b = 0
[W,b] = adaline_epoca(W(:,end)',[0],0.2,p,t)
0.0028 -0.0036 0.0009
0.9897 0.9961 1.0005
-0.0028 0.0036 -0.0009
b = 0
[W,b] = adaline_epoca(W(:,end)',[0],0.2,p,t)
0.0009 0.0004 -0.0003
1.0005 1.0010 1.0003
-0.0009 -0.0004 0.0003
b = 0
[W,b] = adaline_epoca(W(:,end)',[0],0.2,p,t)
-0.0003 0.0001 0.0000
1.0003 0.9999 0.9999
0.0003 -0.0001 -0.0000
b = 0
[W,b] = adaline_epoca(W(:,end)',[0],0.2,p,t) % una neurona con un solo peso
0.0000 -0.0000 0.0000
0.9999 1.0000 1.0000
-0.0000 0.0000 -0.0000
b = 0
Filtrado Adaptativo
Se define un nuevo bloque, que represetan el retraso de la señal de estrada
Un filtro adaptativo es
Es un sistemas LT! en tiempo discreto donde estamos ajustando los parametros del modelo de acuerdo a las entradas presentes para despues utlilizar este modelo para entradas con ruido.
Ejemplo: Filtro adaptable








independientes y media cero
v = @(k) 1.2 * sin(2 * pi * k / 3);
m = @(k) 0.12 * sin(2 * pi * k / 3 + pi / 2);
Evv1 = mean(v(1:3).*v(0:2))
R = [Evto2, Evv1; Evv1, Evto2]
0.7200 -0.3600
-0.3600 0.7200
Emv = mean(m(1:3).*v(1:3)) % esto es cero
Emv1 = mean(m(1:3).*v(0:2))
[ved, D] = eig(R)
-0.7071 -0.7071
-0.7071 0.7071
Esto2 = (1/0.4)*integral(@(s) s.^2,-0.2,0.2)
F(w1,w2) = vpa(c -2*x'*h + x'*R*x) % error cuadrático promedio
F(w1, w2) = 
plot(xopt(1),xopt(2),'or')
%adaline(W0,b0,alpha, p,t,ba)
p = [v(n);v(n-1)]
0 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 0.0000 1.0392 -1.0392 -0.0000 1.0392
-1.0392 0 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 -0.0000 1.0392 -1.0392 0.0000 1.0392 -1.0392 -0.0000
%rng(123) % controlamos aletorios
s = unifrnd(-0.2,0.2,1,muestras+1);
%adaline(W0,b0,alpha, p,t,ba)
[W,b] = adaline_epoca(W0,[0],alpha,p,t)
0 0 -0.0234 -0.3411 -0.3411 -0.3085 -0.4845 -0.4845 -0.4026 -0.4326 -0.4326 -0.3531 -0.3534 -0.3534 -0.3123 -0.3243 -0.3243 -0.2873 -0.2798 -0.2798 -0.2513 -0.2865 -0.2865 -0.2179 -0.2123 -0.2123 -0.2115 -0.2474 -0.2474 -0.1800 -0.1622 -0.1622 -0.1793 -0.1738 -0.1738 -0.1769 -0.1432 -0.1432 -0.1585 -0.1639 -0.1639 -0.1247 -0.1403 -0.1403 -0.1613 -0.1134 -0.1134 -0.0988 -0.1158 -0.1158
-2.0000 -1.5672 -1.5672 -1.2495 -1.0446 -1.0446 -0.8685 -0.7179 -0.7179 -0.6879 -0.5583 -0.5583 -0.5580 -0.4699 -0.4699 -0.4579 -0.3908 -0.3908 -0.3984 -0.3470 -0.3470 -0.3118 -0.3096 -0.3096 -0.3152 -0.2791 -0.2791 -0.2432 -0.2471 -0.2471 -0.2650 -0.2406 -0.2406 -0.2460 -0.2022 -0.2022 -0.2359 -0.2035 -0.2035 -0.1981 -0.1778 -0.1778 -0.1622 -0.1636 -0.1636 -0.2114 -0.1757 -0.1757 -0.1587 -0.1417
b = 0
salidas = diag(W(:,1:end-1)'*[v(n);v(n-1)]);
mean((s(floor(muestras/2):end)-restaurada(floor(muestras/2):end)).^2)
Problema P10.1
a(k) =[2 -1 3]*[y(k);y(k-1);y(k-2)]
a(k) = 
a(-1)
ans = 
i) La salida es cero antes de 
ii) solución
iii) Contribuye de 0 a 2
Problema P10.2
plot(P(1,1:2),P(2,1:2), 'ok','MarkerSize',15, 'LineWidth',5)
plot(P(1,3),P(2,3),'ob','MarkerSize',15, 'LineWidth',5)
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
i) El problema es linealmente separable, por lo cual se puede ADALINE se puede implementar
ii) Encontramos la ecuación de la recta que pase por
(hay infinidad de soluciones). p12(p11) =((0-3)/(3-0))*(p11 - 0) + 3
p12(p11) = 
Asi
, solo para recordar, el vector de pesos puede ser cualqueir multiplo del indicaddo si se elige el de dirección contrario la clasificación cambiara porsitivos por negativos y viceversa. iii) el problema no es linealmente seprable
iv)el probema no es linealmente separable
plot(P(1,1:2),P(2,1:2), 'ok','MarkerSize',15, 'LineWidth',5)
plot(P(1,3),P(2,3),'ob','MarkerSize',15, 'LineWidth',5)
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
Problema P10.3
c = (1/2)*t1^2 + (1/2)*t2^2
h = (1/2)*t1*p1 + (1/2)*t2*p2
R = (1/2)*p1*p1' + (1/2)*p2*p2'
F(w11,w12)= c - 2 * x' * h + x' * R * x
F(w11, w12) = 
Problema P10.4
plot(p1(1,1),p1(2,1), 'ok','MarkerSize',15, 'LineWidth',5)
plot(p2(1,1),p2(2,1),'ob','MarkerSize',15, 'LineWidth',5)
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
%adaline(W0,b0,alpha, p,t,ba)
[W,b] = adaline_epoca(W0,[0],alpha,p,t)
0 0.5000 0
0 0.5000 1.0000
b = 0
fimplicit(@(p1,p2) W(1,2)*p1 + W(2,2)*p2)
quiver(0,0,W(1,2),W(2,2),0, 'MaxHeadSize',0.5)
fimplicit(@(p1,p2) W(1,3)*p1 + W(2,3)*p2)
quiver(0,0,W(1,3),W(2,3),0, 'MaxHeadSize',0.5)
Problema P10.5
Problema P10.6
% c = E(t^2) = E(y^2) = C(0)
F(w11,w12)= c - 2 * x' * h + x' * R * x
F(w11, w12) = 
[V,D] = eig(2*R)
-0.7071 -0.7071
-0.7071 0.7071
quiver(-0.5,-0.5,V(1,1),V(1,2),0, 'MaxHeadSize',0.5)
quiver(-0.5,-0.5,V(2,1),V(2,2),0, 'MaxHeadSize',0.5)
ii) la máxima tasa
iii) Obtener los coefficientes del proceso con los datos del problema enlace Mdl = arima('Constant',0,'AR',{-0.5 -0.5},'Variance',2);
sim = simulate(Mdl,100000);
%adaline(W0,b0,alpha, p,t,ba)
[W,b] = adaline_epoca(W0,[0],alpha,p,t);
Problema P10.8
plot(C1(1,:),C1(2,:), 'bo', 'MarkerSize',20)
plot(C2(1,:),C2(2,:), 'gs','MarkerSize',20)
plot(C3(1,:),C3(2,:), 'ro', 'MarkerSize',30, 'LineWidth',5)
plot(C4(1,:),C4(2,:), 'ks','MarkerSize',30,'LineWidth',5)
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
legend("C1","C2","C3","C4")
legend('Location','eastoutside')
% como el problema citado, cambiamos 0 por -1 para lso tipo negativos
p = [p1 p2 p3 p4 p5 p6 p7 p8];
t = [t1 t2 t3 t4 t5 t6 t7 t8];
alpha = 0.001; % Hagan propone 0.04, no me converge con eso
%adaline(W0,b0,alpha, p,t,ba)
[W,b] = adaline_epoca(W0,b0,alpha,p,t,1);
W(:,end-1:end)'
0.9371 -0.0116
0.0002 0.9446
[W,b] = adaline_epoca(W0,b0,alpha,p,t,1);
Wf = W(:,end-1:end)'
-0.5937 -0.0510
0.1680 -0.6659
fimplicit(@(p1,p2) Wf(1,1)*p1 + Wf(1,2)*p2 + bf(1),[-3,3],'r')
fimplicit(@(p1,p2) Wf(2,1)*p1 + Wf(2,2)*p2 + bf(2),[-3,3],'k')
quiver(0,0.2,Wf(1,1),Wf(1,2),0, 'MaxHeadSize',0.5,"Color",'r','DisplayName',"_1w")
quiver(0,0.2,Wf(2,1),Wf(2,2),0, 'MaxHeadSize',0.5,"Color",'k','DisplayName',"_2w")
PIENSA EN EL PLATAMEAMIENTO ANÁLITICO DE ESTE PROBLEMA
Problema P10.9


p1 = [1 -1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1]';
p2 = [-1 -1 -1 -1 1 -1 -1 -1 1 1 1 1 1 -1 -1 -1]';
p3 = [1 1 1 1 1 -1 1 1 1 -1 1 1 -1 -1 -1 -1]';
p4 = [-1 -1 -1 -1 1 1 1 1 1 -1 1 1 1 -1 1 1]';
p5 = [1 1 1 1 1 1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1]';
p6 = [-1 -1 -1 -1 1 1 1 1 1 1 -1 -1 1 -1 -1 -1]';
[W,b] = adaline_epoca(W0,b0,alpha,p,t,1);
W
0 3.6000 0.2160 -1.0670 0.9512 -4.0244 2.3037
0 -3.6000 -6.9840 -8.2670 -6.2488 -11.2244 -4.8963
0 -3.6000 -6.9840 -8.2670 -6.2488 -11.2244 -4.8963
0 -3.6000 -6.9840 -8.2670 -6.2488 -11.2244 -4.8963
0 3.6000 6.9840 5.7010 3.6827 -1.2928 -7.6209
0 3.6000 0.2160 1.4990 -0.5192 -5.4947 -11.8228
0 3.6000 0.2160 -1.0670 -3.0853 1.8903 -4.4378
0 3.6000 0.2160 -1.0670 -3.0853 1.8903 -4.4378
0 3.6000 6.9840 5.7010 3.6827 -1.2928 -7.6209
0 -3.6000 -0.2160 1.0670 3.0853 8.0608 1.7327
b
0 3.6000 6.9840 5.7010 3.6827 -1.2928 -7.6209
a=W(:,end)'*p(:,i)+b(end);
sum((t-(W(:,end)'*p+b(end))).^2)
[W,b] = adaline_epoca(W0,b0,alpha,p,t,1);
e(i) = sum((t-(W0*p+b0)).^2);
Wf = W(:,end)'
23.1250 -25.0000 -25.0000 -25.0000 -5.6250 -21.2500 -7.5000 -7.5000 -5.6250 -13.7500 11.8750 11.8750 -23.1250 5.6250 -3.7500 -3.7500
App
Adaptative Noise Cancellation
EEG Noise Cancellation
Linear Classification
Referencias
El material se toma del libro de Martin Hagan et. al. enlace
function [W,b] = adaline_epoca(W0,b0,alpha, p,t,ba)
% ba = 1 activa la actualizción del bias
Wn = W0 + 2 *alpha * e * p(:,i)';