Programar o aprender
¿Qué cambia cuando una máquina aprende en lugar de seguir reglas?
Lección completa
Si quieres:
Llega un correo y, en un segundo, sabes si es spam. Ahora intenta explicarle a una computadora cómo lo sabes.
Sin voz: la lección avanza sola con subtítulos.
La voz de esta lección está en preparación: por ahora avanza sola con subtítulos.
Modo revisiónComentar este pasoTerminé la lección
Qué lograrás
- Explicar la diferencia entre programar (reglas + datos → respuestas) y aprender (datos + respuestas → reglas).
- Distinguir entrenar de usar un modelo, e identificar en él los parámetros donde guarda lo aprendido.
- Reconocer por qué un modelo se juzga por lo que acierta con casos nuevos y no con los ejemplos que usó para aprender.
Ideas clave
- Programar es escribir reglas: reglas + datos → respuestas. Aprender invierte el flujo: datos + respuestas → reglas.
- Un modelo es una forma de regla con números ajustables, los parámetros. Entrenar es buscar esos números a partir de ejemplos con respuesta.
- Usar un modelo ya entrenado (inferencia) es aplicar sus parámetros fijos a un caso nuevo. En ese momento no aprende nada.
- Lo que importa es generalizar: acertar con casos nuevos. Medir con los mismos ejemplos del entrenamiento suele dar una cifra optimista.
- El modelo aprende lo que muestran los ejemplos: si están mal anotados o sesgados, la regla aprendida sale torcida.
Lo que mucha gente cree
Creencia común Una máquina que aprende lo hace sola: se programa a sí misma sin que nadie le diga nada.
Lo correcto Alguien decide qué medir, reúne y anota los ejemplos, elige la forma del modelo y comprueba el resultado con casos nuevos. La máquina solo busca los números.
Compruébalo
Cuatro preguntas. Sin nota ni cuenta: sirven para ver si la idea quedó.
Por dentroPara quien quiere las fórmulas y el código. No hace falta para seguir el curso.
Dos flujos de información
Programar es construir una función que, dadas las reglas y los datos, produce las respuestas:
Aprender invierte el papel de los datos y de las reglas: se parte de ejemplos con su respuesta y se busca la regla.
Aquí «reglas» significa un modelo con parámetros , elegidos para que se equivoque lo menos posible con los ejemplos. Una definición clásica, de Tom Mitchell (1997): un programa aprende de la experiencia respecto de una clase de tareas y una medida de desempeño si su desempeño en , medido con , mejora con . En la lección, es clasificar correos, son los treinta ejemplos con respuesta y es la exactitud con correos nuevos.
El modelo de la lección
Cada correo se resume en dos medidas, (enlaces) y (% de mayúsculas). El modelo calcula un puntaje y decide por su signo:
Los parámetros son y la frontera es una recta. Para entrenar, el puntaje se convierte en probabilidad con y el error se mide con la entropía cruzada sobre los ejemplos, con para spam y para normal:
Cada paso mueve los parámetros en contra del gradiente, (lección 4). En la escena: , 300 pasos y los 30 ejemplos, con las medidas estandarizadas, y , y un punto de partida arbitrario. El resultado, en las unidades originales, es , y . La exactitud es aciertos entre total: 27 de 30 con los ejemplos y 52 de 60 con los nuevos. Los datos son sintéticos, inventados para ilustrar; no son correos reales.
La regla a mano de la lección, «spam si o », tampoco es gratuita: también tiene parámetros, los dos umbrales. Aprender es dejar que los datos los fijen en lugar de ajustarlos a ojo.
Por qué la cifra con los ejemplos engaña
La exactitud medida con los mismos ejemplos que sirvieron para ajustar es, en promedio, optimista. En la lección, la mejor de las reglas que permiten los deslizadores acierta 28 de los 30 ejemplos (); hay seis empatadas y, con los 60 correos nuevos, esas seis aciertan entre 47 y 52 ( a ). Entre las 84 reglas que aciertan 24 o más de los 30, 58 bajan con los nuevos, 16 suben y 10 quedan igual; el cambio medio es de puntos porcentuales. Es una tendencia, no una ley: con solo 60 correos nuevos cada cifra es ruidosa, y una regla afinada con cuidado puede aguantar («enlaces o mayúsculas » acierta 27 de 30 y 54 de 60). Cuantas más opciones se prueban sobre los mismos datos, más se ajusta uno al azar de esos datos.
Con pocos ejemplos pasa algo parecido. Con 4 ejemplos, el modelo acierta los 4 que vio y 48 de los 60 nuevos (); con los 30, acierta 27 de 30 () y 52 de 60 (): las dos cifras se acercan. Separar entrenamiento, validación y prueba, y medir bien, es el tema de la lección 10.
Samuel y las damas (1959)
El nombre machine learning se asocia a Arthur L. Samuel, que lo usa en el título de «Some Studies in Machine Learning Using the Game of Checkers» (IBM Journal of Research and Development, vol. 3, n.º 3, julio de 1959). Su programa, en una IBM 704, elegía jugadas mirando varias jugadas por delante y puntuaba cada posición del tablero con un «polinomio lineal», en sus palabras: una suma ponderada de rasgos del tablero. En una de sus dos formas de aprendizaje (la «generalización») el programa determinaba el signo y la magnitud de los coeficientes que multiplican esos rasgos y escogía qué términos usar: la misma forma de modelo que en esta lección, aunque con otro fin (puntuar posiciones, no clasificar). En la versión que describe había 38 términos, además del de ventaja de piezas, de los que 16 estaban activos a la vez. El resumen afirma que una computadora puede programarse para aprender a jugar mejor que la persona que escribió el programa, en 8 o 10 horas de juego de la máquina y dadas solo las reglas del juego, un sentido de dirección y una lista redundante e incompleta de parámetros. Y el propio artículo plantea el objetivo: programar las computadoras para que aprendan de la experiencia «debería eliminar con el tiempo la necesidad de buena parte de este esfuerzo de programación detallada» (traducción nuestra). La frase muy repetida «el campo de estudio que da a las computadoras la capacidad de aprender sin ser programadas explícitamente» se le atribuye con frecuencia, pero no figura en ese artículo.
Un caso real: filtrar correo basura
En 1998, Sahami, Dumais, Heckerman y Horvitz estudiaron cómo construir filtros de correo basura de forma automática. Señalan que las reglas escritas a mano suponen usuarios capaces de construirlas y deben ajustarse sin cesar a medida que cambia el correo basura, y proponen en cambio aprender de los mensajes del propio usuario. Su clasificador probabilístico (bayesiano ingenuo) combinaba el texto del mensaje con rasgos propios del problema, como el porcentaje de caracteres no alfanuméricos del asunto. Subrayan además que clasificar como basura un correo legítimo suele costar mucho más que dejar pasar uno de basura; por eso solo marcaban un mensaje como basura si su probabilidad superaba el 99.9 %.
En código
import math
# (enlaces, % de mayúsculas, es_spam)
datos = [(0, 5, 0), (1, 8, 0), (2, 10, 0), (3, 7, 0),
(4, 20, 1), (6, 25, 1), (7, 15, 1), (9, 30, 1)]
def puntaje(w1, w2, b, enlaces, mayus):
return w1 * enlaces + w2 * mayus + b
w1 = w2 = b = 0.0 # parámetros: se empieza con ceros
eta = 0.1 # tamaño del paso
for _ in range(2000): # entrenar: muchas pasadas por los ejemplos
g1 = g2 = gb = 0.0
for enlaces, mayus, y in datos:
z = puntaje(w1, w2, b, enlaces / 10, mayus / 100) # medidas a escala 0-1
p = 1 / (1 + math.exp(-z)) # probabilidad de spam
e = p - y # cuánto se equivoca
g1 += e * enlaces / 10
g2 += e * mayus / 100
gb += e
n = len(datos)
w1 -= eta * g1 / n
w2 -= eta * g2 / n
b -= eta * gb / n
print(round(w1, 1), round(w2, 1), round(b, 1)) # pesos en la escala 0-1 de las medidas
# usar: parámetros fijos, solo aritmética
for enlaces, mayus in [(1, 6), (8, 12), (5, 30)]:
s = puntaje(w1, w2, b, enlaces / 10, mayus / 100)
print((enlaces, mayus), round(s, 1), 'spam' if s > 0 else 'normal')
# 7.7 2.8 -3.3
# (1, 6) -2.3 normal
# (8, 12) 3.3 spam
# (5, 30) 1.5 spam
# Estos 8 ejemplos se separan del todo: con más pasos los pesos seguirían creciendo;
# 2000 bastan para clasificarlos bien.
Lo que viene
En la lección 2 veremos cómo cualquier dato (una imagen, un sonido, un texto) se convierte en números para poder usarse como ; en la 3, cómo se mide el error de un modelo; y en la 4, cómo se ajustan los parámetros paso a paso (el descenso del gradiente que aquí solo se vio actuar). El modelo de esta lección, una suma ponderada que decide por su signo, es en esencia una neurona artificial (lección 5).
Lente de decisión
Qué significa esta idea si tu trabajo es decidir, no programar.
- Aprender de datos conviene cuando la regla es difícil de escribir, hay muchos ejemplos con respuesta y algún error es tolerable. Si la ley o un procedimiento fijan la regla y un error es inaceptable, escribe la regla.
- Todo parte de ejemplos con respuesta: pregunta quién los anotó, cuántos son y si se parecen a los casos reales. Si están mal anotados o sesgados, el modelo aprende ese error, como vimos con cuatro etiquetas torcidas.
- Exige la cifra de acierto medida con casos que el modelo nunca vio, no con los datos de entrenamiento. Una demostración con los mismos datos del ajuste no dice cómo funcionará en la operación real.
- Separa costos y errores: entrenar es un gasto grande y poco frecuente; usar el modelo es un gasto pequeño que se repite en cada consulta. Y no todos los errores cuestan igual: marcar como spam un correo legítimo suele costar más que dejar pasar uno de spam, y así lo planteaban ya Sahami y colaboradores en 1998.
Términos de la lección
- Aprendizaje automático Enfoque en que una computadora obtiene las reglas a partir de ejemplos en lugar de que alguien las escriba. El término se asocia a Arthur Samuel (1959).
- Datos de entrenamiento Ejemplos, cada uno con su respuesta correcta, con los que un modelo ajusta sus parámetros.
- Modelo Una forma de regla con números ajustables. Una vez entrenado, es la regla aprendida.
- Generalización Acertar con casos nuevos, que no se usaron para entrenar. Es lo que de verdad se quiere de un modelo.
- Parámetro Cada uno de los números que un modelo ajusta al entrenarse y en los que guarda lo aprendido.
- Inferencia Usar un modelo ya entrenado para responder ante un caso nuevo, con los parámetros fijos.
Transcripción completa
Fuentes
- Samuel, A. L. (1959). Some Studies in Machine Learning Using the Game of Checkers
- Mitchell, T. M. (1997). Machine Learning (McGraw-Hill)
- Sahami, M., Dumais, S., Heckerman, D., Horvitz, E. (1998). A Bayesian Approach to Filtering Junk E-Mail (AAAI-98 Workshop on Learning for Text Categorization, WS-98-05)
- Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning, capítulo 5: Machine Learning Basics
ComentariosConversación pública de esta lección: dudas, datos por revisar, ideas.
Los comentarios viven en GitHub Discussions, en el repositorio público del curso; para escribir se necesita una cuenta de GitHub. Se cargan desde giscus.app al abrir esta sección. Las personas que revisan el curso los leen, y si un cambio se acepta, se aplica en los dos idiomas. Abrir el hilo en GitHub