Lo que nos enseña los 80 sobre convergencia 40 años después
- fjroar
- 30 nov 2024
- 4 Min. de lectura
Una de mis aficiones predilectas son los fractales, desde que los vería en la carrera allá por el año 97 – 98 siempre me han fascinado y ahora estoy retomando su estudio de mano de un libro que se publicó a principios de los 90 y que lleva por título Fractals for the classroom. Ya en esta época estaba bastante sólida la Teoría de los Fractales introducida por Benoit Mandelbrot en 1975 y que en 1982 publicó su famoso libro Fractal Geometry of Nature (que por cierto lo hojeaba bastante en aquellos años de carrera en la biblioteca y ahora se lo he pedido a los reyes).

Figura 1 Fotografía de la página 59 de la edición de 1992 del libro Fracta for the classroom
Pues bien, el primer libro que menciono bastante recomendable, comienza con un primer capítulo bastante sencillo de seguir y que recoge varios experimentos hechos con aparatos de finales de los 80 seguramente en los que se relaciona el tema fractal con la teoría del caos pero de lo que voy a tratar aquí es de un experimento muy sencillo que espero que todo el lector interesado pueda entender aunque no tenga formación matemática y que espero que le sorprenda.
En este libro se hace referencia al modelo de crecimiento población de Verhulst y que propone que, el crecimiento de la población en t debería ser proporcional a la diferencia entre el conteo de la población hasta el momento y el máximo tamaño alcanzable por dicha población, por tanto propone la siguiente fórmula de crecimiento:

Fuera de los usos de este modelo que también recibe el nombre de modelo logístico. Lo que me resultó sorprendente es lo que se observa en la figura 1 y es cómo una fórmula iterativa como la anterior que no parece muy complicada con valor inicial 0.01 y r = 3, diese con distintos aparatos (cuya única diferencia era que la Casio tenía hasta 10 cifras decimales y HP llegaba a 12) unas diferencias tan brutales con tan sólo 50 iteraciones, pero no sólo pasaba eso, sino que si se reorganizaban los factores de la anterior fórmula del siguiente modo equivalente:

Sucedía esto bajo una misma máquina Casio de la época:

Figura 2 Fotografía de la página 61 de la edición de 1992 del libro Fracta for the classroom
Esto me parecía aún más terrible porque ya las iteraciones 45 se parecen como un huevo a una castaña y visto esto pensé que en los 80, las máquinas eran lo que eran, pero que ahora ya, seguro, que estas cosas no pasan y mucho menos con mi querido R y por tanto me puse con mi moderno HP Notebook de 32 GB a ejecutar el siguiente código en R replicando esta última figura 2:
options(digits=17)
options(scipen=999)
r <- 3
p1 <- 0.01
p2 <- 0.01
for (i in c(1:100)){
p1 <- p1 + r p1 (1 - p1)
p2 <- (1 + r) p2 - r p2**2
}
print(p1)
print(p2)
Pues bien, si ejecuto lo anterior obtengo el siguiente resultado:

Si bien es cierto, que he llegado hasta la iteración 100, ya en la 50 la diferencia no era tan brutal y sólo variaba la segunda cifra decimal, pero a pesar de la potencia de la versión 64 bits de R, el panorama está un poco mal.
Claro, en este momento me pongo a pensar en la risa que les tiene que dar esto a los tontacos de python que odian de forma natural a los que programamos en R (¡Ojo! Hay gente que programa en python muy bien y no son nada tontaco y no odian a lo que programamos en R, a esos los aprecio) y que seguro piensan: “Esto en python no pasa” y que me debería pasar a su lado. Pues, la verdad es que se equivocan, a mí que también me gusta bastante python y para algunas cosas está mejor que R y para otras no, precisamente en este tema, no hay ningún tipo de mejora, y es que tanto R como Python están hechos sobre la misma base de lenguaje C y por tanto “chorpresa!!!”:

Tiene lugar el mismo resultado con la misma disparidad y los mismos decimales. Por tanto, Python no nos va a solucionar la papeleta en este sentido tampoco.
Sobre el ejemplo de la Figura 1 no tenía a mano ninguna calculadora programable (y me tendría que poner a recordar cómo se hacía), pero lo que sí puedo hacer es repetir, por ejemplo en R lo anterior con redondeos en un caso hasta la 10 cifra decimal y en el otro hasta la cifra 12 y observo que pasa lo siguiente:

Con lo que queda más que comprobado que la precisión de la máquina influye en el resultado final.
Así pues, habiendo visto lo anteior y dado todo el hype que veo a mi alrededor de diversos entendidos que nos hacen creer que estamos en una época donde la inteligencia artificial poco le falta para superar al humano, creo que no en todos los casos la convergencia de los algoritmos está suficientemente garantizada, además si lo anterior ocurre con modelos tan sencillos ¿Qué no ocurrirá con los actuales LLM, sin olvidar los modelos de analitica más avanzada tipo xgb y otros? Máxime si se hace uso por lo general de espacios multidimensionales y por tanto no es que las condicioines iniciales sean importantes, sino que como hemos visto, en estos casos la característica de la máquina también lo son.
Finalmente y para no extenderme más, el anterior modelo no es estable claramente con ese parámetro r, si se cambia, dicha inestabilidad a veces se soluciona y otras veces no, así pues, pruébese con r = 2 y todo lo anterior no habrá sido más que un mal sueño …
Comments