Saltar al contenido

lección 9

Entrenar una red de verdad (y compararla con honestidad)

Entrenar una red con MLPClassifier, por qué necesita datos escalados y abundantes, y la comparación honesta con un boosting que suele ganar.

⏱ 50 min

Ya sabes de qué está hecha una red: neuronas que ponderan y deciden, agrupadas en capas, encadenadas de modo que cada capa construye ideas más abstractas que la anterior. Lo que te faltaba era lo esencial, de dónde salen los pesos. Hasta ahora los pusimos a mano para ver el mecanismo, pero en una red de verdad nadie los escribe: los aprende ella sola a partir de los datos. A ese proceso se le llama entrenar, y es lo que vas a hacer hoy, en tu propio navegador, sobre datos reales. La buena noticia, y es un alivio después de tanta mística, es que una red se entrena con el mismo contrato que ya has usado una y otra vez: creas el modelo, llamas a un método para que aprenda de los datos de entrenamiento, y luego a otro para que prediga con datos nuevos. La fama de las redes no cambia nada de ese patrón.

Conviene que entiendas, al menos a grandes rasgos, qué ocurre durante ese entrenamiento, porque explica casi todo lo que viene después. La red arranca con los pesos puestos al azar, así que al principio predice fatal. Entonces mira sus errores (cuánto se aleja su predicción de la respuesta correcta en los datos de entrenamiento) y ajusta un poquito cada peso en la dirección que reduce ese error. Repite ese ajuste miles de veces, cada vez un poco mejor, como quien afina una radio girando el dial de a poco hasta que la emisora suena limpia. Ese ciclo de predecir, medir el error y corregir los pesos es el entrenamiento, y es iterativo por naturaleza: no se resuelve de un golpe, se va acercando paso a paso. Esa cualidad iterativa tiene una consecuencia práctica que marcará todo lo demás, y la veremos enseguida.

Compara este modo de aprender con el de un árbol, porque la diferencia explica mucho de su carácter. Un árbol se construye de una vez, decidiendo corte a corte cuál separa mejor las clases; cuando termina, está terminado. Una red, en cambio, no se construye de un golpe: se afina poco a poco, y en cualquier momento del proceso tiene una respuesta provisional que irá mejorando con las siguientes vueltas. Es la diferencia entre tallar una figura de madera (quitas y ya está) y moldear una de barro (empujas un poco, miras, empujas otro poco). Esa naturaleza de ir acercándose por aproximaciones es la raíz de casi todo lo peculiar de las redes: de que necesiten un número suficiente de vueltas, de que el punto de partida al azar importe, de que dos entrenamientos no den exactamente lo mismo. Guarda la imagen del barro, porque vuelve en cada una de las exigencias que vienen.

El entrenamiento es un bucle: predecir, medir el error, corregir los pesos, y repetir. Es iterativo, así que necesita un número suficiente de vueltas para converger.

## El contrato de siempre, con dos mandos nuevos

En la biblioteca que vienes usando, la red para clasificar se llama MLPClassifier. Las siglas MLP vienen de multilayer perceptron, en español perceptrón multicapa, que es el nombre técnico de la red que ya conoces por dentro: capas de neuronas encadenadas. Lo creas, lo entrenas con los datos de entrenamiento y predices con los nuevos, exactamente igual que un bosque o un boosting. Lo único distinto son un par de mandos propios que conviene conocer.

Que el contrato sea el mismo de siempre no es un detalle menor, es un alivio enorme y conviene saborearlo. Toda la fama intimidante de las redes se queda en nada cuando descubres que, desde fuera, se manejan con los mismos tres gestos que llevas usando con cada modelo: construir, aprender de los datos de entrenamiento, predecir con los nuevos. No hay una interfaz especial ni un ritual distinto. Esa uniformidad es una de las grandes virtudes de la biblioteca que usas: el día que quieras cambiar un bosque por un boosting o por una red, cambias la línea donde creas el modelo y el resto del código sigue igual. Esto te permite probar varios modelos sobre el mismo problema con muy poco esfuerzo, que es exactamente lo que necesitas para comparar con honestidad en lugar de casarte con el primero que se te ocurra. La red, por imponente que suene, entra en ese mismo molde sin pedir trato especial.

El primero es el tamaño y número de las capas ocultas. Al crear la red le dices cuántas capas ocultas quieres y cuántas neuronas en cada una. Más capas y más neuronas dan una red con más capacidad de captar relaciones complicadas, pero también más propensa a memorizar y más lenta de entrenar; menos, lo contrario. No hay un número mágico: depende del problema y de cuántos datos tengas, y se afina con la misma honestidad que ya conoces, probando y midiendo en datos que la red no vio. El segundo mando es el número máximo de iteraciones, que es el tope de vueltas que le das al ciclo de entrenamiento. Como el proceso es iterativo, si le das pocas vueltas la red se queda a medio aprender; hace falta darle las suficientes para que converja, es decir, para que llegue a afinar los pesos y deje de mejorar.

