Perceptron

Contenido

Inteligencia Artificial, Machine learning, Ciencia de datos

Alan Turing: "Computing Machinery and Intelligence" ¿Las maquinas pueden pensar?
"Inteligencia Artificial: Es la ciencia y la ingeniería para fabricar máquinas inteligentes, especialmente programas informáticos inteligentes. Está relacionado con la tarea similar de usar computadoras para comprender la inteligencia humana, pero la IA no tiene que limitarse a métodos que son biológicamente observables. "
– Jhon MAcCarthy (2004) WHAT IS ARTIFICIAL INTELLIGENCE?
"Machine Learning: Campo de estudio que da a las computadoras la habilidad para aprender sin ser explicitamente programadas"
– Arthur L. Samuel (1959)
"El aprednizaje denota cambios en el sistema, estos son adaptables en el sentido que permiten al sistema realizar la misma tarea o tareas una y otra vez más eficiente para la misma población"
– Herbert Alexander Simon (1984)
"Un programa de computadora se dice que aprende de la experiencia E con respecto a alguna clase de tareas T y una medida de desempeño P y mejora con la experiencia E"
– Tom M. Mitchell (1998)
SML.jpg
Tomado de (The Mathematics of Machine Learning)
Los-tres-núcleos-de-Data-Science.png
Tomado de Los tres nucleos de Data Science
metro.png
Tomado del twit
mail-2-10.jpg
Tomado de A taxonomy of machine learning and deep learning algorithms
MachineL.jpg
Tomado de Julia language in machine learning: Algorithms, applications, and open issues
Otra definición de ML es la siguiente:
El machine learning es un método de análisis de datos que automatiza la construcción de modelos analíticos. Es una rama de la inteligencia artificial basada en la idea de que los sistemas pueden aprender de datos, identificar patrones y tomar decisiones con mínima intervención humana (enlace)
Simplificando bastante esta definición, el ML es un conjunto de algoritmos diseñados para resolver problemas con el uso de datos. Estos problemas se pueden clasificar en tres grandes grupos:
Clasificación. Predecir respuestas discretas.
Regresión. Predecir respuestas continuas.
Agrupación. Agrupar los datos de acuerdo a sus características intrínsecas.
Reducción de dimensiones. Reducir el número de características de los datos bajo algún criterio.

Perceptron

Perceptron.png
RN_n7.png
RN_n8.png
RN_n9.png
Se puede elegir en un principio de forma directa (en , o en ) los valores de los pesos y la desviación.

Ejemplo 1

Entrena la una neurona cnon el algoritmo perceptron para clasificar los siguientes vectores con los tarjets correspondientes (clase 0, clase 1)
CAND.png
figure
p1b = [0;0];
p2b = [0;1];
p3b = [1;0];
p4b = [1;1];
P=[p1b p2b p3b p4b]
P = 2×4
0 0 1 1 0 1 0 1
plot(P(1,1:3),P(2,1:3), 'ob','MarkerSize',15, 'LineWidth',5)
hold on
plot(p4b(1),p4b(2),'ok','MarkerSize',15, 'LineWidth',5)
axis([-1 2.5 -0.5 2.5])
g = gca;
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
g.Box = 'off';
Una fomra es elegir el la frontera de decisión, por ejemplo la recta que pase por los puntos y (1.5,0). Obtenemos la ecuación de esta recta
syms p1 p2
m = (0 - 1.5) / (1.5 - 0);
p2(p1) = m * p1 + 1.5
p2(p1) = 
fplot(p2,[-0.5,2])
Observemos que la ecuación de la froantera de decisión es equivalente a:
Por lo tanto . En Hagan se sugiere lo sigueinte:
  1. Traza la frantera de decisión
  2. Encuentra ortogonal a la frontera (no nos salvamos de las cuentas, ¿Cómo resuelves este problema?)
  3. Evalua en un , de tal forma que se resuelve para b
