PROCESO DE IMPLEMENTACIÓN DE LA NEURONA ARTIFICIAL BÁSICA: PERCEPTRÓN

Se define el perceptrón

Definiremos la clase del perceptrón así como las funciones de salida y de aprendizaje del perceptrón según las siguientes fórmulas:

1.- Fórmula de salida del perceptrón


\[ y = step (\sum_{i} w_i * x_i) \]

2.- Fórmula de aprendizaje o cálculo de pesos


\[ w_i = w_i + \alpha * (y_d -y) * x_i \]

Donde:

\(\alpha\hspace{1cm}\) Coeficiente de aprendizaje

\(x_i\hspace{1cm}\) Valor de las entradas

\(w_i\hspace{1cm}\) Valor de los pesos


Se implementa el perceptrón


class perceptron:
  
  def __init__(inicio, n): # Damos valores iniciales a los pesos para las n entradas, se inicializa
  
    inicio.pesos = np.random.randn(n) # la cantidad de pesos aleatorios depende del número de entradas n
    
    inicio.n = n # almaceno el n
  
  def salidas(inicio,entradas):
    
    inicio.salidas_r = 1*(inicio.pesos.dot(entradas) > 0) # se realiza el cálculo de la salida según fórmula del punto 1
                                                       # producto escalar de pesos por entradas con umbral en 0
    inicio.entradas = entradas
  
  def aprendizaje(inicio, alpha, salidas_deseadas):
    
    for i in range(0, inicio.n): # Se calcularán salidas para el rango de entradas de 0 a n
    
      inicio.pesos[i] = inicio.pesos[i] + alpha * (salidas_deseadas - inicio.salidas_r) * inicio.entradas[i] # Cálculo de pesos según fórmula del punto 2
    

Se crea un Perceptrón como objeto como ejemplo para probar


perceptron_n_entradas = perceptron(5) # Creando un perceptrón de 5 entradas

perceptron_n_entradas.pesos
## array([0.21913967, 0.26313216, 1.41804154, 0.48757096, 0.44983978])

Se prueban las salidas del perceptrón


perceptron_n_entradas.salidas([1,0,1,1,1])

perceptron_n_entradas.salidas_r
## 1

Se prueban las actualizaciones de pesos y salidas del perceptrón mediante aprendizaje


perceptron_n_entradas.aprendizaje(0.6,0) # Cambio el peso y la salida para probar aprendizaje

perceptron_n_entradas.pesos
## array([-0.38086033,  0.26313216,  0.81804154, -0.11242904, -0.15016022])

USO DE LA NEURONA ARTIFICIAL BÁSICA: PERCEPTRÓN CON LA FUNCIÓN AND


\(X_2\) \(X_1\) \(X_0\) Salida
0 0 1 0
0 1 1 0
1 0 1 0
1 1 1 1

Creando el Perceptrón para la función AND con 3 entradas


perceptron_AND_3ent_1sal = perceptron(3)

tabla_AND = np.array([[0,0,1,0],[0,1,1,0],[1,0,1,0],[1,1,1,1]])

n = 4

alpha = 0.5

historico_pesos = [perceptron_AND_3ent_1sal.pesos]

repes = 100

for j in range(0,repes):

  for i in range(0,n):
  
    perceptron_AND_3ent_1sal.salidas(tabla_AND[i,0:3])

    perceptron_AND_3ent_1sal.aprendizaje(alpha, tabla_AND[i,3])
  
    historico_pesos = np.concatenate((historico_pesos,[perceptron_AND_3ent_1sal.pesos]), axis=0)
  

Graficando las salidas del Perceptrón para la función AND con 3 entradas


mplt.plot(historico_pesos[:,0],'k')

mplt.plot(historico_pesos[:,1],'r')

mplt.plot(historico_pesos[:,2],'b')

mplt.show()

Conclusiones

1.- Se observa en el gráfico resultantes que los pesos tienen un intervalo de estabilización durante las repeticiones que realiza en su aprendizaje hasta que los pesos se estabilizan.

2.- El perceptrón ha aprendido la función AND.