## Dos exigencias que las redes imponen y los árboles no

Aquí viene lo que de verdad distingue a una red de los modelos de árboles que ya dominas, y lo que explica por qué no es siempre la mejor elección. La primera exigencia es el escalado de las entradas. Una red suma entradas multiplicadas por pesos, y si una variable viene en miles (unos ingresos en euros) y otra en decenas (una edad), la de números grandes domina la suma solo por su magnitud, no porque lleve más información, y el entrenamiento se atasca intentando compensar esa descompensación. Por eso una red necesita que pongas todas las variables en una escala parecida antes de entrenar. Fíjate en el contraste: a un árbol esto le daba igual, porque decide con preguntas de orden (esta variable es mayor que tal valor) y la magnitud no le afecta. La red, al sumar y multiplicar, sí lo sufre.

Y esto reactiva una regla de honestidad que ya es tuya y que no puedes relajar por tratarse de una red: el escalado se aprende solo con los datos de entrenamiento. El escalador mira el entrenamiento para saber en qué rango se mueve cada variable, y luego aplica esa misma transformación a los datos de prueba sin volver a mirarlos. Si dejaras que el escalador viera también la prueba para calcular su rango, estarías colando información del examen en la preparación, y tu medida de acierto saldría inflada y mentirosa. La forma de no equivocarte nunca con esto es la de siempre: metes el escalado y la red dentro de una tubería, un Pipeline, que se encarga de aplicar cada paso solo donde toca. La tubería no es una comodidad opcional, es tu seguro contra una fuga silenciosa.

La segunda exigencia es más de fondo: las redes son hambrientas de datos. Una red tiene muchísimos pesos que ajustar (recuerda, uno por cada conexión entre neuronas, y hay muchas), y afinar tantos números con fiabilidad exige una buena cantidad de ejemplos. Con pocos datos, una red tiene tantos grados de libertad que se dedica a memorizar en lugar de aprender la regla general, y rinde peor que modelos más humildes. Esta es una de las razones por las que las redes tardaron décadas en despegar: la idea estaba, pero no había datos suficientes para alimentarla. Y es también la razón por la que, en muchos problemas cotidianos con tablas de tamaño modesto, una red no es la herramienta adecuada por mucho que suene bien.

Nunca entrenes una red sin escalar las entradas, y nunca ajustes el escalador mirando los datos de prueba. Lo primero deja a la red atascada, dominada por las variables de números grandes. Lo segundo infla tu acierto con una fuga invisible. Las dos cosas se resuelven de golpe metiendo escalado y red en un Pipeline, que aplica cada paso solo donde debe.

## La comparación honesta: la red no siempre gana

Y llegamos al punto que esta profesión no te deja saltarte, porque va de elegir la herramienta adecuada y no la más llamativa. Hay una creencia muy extendida de que, por ser lo más sofisticado, una red neuronal debería ganar a cualquier otro modelo. En datos en tablas (filas y columnas, que es con lo que trabajas la mayor parte del tiempo) eso es falso con una frecuencia incómoda. Una y otra vez, en problemas tabulares, un buen boosting iguala o supera a una red, y lo hace con muchísimo menos esfuerzo: sin escalar nada, sin ajustar capas, con los valores que trae de fábrica, y entrenando en una fracción del tiempo. Las redes brillan de verdad en datos no estructurados (imágenes, sonido, texto), donde las buenas variables son dificilísimas de construir a mano y la red las fabrica sola. En una tabla ordenada, esa ventaja se diluye y el boosting, más sencillo y más rápido, suele llevarse el gato al agua.

No es un detalle de competición, es una decisión con consecuencias de dinero y tiempo. Montar y afinar una red cuesta más horas de trabajo, más potencia de cálculo y más cuidado (el escalado, las iteraciones, el tamaño de las capas) que lanzar un boosting de serie. Si al final del esfuerzo la red empata con el boosting o lo supera por un pelo, has gastado mucho para ganar poco o nada, y encima te quedas con un modelo más difícil de explicar y de mantener. Un profesional no elige el modelo que más impresiona en una conversación, elige el que mejor resuelve el problema al menor coste, y en datos tabulares ese suele ser el boosting. Vas a comprobarlo tú mismo en el ejercicio: la misma tarea, la red con todo su cuidado contra un boosting de fábrica, y verás quién gana.

Para ser justos con las redes, conviene decir también dónde ganan de calle, porque entonces se entiende por qué toda la industria habla de ellas. Su terreno son los datos no estructurados: una imagen no es una tabla con columnas que signifiquen algo, es una rejilla de millones de píxeles donde la información está en cómo se relacionan unos con otros; el sonido es una onda; el texto es una secuencia de palabras cuyo sentido depende del orden. En esos datos, construir buenas variables a mano es dificilísimo o imposible, y es justo ahí donde la red saca su as: aprende sola, en sus capas, a fabricar las representaciones útiles que ningún humano sabría escribir a mano. Un boosting, que necesita columnas con sentido para funcionar, no tiene nada que hacer frente a una imagen en bruto. Así que la regla no es las redes son peores, sino cada herramienta en su terreno: la red reina en lo no estructurado, el boosting en la tabla ordenada.

