\begin{document}

Las neuronas biológicas reciben señales a través de las dendritas, las integran en el soma y, si superan un umbral, transmiten un impulso por el axón. El (Rosenblatt, 1958) es el modelo matemático más simple de una neurona artificial.

Para un vector de entrada \(\mathbf{x} = (x_1, x_2, \dots, x_n)\), el perceptrón calcula:

\[ z = \sum_{i=1}^{n} w_i x_i + b = \mathbf{w}^T \mathbf{x} + b \] \[ \hat{y} = \phi(z) = \begin{cases} 1 & \text{si } z \geq 0 \\ 0 & \text{si } z < 0 \end{cases} \]

donde \(\mathbf{w}\) son los pesos sinápticos, \(b\) es el sesgo (umbral negativo) y \(\phi\) es la función de activación escalón. El perceptrón es un : en \(\mathbb{R}^2\) la frontera de decisión es una recta.

Dado un conjunto de entrenamiento \(\{(\mathbf{x}^{(i)}, y^{(i)})\}\), la regla del perceptrón actualiza los parámetros cuando hay error:

\[ w_j \leftarrow w_j + \eta\,(y^{(i)} - \hat{y}^{(i)})\,x_j^{(i)}, \qquad b \leftarrow b + \eta\,(y^{(i)} - \hat{y}^{(i)}) \]

donde \(\eta\) es la tasa de aprendizaje.

La función AND es linealmente separable. Entrenamos un perceptrón con los cuatro puntos \((0,0)\), \((0,1)\), \((1,0)\) y \((1,1)\) y etiquetas \(0,0,0,1\) respectivamente.

Ejecuta el siguiente script en R. Generará una gráfica con la recta de decisión aprendida.

# Datos de la compuerta AND
X <- matrix(c(0,0, 0,1, 1,0, 1,1), ncol = 2, byrow = TRUE)
y <- c(0, 0, 0, 1)

# Implementacion del perceptron
perceptron <- function(X, y, eta = 0.1, epochs = 20) {
  w <- runif(ncol(X), -0.5, 0.5)
  b <- runif(1, -0.5, 0.5)
  for (epoch in 1:epochs) {
    errores <- 0
    for (i in 1:nrow(X)) {
      z <- sum(w * X[i, ]) + b
      y_pred <- ifelse(z >= 0, 1, 0)
      error <- y[i] - y_pred
      if (error != 0) {
        w <- w + eta * error * X[i, ]
        b <- b + eta * error
        errores <- errores + 1
      }
    }
    if (errores == 0) break
  }
  return(list(w = w, b = b))
}

# Entrenar
set.seed(123) # para reproducibilidad
modelo <- perceptron(X, y, eta = 0.2, epochs = 20)
w1 <- modelo$w[1]; w2 <- modelo$w[2]; b <- modelo$b

# Grafica con ggplot2
library(ggplot2)
datos <- data.frame(x1 = X[,1], x2 = X[,2], clase = factor(y))
p <- ggplot(datos, aes(x = x1, y = x2, color = clase)) +
  geom_point(size = 4) +
  geom_abline(intercept = -b/w2, slope = -w1/w2, 
              linetype = "dashed", color = "blue", size = 1) +
  scale_color_manual(values = c("red", "green")) +
  labs(title = "Separación lineal aprendida por el perceptrón (AND)",
       subtitle = paste0("Recta: ", round(w1,2), " x1 + ", round(w2,2), " x2 + ", round(b,2), " = 0"),
       x = "x1", y = "x2") +
  xlim(-0.2, 1.2) + ylim(-0.2, 1.2) +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call ]8;;ide:run:lifecycle::last_lifecycle_warnings()lifecycle::last_lifecycle_warnings()]8;; to see where this warning was
## generated.
ggsave("perceptron_and.pdf", p, width = 5, height = 4)
print(p)

La figura~\(\ref{fig:separacion}\) muestra la frontera lineal obtenida. Los puntos rojos (\(y=0\)) y verde (\(y=1\)) quedan perfectamente separados por la recta.

En \(\mathbb{R}^2\), la condición \(z = w_1 x_1 + w_2 x_2 + b = 0\) define una recta. Los puntos que cumplen \(z > 0\) se clasifican como \(1\), los de \(z < 0\) como \(0\). El perceptrón ajusta iterativamente la pendiente y el intercepto hasta que todos los puntos de entrenamiento estén correctamente clasificados (si los datos son linealmente separables).

El perceptrón no puede resolver problemas no linealmente separables como la compuerta XOR. Para ello se requieren redes con múltiples capas (perceptrón multicapa) y funciones de activación no lineales, base del aprendizaje profundo.

El perceptrón es la unidad fundamental de las redes neuronales. Su estudio permite entender conceptos clave como pesos, sesgo, función de activación y frontera de decisión lineal. La visualización en \(\mathbb{R}^2\) muestra de forma intuitiva cómo una neurona artificial puede separar patrones.