LS0tDQp0aXRsZTogIioqX05ldXJvbmEgQXJ0aWZpY2lhbCBCw6FzaWNhIEZ1bmNpw7NuIEFORDogUGVyY2VwdHJvbiBjb24gUHl0aG9uXyoqIg0KYXV0aG9yOiAiSmVzw7pzIENoaXJpbm9zIg0KZGF0ZTogIjIwMjIvMDcvMjUiDQpzdWJ0aXRsZTogVXNvIGRlIFJQdWJzIHkgTmV0bGlmeQ0KaW5zdGl0dXRlOiBEYXRhIFNjaWVuY2UgUmVzZWFyY2ggUGVyw7oNCnBob25lOiAnKzUxOTc1NDM1NjExJw0KZW1haWw6IGNoaXJpbm9zLmphQHB1Y3AuZWR1LnBlDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRvYzogVFJVRQ0KICAgIHRvY19mbG9hdDogVFJVRQ0KICAgIHJtZGZvcm1hdHM6IHJlYWR0aGVkb3duDQotLS0NCg0KIyMgKipfUFJPQ0VTTyBERSBJTVBMRU1FTlRBQ0nDk04gREUgTEEgTkVVUk9OQSBBUlRJRklDSUFMIELDgVNJQ0E6IFBFUkNFUFRSw5NOXyoqDQoNCmBgYHtyIHNldHVwMSxpbmNsdWRlPUZBTFNFfQ0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQoNCmBgYA0KDQo8IS0tIFNlIGNhcmdhbiBsYXMgbGlicmVyw61hcyBxdWUgdXRpbGl6YXJlbW9zIHBhcmEgbG9zIGPDoWxjdWxvcyAobnVtcHkpIHkgcGFyYSBsb3MgZ3LDoWZpY29zIChtYXRwbG90bGliKSAtLT4NCg0KYGBge3B5dGhvbiBzZXR1cDIsIGluY2x1ZGU9RkFMU0V9DQoNCmltcG9ydCBudW1weSBhcyBucA0KDQppbXBvcnQgbWF0cGxvdGxpYi5weXBsb3QgYXMgbXBsdA0KDQpgYGANCg0KIyMjICoqX1NlIGRlZmluZSBlbCBwZXJjZXB0csOzbl8qKg0KDQpEZWZpbmlyZW1vcyBsYSBjbGFzZSBkZWwgcGVyY2VwdHLDs24gYXPDrSBjb21vIGxhcyBmdW5jaW9uZXMgZGUgc2FsaWRhIHkgZGUgYXByZW5kaXphamUgZGVsIHBlcmNlcHRyw7NuIHNlZ8O6biBsYXMgc2lndWllbnRlcyBmw7NybXVsYXM6DQoNCioxLi0gRsOzcm11bGEgZGUgc2FsaWRhIGRlbCBwZXJjZXB0csOzbioNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiQkDQp5ID0gc3RlcCAoXHN1bV97aX0gd19pICogeF9pKQ0KJCQgLS0tDQoNCioyLi0gRsOzcm11bGEgZGUgYXByZW5kaXphamUgbyBjw6FsY3VsbyBkZSBwZXNvcyoNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiQkDQp3X2kgPSB3X2kgKyBcYWxwaGEgKiAoeV9kIC15KSAqIHhfaQ0KJCQNCg0KRG9uZGU6DQoNCiRcYWxwaGFcaHNwYWNlezFjbX0kIENvZWZpY2llbnRlIGRlIGFwcmVuZGl6YWplDQoNCiR4X2lcaHNwYWNlezFjbX0kIFZhbG9yIGRlIGxhcyBlbnRyYWRhcw0KDQokd19pXGhzcGFjZXsxY219JCBWYWxvciBkZSBsb3MgcGVzb3MNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjIyAqKl9TZSBpbXBsZW1lbnRhIGVsIHBlcmNlcHRyw7NuXyoqDQoNCmBgYHtweXRob24gY2xhc2UsIHJlc3VsdHM9J2hpZGUnLCBjb2xsYXBzZT1UUlVFfQ0KDQpjbGFzcyBwZXJjZXB0cm9uOg0KICANCiAgZGVmIF9faW5pdF9fKGluaWNpbywgbik6ICMgRGFtb3MgdmFsb3JlcyBpbmljaWFsZXMgYSBsb3MgcGVzb3MgcGFyYSBsYXMgbiBlbnRyYWRhcywgc2UgaW5pY2lhbGl6YQ0KICANCiAgICBpbmljaW8ucGVzb3MgPSBucC5yYW5kb20ucmFuZG4obikgIyBsYSBjYW50aWRhZCBkZSBwZXNvcyBhbGVhdG9yaW9zIGRlcGVuZGUgZGVsIG7Dum1lcm8gZGUgZW50cmFkYXMgbg0KICAgIA0KICAgIGluaWNpby5uID0gbiAjIGFsbWFjZW5vIGVsIG4NCiAgDQogIGRlZiBzYWxpZGFzKGluaWNpbyxlbnRyYWRhcyk6DQogICAgDQogICAgaW5pY2lvLnNhbGlkYXNfciA9IDEqKGluaWNpby5wZXNvcy5kb3QoZW50cmFkYXMpID4gMCkgIyBzZSByZWFsaXphIGVsIGPDoWxjdWxvIGRlIGxhIHNhbGlkYSBzZWfDum4gZsOzcm11bGEgZGVsIHB1bnRvIDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByb2R1Y3RvIGVzY2FsYXIgZGUgcGVzb3MgcG9yIGVudHJhZGFzIGNvbiB1bWJyYWwgZW4gMA0KICAgIGluaWNpby5lbnRyYWRhcyA9IGVudHJhZGFzDQogIA0KICBkZWYgYXByZW5kaXphamUoaW5pY2lvLCBhbHBoYSwgc2FsaWRhc19kZXNlYWRhcyk6DQogICAgDQogICAgZm9yIGkgaW4gcmFuZ2UoMCwgaW5pY2lvLm4pOiAjIFNlIGNhbGN1bGFyw6FuIHNhbGlkYXMgcGFyYSBlbCByYW5nbyBkZSBlbnRyYWRhcyBkZSAwIGEgbg0KICAgIA0KICAgICAgaW5pY2lvLnBlc29zW2ldID0gaW5pY2lvLnBlc29zW2ldICsgYWxwaGEgKiAoc2FsaWRhc19kZXNlYWRhcyAtIGluaWNpby5zYWxpZGFzX3IpICogaW5pY2lvLmVudHJhZGFzW2ldICMgQ8OhbGN1bG8gZGUgcGVzb3Mgc2Vnw7puIGbDs3JtdWxhIGRlbCBwdW50byAyDQogICAgDQpgYGANCg0KIyMjICoqX1NlIGNyZWEgdW4gUGVyY2VwdHLDs24gY29tbyBvYmpldG8gY29tbyBlamVtcGxvIHBhcmEgcHJvYmFyXyoqDQoNCmBgYHtweXRob24gT2JqZXRvX1BlcmNlcHRyb259DQoNCnBlcmNlcHRyb25fbl9lbnRyYWRhcyA9IHBlcmNlcHRyb24oNSkgIyBDcmVhbmRvIHVuIHBlcmNlcHRyw7NuIGRlIDUgZW50cmFkYXMNCg0KcGVyY2VwdHJvbl9uX2VudHJhZGFzLnBlc29zDQoNCg0KYGBgDQoNCiMjIyAqKl9TZSBwcnVlYmFuIGxhcyBzYWxpZGFzIGRlbCBwZXJjZXB0csOzbl8qKg0KDQpgYGB7cHl0aG9uIFNhbGlkYXNfUGVyY2VwdHJvbn0NCg0KcGVyY2VwdHJvbl9uX2VudHJhZGFzLnNhbGlkYXMoWzEsMCwxLDEsMV0pDQoNCnBlcmNlcHRyb25fbl9lbnRyYWRhcy5zYWxpZGFzX3INCg0KYGBgDQoNCiMjIyAqKl9TZSBwcnVlYmFuIGxhcyBhY3R1YWxpemFjaW9uZXMgZGUgcGVzb3MgeSBzYWxpZGFzIGRlbCBwZXJjZXB0csOzbiBtZWRpYW50ZSBhcHJlbmRpemFqZV8qKg0KDQpgYGB7cHl0aG9uIEFwcmVuZGl6YWplX1BlcmNlcHRyb259DQoNCnBlcmNlcHRyb25fbl9lbnRyYWRhcy5hcHJlbmRpemFqZSgwLjYsMCkgIyBDYW1iaW8gZWwgcGVzbyB5IGxhIHNhbGlkYSBwYXJhIHByb2JhciBhcHJlbmRpemFqZQ0KDQpwZXJjZXB0cm9uX25fZW50cmFkYXMucGVzb3MNCg0KYGBgDQoNCiMjICoqX1VTTyBERSBMQSBORVVST05BIEFSVElGSUNJQUwgQsOBU0lDQTogUEVSQ0VQVFLDk04gQ09OIExBIEZVTkNJw5NOIEFORF8qKg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KfCAkWF8yJCB8ICRYXzEkIHwgJFhfMCQgfCBTYWxpZGEgfA0KfDotLS0tLTp8Oi0tLS0tOnw6LS0tLS06fDotLS0tLS06fA0KfCAgIDAgICB8ICAgMCAgIHwgICAxICAgfCAgIDAgICAgfA0KfCAgIDAgICB8ICAgMSAgIHwgICAxICAgfCAgIDAgICAgfA0KfCAgIDEgICB8ICAgMCAgIHwgICAxICAgfCAgIDAgICAgfA0KfCAgIDEgICB8ICAgMSAgIHwgICAxICAgfCAgIDEgICAgfA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyMjICoqX0NyZWFuZG8gZWwgUGVyY2VwdHLDs24gcGFyYSBsYSBmdW5jacOzbiBBTkQgY29uIDMgZW50cmFkYXNfKioNCg0KYGBge3B5dGhvbiBQZXJjZXB0cm9uX0FORH0NCg0KcGVyY2VwdHJvbl9BTkRfM2VudF8xc2FsID0gcGVyY2VwdHJvbigzKQ0KDQp0YWJsYV9BTkQgPSBucC5hcnJheShbWzAsMCwxLDBdLFswLDEsMSwwXSxbMSwwLDEsMF0sWzEsMSwxLDFdXSkNCg0KbiA9IDQNCg0KYWxwaGEgPSAwLjUNCg0KaGlzdG9yaWNvX3Blc29zID0gW3BlcmNlcHRyb25fQU5EXzNlbnRfMXNhbC5wZXNvc10NCg0KcmVwZXMgPSAxMDANCg0KZm9yIGogaW4gcmFuZ2UoMCxyZXBlcyk6DQoNCiAgZm9yIGkgaW4gcmFuZ2UoMCxuKToNCiAgDQogICAgcGVyY2VwdHJvbl9BTkRfM2VudF8xc2FsLnNhbGlkYXModGFibGFfQU5EW2ksMDozXSkNCg0KICAgIHBlcmNlcHRyb25fQU5EXzNlbnRfMXNhbC5hcHJlbmRpemFqZShhbHBoYSwgdGFibGFfQU5EW2ksM10pDQogIA0KICAgIGhpc3Rvcmljb19wZXNvcyA9IG5wLmNvbmNhdGVuYXRlKChoaXN0b3JpY29fcGVzb3MsW3BlcmNlcHRyb25fQU5EXzNlbnRfMXNhbC5wZXNvc10pLCBheGlzPTApDQogIA0KYGBgDQoNCiMjIyAqKl9HcmFmaWNhbmRvIGxhcyBzYWxpZGFzIGRlbCBQZXJjZXB0csOzbiBwYXJhIGxhIGZ1bmNpw7NuIEFORCBjb24gMyBlbnRyYWRhc18qKg0KDQpgYGB7cHl0aG9uIEdyYWZpY2FfUGVyY2VwdHJvbl9BTkR9DQoNCm1wbHQucGxvdChoaXN0b3JpY29fcGVzb3NbOiwwXSwnaycpDQoNCm1wbHQucGxvdChoaXN0b3JpY29fcGVzb3NbOiwxXSwncicpDQoNCm1wbHQucGxvdChoaXN0b3JpY29fcGVzb3NbOiwyXSwnYicpDQoNCm1wbHQuc2hvdygpDQoNCmBgYA0KDQoNCiMjICoqX0NvbmNsdXNpb25lc18qKg0KDQoqMS4tIFNlIG9ic2VydmEgZW4gZWwgZ3LDoWZpY28gcmVzdWx0YW50ZXMgcXVlIGxvcyBwZXNvcyB0aWVuZW4gdW4gaW50ZXJ2YWxvIGRlIGVzdGFiaWxpemFjacOzbiBkdXJhbnRlIGxhcyByZXBldGljaW9uZXMgcXVlIHJlYWxpemEgZW4gc3UgYXByZW5kaXphamUgaGFzdGEgcXVlIGxvcyBwZXNvcyBzZSBlc3RhYmlsaXphbi4qDQoNCioyLi0gRWwgcGVyY2VwdHLDs24gaGEgYXByZW5kaWRvIGxhIGZ1bmNpw7NuIEFORC4qDQo=