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
| Palabra | Qué significa | Ejemplo |
|---|---|---|
| Neurona | suma sus entradas por sus pesos y decide 1 o 0 | |
| Peso | cuánto cuenta una entrada en la suma | |
| Sesgo | un número fijo que se suma siempre (bias en inglés) | |
| Perceptrón | una sola neurona que aprende corrigiendo sus errores | |
| Tasa de aprendizaje | el tamaño de cada corrección (learning rate en inglés) | rate = 0.5 |
| Capa oculta | neuronas 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
| Calor | Fin de semana | Total | Respuesta |
|---|---|---|---|
| 0 | 0 | -1 + 0 + 0 = -1 | 0 |
| 0 | 1 | -1 + 0 + 0,5 = -0,5 | 0 |
| 1 | 0 | -1 + 1 + 0 = 0 | 0, porque 0 no pasa de 0 |
| 1 | 1 | -1 + 1 + 0,5 = 0,5 | 1 |
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
| Ejemplo | Respuesta | Error | Pesos y sesgo después |
|---|---|---|---|
| 0, 0, debe dar 0 | 0 | 0 | [0, 0] y 0 |
| 0, 1, debe dar 0 | 0 | 0 | [0, 0] y 0 |
| 1, 0, debe dar 0 | 0 | 0 | [0, 0] y 0 |
| 1, 1, debe dar 1 | 0 | 1 | [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
# 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
docker exec jupyter python3 steps/perceptron.pySe 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
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
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
docker exec jupyter python3 steps/network.pySe 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.