Perceptron: bloque de construcción de una red neuronal artificial

Nodo de origen: 1216283

Si eres un entusiasta del aprendizaje automático y la inteligencia artificial, debes haberte encontrado con la palabra perceptrón. Perceptron se enseña en el primer capítulo de muchos cursos de aprendizaje profundo. Entonces, ¿qué es exactamente? ¿Cuál es la inspiración detrás de esto? ¿Cómo resuelve exactamente el problema de clasificación? En este artículo, comenzaremos con la inspiración biológica detrás del perceptrón y luego profundizaremos en sus tecnicismos matemáticos, y finalmente construiremos un clasificador binario desde cero usando una unidad de perceptrón.

Inspiración biológica de las Redes Neuronales

Una neurona (célula nerviosa) es el componente básico del sistema nervioso. Un cerebro humano consta de miles de millones de neuronas que están interconectadas entre sí. Son responsables de recibir y enviar señales desde el cerebro. Como se ve en el siguiente diagrama, una neurona típica consta de tres partes principales: dendritas, un axón y un cuerpo celular o soma. Las dendritas son ramas en forma de árbol que se originan en el cuerpo celular. Reciben información de las otras neuronas. El soma es el núcleo de una neurona. Se encarga de procesar la información que recibe de las dendritas. Axon es como un cable a través del cual las neuronas envían la información. Hacia su final, el axón se divide en muchas ramas que se conectan con las otras neuronas a través de sus dendritas. los La conexión entre el axón y las dendritas de otras neuronas se llama sinapsis.

1: Neurona biológica versus red neuronal artificial

Fuente de imagen: Willems, K. (2017 de mayo de 2). Tutorial de Keras: aprendizaje profundo en Python.

Como ANN está inspirada en el funcionamiento del cerebro, veamos cómo funciona el cerebro. El cerebro está formado por una red de miles de millones de neuronas. Se comunican mediante señales eléctricas y químicas a través de una sinapsis, en la que la información de una neurona se transmite a otras neuronas. El proceso de transmisión involucra un impulso eléctrico llamado 'potencial de acción'. Para que la información se transmita, las señales de entrada (impulso) deben ser lo suficientemente fuertes como para cruzar una cierta barrera de umbral, luego solo una neurona se activa y transmite la señal (salida).

Inspirado por el funcionamiento biológico de una neurona, el científico estadounidense Franck Rosenblatt ideó el concepto de perceptrón en el Laboratorio Aeronáutico de Cornell en 1957.

  • Una neurona recibe información de otras neuronas en forma de impulsos eléctricos de fuerza variable.
  • La neurona integra todos los impulsos que recibe de las otras neuronas.
  • Si la suma resultante es mayor que un cierto valor de umbral, la neurona se 'dispara', desencadenando un potencial de acción que se transmite a las otras neuronas conectadas.

Componentes principales de Perceptron

El perceptrón de Rosenblatt es básicamente un clasificador binario. El perceptrón consta de 3 partes principales:

  • Nodos de entrada o capa de entrada: la capa de entrada lleva los datos iniciales al sistema para su posterior procesamiento. Cada nodo de entrada está asociado con un valor numérico. Puede tomar cualquier valor real.
  • Pesos y sesgo: los parámetros de peso representan la fuerza de la conexión entre las unidades. Cuanto más alto es el peso, más fuerte es la influencia de la neurona de entrada asociada para decidir la salida. El sesgo juega lo mismo que la intersección en una ecuación lineal.
  • Función de activación: La función de activación determina si la neurona disparará o no. En su forma más simple, la función de activación es una función de paso, pero según el escenario, se pueden usar diferentes funciones de activación.

Veremos más sobre esto en la siguiente sección.

Funcionamiento de un perceptrón

En el primer paso, todos los valores de entrada se multiplican con sus respectivos pesos y se suman. El resultado obtenido se denomina suma ponderada. ∑wi*xi, o dicho de otra manera,  x1*w1 + x2*w2 +…wn*xn. Esta suma da una representación adecuada de las entradas en función de su importancia. Además, un término de sesgo b se suma a esta suma ∑wi*xi + b. El sesgo sirve como otro parámetro del modelo (además de los pesos) que se puede ajustar para mejorar el rendimiento del modelo.

En el segundo paso, una función de activación f se aplica sobre la suma anterior ∑wi*xi + b para obtener la salida Y = f(∑wi*xi + b). Según el escenario y la función de activación utilizada, el Salida es cualquiera binario {1, 0} o un valor continuo. 

Funcionamiento de un perceptrón

(A menudo, estos dos pasos se representan como un solo paso en perceptrones multicapa, aquí los he mostrado como dos pasos diferentes para una mejor comprensión)

Funciones de activación

Una neurona biológica solo se activa cuando se supera un cierto umbral. Del mismo modo, la neurona artificial solo se activará cuando la suma de las entradas (suma ponderada) exceda un cierto valor de umbral, digamos 0. Intuitivamente, podemos pensar en un enfoque basado en reglas como este:

Si ∑wi*xi + b > 0: salida = 1 si no: salida = 0

Su gráfico será algo como esto:

Funciones de activación

Esta es, de hecho, la función de activación de escalón unitario (umbral) que fue utilizada originalmente por Rosenblatt. Pero como puede ver, esta función es discontinua en 0, por lo que causa problemas en los cálculos matemáticos. Una versión más suave de la función anterior es la función sigmoidea. Da como salida entre 0 y 1. Otro es la tangente hiperbólica (tanh), que produce la salida entre -1 y 1. Tanto la función sigmoidea como la tanh sufren problemas de gradientes de fuga. Hoy en día, ReLU y Leaky ReLU son las funciones de activación más utilizadas. Son comparativamente estables en redes profundas.