wf = [2;2];
quiver(0,0,wf(1),wf(2),0, 'MaxHeadSize',0.5)
axis('square') % escala
grid on
¿Quién es la solución?
¿Por qué la solución no es única?
%rng('default')
w = rand(2,1)
w = 2×1
0.1419 0.4218
b = rand(1)
b = 0.9157
t1 = 0;
t2 = 0;
t3 = 0;
t4 = 1;
t = [t1 t2 t3 t4]
t = 1×4
0 0 0 1
W = w'
W = 1×2
0.1419 0.4218
a11 = hardlim(w'*p1b+b)
a11 = 1
e = t1 - a11
e = -1
W = W + e*p1b'
W = 1×2
0.1419 0.4218
b = b + e
b = -0.0843
fimplicit(@(p1,p2) W(1)*p1 + W(2)*p2 + b,[-2,2],'r')
Una interoretación del uso de esta red nueronal es que se puede utilizar como una compuerta and extendida (los valores puedes ser no cecesariemente 0 y 1 en la entrada)

Ejemplo 2

El sigueinte priblema de clasificación no puede ser resulto con una neurona perceptron
XOr.png
figure
p1b = [0;0];
p2b = [0;1];
p3b = [1;0];
p4b = [1;1];
P=[p1b p2b p3b p4b]
P = 2×4
0 0 1 1 0 1 0 1
plot(P(1,1:3:4),P(2,1:3:4), 'ob','MarkerSize',15, 'LineWidth',5)
hold on
plot(P(1,2:3),P(2,2:3),'ok','MarkerSize',15, 'LineWidth',5)
axis([-1 2.5 -0.5 2.5])
g = gca;
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
g.Box = 'off';
Una neurona perceptron no se puee comportar como una compuerta XOR. Otros ejemplos
Inseparables.png

Problemas resueltos

Problema P4.1

P_41.png
Solución
Paso 1: Treazamos iperplano separador
Paso 2: Encontrar a w
syms w1 w2
p0 = [1/2;1];
p = [0;0];
w = [w1;w2];
Efd = w'*(p-p0)
Efd = 
Efd == 0
ans = 
w = [-2;1]
w = 2×1
-2 1
Paso 3:
syms b
w' * p +b ==0
ans = 
Por lo tanto el hiperplano separador es:

Problema P4.2p4_2.png

Solución:
figure
p1b = [0;2];
p2b = [1;0];
p3b = [0;-2];
p4b = [2;0];
P=[p1b p2b p3b p4b]
P = 2×4
0 1 0 2 2 0 -2 0
plot(P(1,1:2),P(2,1:2), 'ob','MarkerSize',15, 'LineWidth',5)
hold on
plot(P(1,3:4),P(2,3:4),'ok','MarkerSize',15, 'LineWidth',5)
axis([-0.5 2.5 -2.5 2])
g = gca;
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
g.Box = 'off';
syms w1 w2 b
w = [w1;w2];
w' * p1b + b >= 0
ans = 
w' * p2b + b >= 0
ans = 
w' * p3b + b < 0
ans = 
w' * p4b + b < 0
ans = 
Resolvemos con desmos de forma geometrica
Solución orimer sistema desigualdad 2 y 4 enlace
Solución segundo sistema desigualdades 1 y 3 enlace
Sin título.png
Se elige y
REGION3D.png

Problema P4.3

p4_3.png
Solución
C1 = [1 1;1 2];
C2 = [2 2;-1 0];
C3 = [-1 -2;2 1];
C4 = [-1 -2;-1 -2];
figure
plot(C1(1,:),C1(2,:), 'bo', 'MarkerSize',20)
hold on
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)
axis([-3 3 -3 3])
g = gca;
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
g.Box = 'off';
legend("C1","C2","C3","C4")
legend('Location','eastoutside')
Se necesitan dos neuronas, así se trendran 4 posibles combinaciones de las salidas. La elección de las combinaciones puede ser cualquiera, pero consistente. Por ejemplo
p4_32.png
Se eligen los dos hiperplanos separadores. Y se encuentran los pesos con cualquier de las tres metodologias revisadas anteriormente (Ecuación de recta, contrucción de Hagan qeu rescata el concepto de ortogonalidad del vector de pesos, o la método de desigualdades).
Pensando en los puntos del primer hiperplano como y los del segundo hiperplano como . Entonces paa el hiperplano uno
syms w11 w12 w21 w22
p11 = [0;1];
p12 = [1;-2];
w1 = [w11;w12];
Efd1 = w1'*(p11-p12)==0
Efd1 = 
% Compute analytic solution of a symbolic equation
Efd1
Efd1 = 
solution3 = solve(Efd1,w11);
% Display symbolic solution returned by solve
displaySymSolution(solution3);
solution3 = 
Se elige (¿Por qué no el negativo de esto?). Para el hiperplano dos
p21 = [0;0];
p22 = [1;0.5];
w2 = [w21;w22];
Efd2 = w2'*(p21-p22)==0
Efd2 = 
% Compute analytic solution of a symbolic equation
Efd2
Efd2 = 
solution2 = solve(Efd2,w21);
% Display symbolic solution returned by solve
displaySymSolution(solution2);
solution2 = 
Se elige . Ahora se encuentras las desviaciones.
syms b1 b2
w1 =[-3;-1];
eb1 = w1' * p11 + b1 ==0
eb1 = 
Así
w2 =[1;-2];
eb2 = w2' * p21 + b2 ==0
eb2 = 
b1 = 1;
b2 = 0;
W = [w1';w2']
W = 2×2
-3 -1 1 -2
b = [b1;b2]
b = 2×1
1 0
fimplicit(@(p1,p2) W(1,1)*p1 + W(1,2)*p2 + b1,[-3,3],'r')
fimplicit(@(p1,p2) W(2,1)*p1 + W(2,2)*p2 + b2,[-3,3],'k')
quiver(0,1,W(1,1),W(1,2),0, 'MaxHeadSize',0.5,"Color",'r','DisplayName',"_1w")
quiver(1,0.5,W(2,1),W(2,2),0, 'MaxHeadSize',0.5,"Color",'k','DisplayName',"_2w")
axis('square') % escala
grid on

