¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Cómo aprende una red neuronal pequeña

Después de esta lección: Puedo explicar cómo aprende una red neuronal pequeña.

Lección de 55 min2 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

Una regla que nadie escribió

El encargado tiene una regla en la cabeza: «si hace calor y es fin de semana, habrá mucho trabajo». Nunca la ha escrito en ningún sitio.

Una red neuronal puede llegar a una regla así sola, a partir de ejemplos. Hoy ves cómo aprende la red más pequeña posible: una sola neurona.

Al final de esta lección

Nota

Puedo explicar cómo aprende una red neuronal pequeña.

Palabras clave

PalabraQué significaEjemplo
Neuronasuma sus entradas por sus pesos y decide 1 o 0
Pesocuánto cuenta una entrada en la suma
Sesgoun número fijo que se suma siempre (bias en inglés)
Perceptrónuna sola neurona que aprende corrigiendo sus errores
Tasa de aprendizajeel tamaño de cada corrección (learning rate en inglés)rate = 0.5
Capa ocultaneuronas entre las entradas y la respuesta

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una neurona suma y decide

En la tabla de abajo, los pesos son 1 y 0,5 y el sesgo es -1. Una neurona recibe varias entradas. Multiplica cada una por su peso, suma los resultados y añade el sesgo.

Si el total pasa de 0, responde 1. Si no, responde 0. Un peso grande hace que esa entrada cuente mucho. Un peso negativo hace que la empuje hacia 0.

Ejemplo resuelto: una neurona que decide

CalorFin de semanaTotalRespuesta
00-1 + 0 + 0 = -10
01-1 + 0 + 0,5 = -0,50
10-1 + 1 + 0 = 00, porque 0 no pasa de 0
11-1 + 1 + 0,5 = 0,51

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Un perceptrón aprende de sus errores

El perceptrón empieza con todos los pesos a 0. Mira los ejemplos uno a uno y calcula el error: lo correcto menos su respuesta.

Si acierta, el error es 0 y nada cambia. Si falla, cada peso se mueve en la tasa de aprendizaje por el error por su entrada. El sesgo se mueve en la tasa por el error. Una vuelta entera por los ejemplos es una pasada.

Ejemplo resuelto: la primera pasada

EjemploRespuestaErrorPesos y sesgo después
0, 0, debe dar 000[0, 0] y 0
0, 1, debe dar 000[0, 0] y 0
1, 0, debe dar 000[0, 0] y 0
1, 1, debe dar 101[0,5, 0,5] y 0,5

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Una corrección a mano

Código: python
# Un día: calor (1) y fin de semana (1). Fue lleno (1).
inputs = [1, 1]
target = 1
weights = [0.0, 0.0]
bias = 0.0
rate = 0.5

total = bias
for n in range(len(inputs)):
    total = total + weights[n] * inputs[n]
guess = 0
if total > 0:
    guess = 1
error = target - guess

for n in range(len(inputs)):
    weights[n] = weights[n] + rate * error * inputs[n]
bias = bias + rate * error
print("respuesta:", guess, "error:", error)
print("pesos:", weights, "sesgo:", bias)
# Copia los pesos y el sesgo nuevos arriba y ejecuta otra vez.

Entrena un perceptrón con el año

Comando
docker exec jupyter python3 steps/perceptron.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Una neurona traza una sola recta

Una neurona separa los casos con una sola recta: a un lado responde 1 y al otro 0. Eso basta para «calor y fin de semana» y para «calor o fin de semana».

No basta para XOR, «uno de los dos, pero no ambos». Ninguna recta separa esos casos. Una capa oculta combina varias neuronas, y con ellas varias rectas. Así resuelve XOR.

Escribe esto en tu cuaderno: OR y XOR

Código: python
from sklearn.linear_model import Perceptron

X = [[0, 0], [0, 1], [1, 0], [1, 1]]
either = [0, 1, 1, 1]
differ = [0, 1, 1, 0]
# OR se separa con una recta; XOR no.
print(Perceptron(random_state=0).fit(X, either).score(X, either))
print(Perceptron(random_state=0).fit(X, differ).score(X, differ))

Escribe esto en tu cuaderno: una capa oculta

Código: python
from sklearn.neural_network import MLPClassifier

# Una capa oculta de 4 neuronas para XOR.
net = MLPClassifier(hidden_layer_sizes=(4,), solver="lbfgs", max_iter=1000, random_state=1).fit(X, differ)
print(net.score(X, differ))

Un error muy común

Advertencia

Mucha gente cree que una red más grande siempre es mejor. No lo es: más neuronas solo ayudan si los datos tienen más forma que aprender. Si no, la red tarda más y puede aprenderse el ruido de memoria. Prueba tamaños y júzgalos con los días guardados.

Tres tamaños de red con el año

Comando
docker exec jupyter python3 steps/network.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Para ir más lejos: la tasa de aprendizaje

En tu cuaderno, copia perceptron.py y cambia Perceptron(random_state=0) por Perceptron(random_state=0, eta0=0.1). eta0 es la tasa de aprendizaje.

Después prueba eta0=10. Compara los pesos, las pasadas y la exactitud con los de antes. ¿Qué cambia y qué no? Explica por qué, pensando en que los pesos empiezan en 0.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.