Perceptron como clasificador binario

Hasta ahora, hemos visto la inspiración biológica y las matemáticas del perceptrón. En esta sección veremos cómo un perceptrón resuelve un problema de clasificación lineal.

Importación de algunas bibliotecas –

desde sklearn.datasets import make_blobs import matplotlib.pyplot as plt import numpy as np %matplotlib inline

Generación de un conjunto de datos ficticio usando hacer_blobs funcionalidad proporcionada por scikit learn –

# Generar conjunto de datos X, Y = make_blobs(n_features = 2, centers = 2, n_samples = 1000, random_state = 12)
# Visualiza el conjunto de datos plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = Y) plt.title('Verdad fundamental', fontsize = 18) plt.mostrar()
Perceptron como clasificador binario

Digamos que los puntos azules son 1 y los puntos verdes son 0. Usando la lógica del perceptrón, podemos crear un límite de decisión (hiperplano) para la clasificación que separa diferentes puntos de datos en el gráfico.

Antes de continuar, agreguemos un término de sesgo (unos) al vector de entrada:

# Agregar un sesgo al vector de entrada X_bias = np.ones([X.shape[0], 3]) X_bias[:, 1:3] = X

El conjunto de datos se verá así – 

datos

Aquí, cada fila del conjunto de datos anterior representa el vector de entrada (un punto de datos). Para crear un límite de decisión, necesitamos encontrar los pesos apropiados. Los pesos son 'aprendidos' del entrenamiento usando la siguiente regla –

w = w + (esperado — predicho) * x

Perceptrón w

Significa restar el resultado estimado de la verdad fundamental y luego multiplicarlo por el vector de entrada actual y agregarle pesos antiguos para obtener el nuevo valor de los pesos. Si nuestra salida es la misma que la clase real, entonces los pesos no cambian. Pero si nuestra estimación es diferente de la realidad fundamental, entonces los pesos aumentan o disminuyen en consecuencia. Así es como los pesos se ajustan progresivamente en cada iteración.

Comenzamos asignando valores arbitrarios al vector de peso, luego los ajustamos progresivamente en cada iteración usando el error y los datos disponibles:

# inicializar pesos con valores aleatorios w = np.random.rand(3, 1) print(w)

Salida:

[[0.37547448] [0.00239401] [0.18640939]]

Definir la función de activación del perceptrón:

def activación_func(z): si z >= 1: devuelve 1 si no: devuelve 0

A continuación, aplicamos la regla de aprendizaje del perceptrón:

for _ in range(100): for i in range(X_bias.shape[0]): y = activación_func(w.transpose().dot(X_bias[i, :])) # Actualizar pesos w = w + (( Y[i] - y) * X_bias[i, :]).reshape(w.shape[0], 1)

No se garantiza que los pesos converjan en una sola pasada, por lo que ingresamos todos los datos de entrenamiento en el algoritmo del perceptrón 100 veces mientras aplicamos constantemente la regla de aprendizaje para que finalmente logremos obtener los pesos óptimos.

Ahora que hemos obtenido los pesos óptimos, predecir la clase para cada punto de datos usando Y = f(∑wi*xi + b) o Y = wT.x en forma vectorial.

# predecir la clase de los puntos de datos result_class = [activation_func(w.transpose().dot(x)) for x in X_bias]

Visualice el límite de decisión y las etiquetas de clase predichas:

# convertir a vector unitario w = w/np.sqrt(w.transpose().dot(w))
# Visualizar resultados plt.figure(figsize = (6, 6)) plt.scatter(X[:, 0], X[:, 1], c = result_class) plt.plot([-10, -1], hiperplano ([-10, -1], w), lw = 3, c = 'rojo') plt.title('Clasificación de perceptrón con límite de decisión') plt.show()
Clasificación de perceptrón con límite de decisión

Puede comparar la imagen real del terreno con la imagen del resultado previsto y ver algunos puntos que están mal clasificados. Si calculamos la precisión, se trata de un 98% (lo dejo como ejercicio para los lectores).

Si ve, aquí nuestros datos originales estaban bastante separados, por lo que podemos obtener una precisión tan buena. Pero este no es el caso con los datos del mundo real. Usando un solo perceptrón, solo podemos construir un límite de decisión lineal, por lo que si los datos se entremezclan, el algoritmo del perceptrón tendrá un desempeño deficiente. Esta es una de las limitaciones del modelo de perceptrón único.

Notas finales

Empezamos por entender la inspiración biológica detrás del perceptrón de Rosenblatt. Luego pasamos a las matemáticas del perceptrón y las funciones de activación. Finalmente, utilizando un conjunto de datos de juguete, vimos cómo el perceptrón puede realizar una clasificación básica mediante la construcción de un límite de decisión lineal que separa los puntos de datos que pertenecen a diferentes clases.

Sobre la autora

Pratik Nabriya es un experto científico de datos actualmente empleado en una empresa de análisis e inteligencia artificial con sede en Noida. Es competente en aprendizaje automático, aprendizaje profundo, NLP, análisis de series temporales, manipulación de datos, SQL, Python y está familiarizado con el trabajo en un entorno de nube. En su tiempo libre, le encanta competir en Hackathons y escribir artículos técnicos.

Los medios que se muestran en este artículo no son propiedad de Analytics Vidhya y se utilizan a discreción del autor.

Fuente: https://www.analyticsvidhya.com/blog/2021/10/perceptron-building-block-of-artificial-neural-network/

Sello de tiempo:

Mas de Analítica Vidhya