En datos tabulares, red y boosting suelen empatar en acierto, pero el esfuerzo es incomparable: la red pide escalado, ajuste y tiempo; el boosting rinde de fábrica. Ganar poco a mucho coste no es ganar.

Un apunte sobre el determinismo, porque con las redes muerde más que con cualquier otro modelo que hayas usado. El entrenamiento arranca con pesos al azar y avanza con pasos que también llevan algo de azar, así que dos entrenamientos sin semilla fija dan redes distintas y aciertos distintos. Fija siempre la semilla. Y hay algo más sutil: como el proceso es iterativo y sensible, el acierto de una red puede bailar en los últimos decimales de una máquina a otra, incluso con la semilla puesta. Por eso, cuando compares redes, no te fíes de diferencias minúsculas en el tercer decimal: redondea a uno o dos, o mejor aún, saca conclusiones de verdades robustas (la red mejora al escalar, el boosting iguala o supera a la red) que no dependen de un decimal frágil. Esa prudencia con los números delicados es parte del oficio.

## Afinar las capas y las iteraciones sin pasarse ni quedarse corto

Volvamos a los dos mandos propios de la red, porque ajustarlos tiene su arte y los dos fallos opuestos se parecen a cosas que ya conoces. Empecemos por el tamaño de las capas, que gobierna la capacidad de la red, es decir, cuánta complejidad puede captar. Una red con pocas neuronas es como un árbol muy podado: tan simple que no llega a captar las relaciones de verdad útiles, y se queda corta por rigidez. Una red con muchísimas neuronas es como un árbol que crece sin límite: tan flexible que se amolda a cada capricho de los datos de entrenamiento y memoriza en lugar de aprender la regla general. Es el sobreajuste de siempre, con otro ropaje. El tamaño adecuado está en medio, y no se adivina: se busca probando varios y midiendo cuál generaliza mejor en datos que la red no vio, exactamente con la honestidad que ya aplicabas al afinar cualquier otro modelo.

El número de iteraciones es más sutil, porque su fallo tiene una forma peculiar. Como el entrenamiento es ese bucle de predecir, medir el error y corregir, cada iteración acerca un poco más la red a afinar sus pesos. Si cortas demasiado pronto, la red se queda a medias: no ha tenido tiempo de aprender lo que podía, y rinde peor de lo que debería no por falta de capacidad, sino por falta de vueltas. A eso se le llama no haber convergido. La señal de que te has quedado corto suele ser un aviso del propio entrenamiento diciéndote que alcanzó el tope de iteraciones sin terminar de afinar; cuando lo veas, el remedio es darle más vueltas. Darle demasiadas, por el contrario, solo gasta tiempo de más una vez que la red ya dejó de mejorar. El punto justo es el número de iteraciones a partir del cual el error deja de bajar.

El error cae deprisa al principio y luego se estanca. Cortar demasiado pronto deja la red a medio aprender; pasado el punto donde el error ya no baja, más iteraciones solo gastan tiempo.

Hay una tentación que conviene desarmar antes de que te muerda: pensar que, como la red es lo más sofisticado que has visto, bastará con hacerla más grande y entrenarla más tiempo para que acabe ganando a todo. No funciona así. Una red más grande entrenada más tiempo sobre pocos datos no aprende mejor la regla general; aprende mejor a memorizar el entrenamiento, que es justo lo contrario de lo que quieres. La potencia de una red solo se convierte en acierto real cuando hay datos suficientes para alimentarla; sin ellos, agrandarla es echar más leña a la hoguera equivocada. Esta es la trampa en la que caen quienes creen que la solución a un modelo que no acierta es siempre un modelo más grande. A veces el modelo más grande es el problema.

Regla práctica para el día a día: ante un problema nuevo con datos en tablas, empieza por un boosting de serie y haz de él tu línea base. Solo plantéate una red si tienes muchísimos datos, si el boosting se queda claramente corto, o si tus datos no son una tabla sino imágenes, sonido o texto. Elegir la herramienta por el problema, y no por su fama, es lo que separa a un profesional de alguien deslumbrado por la última palabra de moda.

Ya sabes entrenar una red de verdad y, lo que importa más, sabes cuándo no vale la pena molestarse. Pero hay un territorio donde las redes no es que ganen, es que no tienen rival serio: el de las imágenes, el sonido y el texto. Para entender por qué, hace falta ver una pieza nueva que esas redes llevan dentro y que las de hoy no tenían. Esa pieza se llama convolución, y lo mejor es que, aunque entrenar la red entera que la usa quede fuera del alcance de tu navegador, la convolución en sí la puedes ver funcionar con tus propios ojos. Es lo que viene a continuación.

Regístrate para guardar tu progreso.