Problema P4.4

p4_41.png
p4_42.png
Solución:
p1 = [2;2];
t1 = 0;
p2 = [1;-2];
t2 = 1;
p3 = [-2;2];
t3 = 0;
p4 = [-1;1];
t4 = 1;
W0 = [0 0];
b0 = 0;
Iteraciones = [W0';b0]
Iteraciones = 3×1
0 0 0
[W,b] = algo_per_ite(W0,b0,p1,t1)
W = 1×2
-2 -2
b = -1
W0 = W;
b0 = b;
Iteraciones = [Iteraciones [W0';b0]]
Iteraciones = 3×2
0 -2 0 -2 0 -1
[W,b] = algo_per_ite(W0,b0,p2,t2)
W = 1×2
-2 -2
b = -1
W0 = W;
b0 = b;
Iteraciones = [Iteraciones [W0';b0]]
Iteraciones = 3×3
0 -2 -2 0 -2 -2 0 -1 -1
[W,b] = algo_per_ite(W0,b0,p3,t3)
W = 1×2
-2 -2
b = -1
W0 = W;
b0 = b;
Iteraciones = [Iteraciones [W0';b0]]
Iteraciones = 3×4
0 -2 -2 -2 0 -2 -2 -2 0 -1 -1 -1
[W,b] = algo_per_ite(W0,b0,p4,t4)
W = 1×2
-3 -1
b = 0
disp("Termina primer epoca")
Termina primer epoca
W0 = W;
b0 = b;
Iteraciones = [Iteraciones [W0';b0]]
Iteraciones = 3×5
0 -2 -2 -2 -3 0 -2 -2 -2 -1 0 -1 -1 -1 0
[W,b] = algo_per_ite(W0,b0,p1,t1)
W = 1×2
-3 -1
b = 0
W0 = W;
b0 = b;
Iteraciones = [Iteraciones [W0';b0]]
Iteraciones = 3×6
0 -2 -2 -2 -3 -3 0 -2 -2 -2 -1 -1 0 -1 -1 -1 0 0
[W,b] = algo_per_ite(W0,b0,p2,t2)
W = 1×2
-2 -3
b = 1
W0 = W;
b0 = b;
Iteraciones = [Iteraciones [W0';b0]]
Iteraciones = 3×7
0 -2 -2 -2 -3 -3 -2 0 -2 -2 -2 -1 -1 -3 0 -1 -1 -1 0 0 1
[W,b] = algo_per_ite(W0,b0,p3,t3)
W = 1×2
-2 -3
b = 1
W0 = W;
b0 = b;
Iteraciones = [Iteraciones [W0';b0]]
Iteraciones = 3×8
0 -2 -2 -2 -3 -3 -2 -2 0 -2 -2 -2 -1 -1 -3 -3 0 -1 -1 -1 0 0 1 1
[W,b] = algo_per_ite(W0,b0,p4,t4)
W = 1×2
-2 -3
b = 1
disp("Termina la segunda epoca")
Termina la segunda epoca
Hats aquí sabemos que clasifica bien tres entradas (¿por qué?)
W0 = W;
b0 = b;
Iteraciones = [Iteraciones [W0';b0]]
Iteraciones = 3×9
0 -2 -2 -2 -3 -3 -2 -2 -2 0 -2 -2 -2 -1 -1 -3 -3 -3 0 -1 -1 -1 0 0 1 1 1
[W,b] = algo_per_ite(W0,b0,p1,t1)
W = 1×2
-2 -3
b = 1
Se ha encontrado los pesos y la desviación con el algoritmo perceptron.
figure
P=[p1 p2 p3 p4]
P = 2×4
2 1 -2 -1 2 -2 2 1
plot(P(1,1:2:3),P(2,1:2:3), 'ob','MarkerSize',15, 'LineWidth',5)
hold on
plot(P(1,2:2:4),P(2,2:2:4),'ok','MarkerSize',15, 'LineWidth',5)
axis([-3 3 -3 3])
g = gca;
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
g.Box = 'off';
fimplicit(@(p1,p2) W(1,1)*p1 + W(1,2)*p2 + b,[-3,3],'k')
quiver(0.5,0,W(1,1),W(1,2),0, 'MaxHeadSize',0.5,"Color",'r','DisplayName',"_1w")
figure
plot(Iteraciones(1,:),Iteraciones(2,:),'o', 'MarkerSize',20)
g = gca;
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
g.Box = 'off';
grid on
axis([-3.5 0.5 -3.5 0.5])
[f,c]=size(Iteraciones);
text(Iteraciones(1,:)+0.06*([0:c-1]),Iteraciones(2,:)+0.1,string([0:c-1]))
figure
plot(Iteraciones(3,:),'o','MarkerSize',20)
g = gca;
g.XAxisLocation = 'origin';
g.YAxisLocation = 'origin';
g.Box = 'off';
grid on

Problema P4.5

P4_5.png
Solución:
p1 = [1;1];
t1 = [0;0];
p2 = [1;2];
t2 = t2;
p3 = [2;-1];
t3 = [0;1];
p4 = [2;0];
t4 = t3;
p5 = [-1;2];
t5 = [1;0];
p6 = [-2;1];
t6 = t5;
p7 = [-1;-1];
t7 = [1;1];
p8 = [-2 -2];
t8 = t7;
W0 = [1 0;0 1];
b0 = [1;1];
iter = [W0 b0]
iter = 2×3
1 0 1 0 1 1
[W,b] = algo_per_ite(W0, b0,p1,t1)
W = 2×2
0 -1 -1 0
b = 2×1
0 0
W0 = W;
b0 = b;
iter = [iter W0 b0]
iter = 2×6
1 0 1 0 -1 1 0 1 1 -1 0 1
[W,b] = algo_per_ite(W0, b0,p2,t2)
W = 2×2
-1 -2 -2 -1
b = 2×1
0 0

App Frontera de decisión

nnd4db

App Regla Perceptron

nnd4pr

Convergencia de la regla perceptrón (una neurona)

RN_n10.png
RN_n11.png
RN_n12.png
function [W,b] = algo_per_ite(W0,b0,p,t)
a = hardlim(W0 * p + b0);
e = t - a;
W = W0 + e * p';
b = b0 + e;
end

Referencias

El material (la mayor parte) se toma del libro de Matin Hagan et. al. enlace