El libro «Perceptrons» y la revolución de las redes neuronales

Autor: | Última modificación: 16 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

La revolución de las redes neuronales vino dada, en un inicio, por la aparición del concepto de perceptrón, un algoritmo de aprendizaje automático que clasificaba de manera binaria, es decir, servía para decir si un vector pertenecía o no a una determinada clase.

El perceptrón fue propuesto por primera vez por Frank Rosenblatt en 1956, aunque la revolución de las redes neuronales (o más bien su aparición) se dio a finales de los años 40.

Rosenblatt definía el perceptrón como un objeto no biológico capaz de aprender de su propio entorno en cantidades significativas. Podía discernir, entre dos perros, cuál era rojo y cuál era azul, pero no podía distinguir si uno de esos perros estaba en el lado derecho o en el izquierdo.

El perceptrón, por tanto, es una especie de neurona artificial que intenta funcionar como una neurona del cerebro humano o, al menos, la imita.

La revolución de las redes neuronales

En 1969 aparecieron Marvin Minsky y Seymour A. Papert y publicaron el libro Perceptrons. El perceptrón tiene un problema y es que solo puede clasificar grupos linealmente separables. Demostraron que el perceptrón no es capaz de converger en el simple problema XOR.

ABXOR
000
011
101
110
Función XOR
ABOR
000
011
101
111
Función OR
ABAND
000
010
100
111
Función AND
#revolución de las redes neuronales
set.seed (12)
Num_samples <- 5
sdev <- 0.05
dfa1 <- data.frame (group = "A", x1 = rnorm (Num_samples, mean = 0, sd = sdev), x2 = rnorm (Num_samples, mean = 0, sd = sdev)) 
dfa2 <- data.frame (group = "A", x1 = rnorm (Num_samples, mean = 1, sd = sdev), x2 = rnorm (Num_samples, mean = 1, sd = sdev))
dfa3 <- data.frame (group = "B", x1 = rnorm (Num_samples, mean = 0, sd = sdev), x2 = rnorm (Num_samples, mean = 1, sd = sdev)) 
dfa4 <- data.frame (group = "B", x1 = rnorm (Num_samples, mean = 1, sd = sdev), x2 = rnorm (Num_samples, mean = 0, sd = sdev))

df_train <- rbind (dfa1, dfb1, dfa2, dfb2)
#df_train <- df_train [sample (nrow (df_train))]
library (ggplot2)
options (repr.plot.height = 4, repr.plot.width = 6)
ggplot (df_train, aes (x = x1, y = x2, color = group)) + geom_point (size = 0.5)
revolución de las redes neuronales
Figura 1
#revolución de las redes neuronales
threshold <- 0.5
learning_rate <- 0.002

w <- c (0.5, 0, 0.005)
i <- 0
iter <- 0

i <- i %% (nrow (df_train) -1) + 1
iter <- iter + 1

x_vector <- df_train [i, c (2 : 3))
y_out <- perceptron (x_vector, weigths = w, threshold = threshold)

error = as.numeric (df_train [1, "group"] = "B") -y_out
pre_w <- w
if (error != 0) {
w [1] <- w [1] + error * learning_rate
for (idx in 1 : length (x_vector)) {
w [idx + 1] <- w [idx + 1] + x_vector [1, idx] * error * learning_rate
}
}
#revolución de las redes neuronales
print (paste ("Iteracción", iter, "Dato: ", 1, "Error: ", error, "Pesos:", paste (w, collapse = " , ")))
ggplot (df_train, aes (x = x1, y = x2, color = group)) + geom_point (size = 0.5) +
geom_point (size = 3, x = x_vector [1, 1], y = x_vector [1, 2], shape = 0, color = "red") + 
geom_abline (slope = -pre_w [2] / pre_w [3], intercept = (threshold - pre_w [1]) / pre_w [3], color = "blue", linetype = 3) +
geom_abline (slope = -w [2] / w [3], intercept = (threshold - w [1]) / w [3], color = "blue")

[1] Iteracción 1 Dato: 1 Error: 0 Pesos: 0.5,0, 0.005″

El libro «Perceptrons» y la revolución de las redes neuronales
Figura 2

Así pues, la revolución de las redes neuronales se inició de manera activa con este libro, ya que dilucidaba el problema de trasfondo que tenían los perceptrones: no podían resolver problemas tan sencillos como el que se mostró anteriormente.

No se podía intentar, en aquel tiempo, pintar una línea que clasificara a todos los grupos. Esto es lo que se conoce como el problema del XOR. Si observamos las tablas de las funciones AND y XOR, en el cuadro de esta última solo hay XOR cuando una de las dos es 1. Si nos fijamos en la figura 1, solo tenemos el valor de B cuando uno de los dos es 1, no cuando los dos son 1.

Esto lo puedes hacer mil veces, pero nunca va a funcionar, como puede apreciarse en la figura 2.

¿Qué sigue?

Hoy en día es fácil entender por qué este algoritmo no funciona, pero para su época fue toda una revolución de las redes neuronales. Si quieres seguir aprendiendo sobre machine learning, no pierdas la oportunidad de inscribirte en el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Aprenderás con la guía de expertos y, en pocos meses, lograrás convertirte en todo un profesional de este ámbito del sector IT. ¡Anímate a impulsar tu carrera y solicita más información!

Posts Relacionados

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado