← Volver a Aprende con CDIA

Deep LearningPráctica: el perceptrón separa paso a paso

IntermedioDeep Learning8 min de lectura

Práctica: el perceptrón separa paso a paso

Entrenar un perceptrón a mano, iteración por iteración, sobre la función OR: calcular, corregir los pesos y ver cómo la recta se acomoda hasta separar las clases.

En esta práctica vamos a entrenar un perceptrón a mano, paso a paso, para ver con nuestros propios ojos cómo ajusta sus pesos hasta separar dos clases. Nada de librerías al principio: solo lápiz, papel y la regla de aprendizaje.

El problema

Queremos que un perceptrón aprenda la función lógica OR. Tenemos cuatro ejemplos con dos entradas () y su etiqueta :

000
011
101
111

El objetivo: encontrar pesos y un sesgo tales que el perceptrón acierte los cuatro.

Las reglas del juego

Recordemos las dos fórmulas del perceptrón. La predicción:

Y la actualización, que aplicamos ejemplo por ejemplo (con tasa de aprendizaje ):

Empezamos con todo en cero: , , .

Primer barrido, a mano

Recorremos los cuatro ejemplos. En cada uno calculamos la suma , predecimos, y si nos equivocamos, corregimos.

netacción nuevo nuevo
(0,0)001−1corrige(0, 0)−1
(0,1)1−10+1corrige(0, 1)0
(1,0)1010(0, 1)0
(1,1)1110(0, 1)0

Fíjate en la lógica: cuando el perceptrón dice 1 y debía ser 0 (), baja los pesos de las entradas activas y el sesgo. Cuando dice 0 y debía ser 1 (), los sube. Cuando acierta, no toca nada.

Al terminar el barrido vamos en , . Todavía no separa bien (el ejemplo (0,0) sigue fallando), así que hay que seguir.

Repetir hasta que no haya errores

Si repetimos este mismo barrido un par de veces más, las correcciones se van agotando y los pesos se estabilizan en:

Es decir, la frontera aprendida es , o sea . Comprobemos que ahora sí acierta los cuatro:

net ¿correcto?
(0,0)0−10
(0,1)101
(1,0)101
(1,1)111

¡Convergió! La recta deja el punto (0,0) de un lado y los otros tres del otro.

x₁=0x₁=1 01 x₁ + x₂ = 1
La frontera aprendida: el punto naranja (clase 0) queda a un lado; los tres rosados (clase 1), al otro.

Tu turno

Prueba lo mismo con la función AND, que solo vale 1 cuando ambas entradas son 1:

000
010
100
111

Parte de nuevo en , con y aplica la misma regla barrido a barrido. Pista: deberías llegar a una frontera del estilo (por ejemplo , ), que deja solo el punto (1,1) del lado positivo.

Comprobarlo en código

Cuando termines tu cálculo, verifica con este bucle, que hace exactamente lo que hiciste a mano:

import numpy as np

X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 1, 1, 1])            # OR

w = np.zeros(2); b = 0.0; eta = 1.0
for epoca in range(10):
    errores = 0
    for xi, yi in zip(X, y):
        pred = 1 if xi @ w + b >= 0 else 0
        error = yi - pred
        w += eta * error * xi         # misma regla de la tabla
        b += eta * error
        errores += abs(error)
    if errores == 0:                  # un barrido sin errores = convergió
        break

print(w, b)   # ≈ [1. 1.] -1.0  → la recta x1 + x2 = 1

Para llevar

Entrenar un perceptrón es repetir un gesto simple: predecir, comparar con la verdad y, si falla, empujar los pesos en la dirección correcta. Haciéndolo a mano se ve que la "recta de decisión" no aparece por magia, sino que se acomoda paso a paso hasta separar las clases. Es la misma mecánica —predecir, medir el error, corregir— que, a gran escala, entrena a las redes neuronales con backpropagation.