Francis Villatoro explica cómo los números deben ser truncados o redondeados para caber dentro de un tamaño determinado y diferencia entre precisión y exactitud en la aritmética numérica.
…se almacena en binario empezando con un 1, con lo que todos los números es 1.cosas, luego ese bit de 1 no se almacena, lo que se almacena ahí es el signo, positivo o negativo del número y meto, digamos, el resto de los dígitos de la mantiza y el exponente. Pues lo que ocurre es que, claro, todo número ha de ser truncado o redondeado para que quepa en ese tamaño. Cuando yo tengo dos números, el tamaño de esa mantiza es lo que se llama la precisión del número. La precisión en la aritmética numérica, en la aritmética flotante, no es lo mismo que la exactitud. La precisión es solamente el tamaño en el que yo quepo. Hace años se utilizaban aritméticas más pequeñas; en lugar de 64 bits se utilizaban 32 bits. Eso es lo que se llama coma simple, números flotantes en coma simple. E incluso hoy en día en redes neuronales se ha propuesto. El uso de aritméticas mucho más limitadas, con mantillas muy cortas, con muy pocos exponentes y que sorprendentemente están dando, sobre todo en problemas de no gran número de datos; no estamos hablando de los grandes modelos de lenguaje de las grandes empresas de IA, sino en modelos más pequeños, están dando muy buenos resultados, sorprendentemente. Eso para almacenar lo que es la red, todos los parámetros de la red. Cuando yo resto dos números muy parecidos, yo pierdo precisión. Vamos a ver el ejemplo más sencillo: Tres dígitos significativos. Números del tipo 1.23 por 10 elevado a menos 2 o 5.32 por 10 elevado a 4. Tengo tres dígitos. Yo puedo representar en tres dígitos mi número. Si yo tengo dos números, pi y el doble de pi, y lo resto, la diferencia tiene infinitos dígitos. Yo la puedo escribir con esos tres dígitos significativos pues la diferencia de Dos números, yo qué sé, 2.32 por 10 a la menos 3. Pero ¿qué pasa cuando yo resto dos números? Si yo resto dos números que son parecidos, yo pierdo dígitos. Eso se llama cancelación catastrófica. Si yo cojo por el número 1.00, el 1, por exponente elevado a 0,…
Francis Villatoro explica cómo los números deben ser truncados o redondeados para caber dentro de un tamaño determinado y diferencia entre precisión y exactitud en la aritmética numérica.
Habla: Francis VillatoroSignificado #2 · Palabras #1truncado redondeado para caber tamañoprecisión aritmética flotanteexactitud no es precisiónprecisión y exactitud aritmética numéricaaritméticas de 32 bits coma simpleredes neuronales con coma simplearitméticas limitadas en ia pequeñapérdida de precisión al restarnúmeros con tres dígitos significativos…se almacena en binario empezando con un 1, con lo que todos los números es 1.cosas, luego ese bit de 1 no se almacena, lo que se almacena ahí es el signo, positivo o negativo del número y meto, digamos, el resto de los dígitos de la mantiza y el exponente. Pues lo que ocurre es que, claro, todo número ha de ser truncado o redondeado para que quepa en ese tamaño. Cuando yo tengo dos números, el tamaño de esa mantiza es lo que se llama la precisión del número. La precisión en la aritmética numérica, en la aritmética flotante, no es lo mismo que la exactitud. La precisión es solamente el tamaño en el que yo quepo. Hace años se utilizaban aritméticas más pequeñas; en lugar de 64 bits se utilizaban 32 bits. Eso es lo que se llama coma simple, números flotantes en coma simple. E incluso hoy en día en redes neuronales se ha propuesto. El uso de aritméticas mucho más limitadas, con mantillas muy cortas, con muy pocos exponentes y que sorprendentemente están dando, sobre todo en problemas de no gran número de datos; no estamos hablando de los grandes modelos de lenguaje de las grandes empresas de IA, sino en modelos más pequeños, están dando muy buenos resultados, sorprendentemente. Eso para almacenar lo que es la red, todos los parámetros de la red. Cuando yo resto dos números muy parecidos, yo pierdo precisión. Vamos a ver el ejemplo más sencillo: Tres dígitos significativos. Números del tipo 1.23 por 10 elevado a menos 2 o 5.32 por 10 elevado a 4. Tengo tres dígitos. Yo puedo representar en tres dígitos mi número. Si yo tengo dos números, pi y el doble de pi, y lo resto, la diferencia tiene infinitos dígitos. Yo la puedo escribir con esos tres dígitos significativos pues la diferencia de Dos números, yo qué sé, 2.32 por 10 a la menos 3. Pero ¿qué pasa cuando yo resto dos números? Si yo resto dos números que son parecidos, yo pierdo dígitos. Eso se llama cancelación catastrófica. Si yo cojo por el número 1.00, el 1, por exponente elevado a 0,…
Francis Villatoro explica cómo al restar números muy parecidos, como 0.99 y 0.999, la pérdida de dígitos significativos durante el cálculo en memoria resulta en un número con solo un dígito significativo: 0.001.
Habla: Francis VillatoroSignificado #4 · Palabras #9pérdida de dígitos representación numéricalimitaciones iVoox tres dígitosresta números parecidos villatoropérdida de dígitos significativos iVooxerror enorme en resta memoriaaritmética exacta y precisióndiferencia cancelativa ordenador…sé, 2.32 por 10 a la menos 3. Pero ¿qué pasa cuando yo resto dos números? Si yo resto dos números que son parecidos, yo pierdo dígitos. Eso se llama cancelación catastrófica. Si yo cojo por el número 1.00, el 1, por exponente elevado a 0, o sea, el número 1. 1.00, y de resto el número 9.999. Perdón, estamos tomando tres dígitos: 9.99 por 10 a la menos 1, es decir, el 0,999. Yo sé que la diferencia va a ser 0.0001, pero no me cabe en tres dígitos; en tres dígitos como mucho puedo poner un 1, 1.0010 a la menos 1 claro, si en realidad el número que yo estaba restando no Era 0,99, sino que era 0,999, sino que era 0,999, 8764321 pero que lo he redondeado a 0,99. Cuando yo hago la resta en memoria, lo que me queda es un número que tiene un solo dígito significativo: 0,001. El resto de los dígitos se han perdido; tengo un error enorme. Me cabrían si yo hubiera calculado con aritmética exacta o con mayor número de dígitos significativos; esa diferencia me habría dado cuenta de que tengo dígitos que puedo poner ahí, pero no los puedo poner porque el ordenador no lo sabe. Esos dígitos se han perdido. Esta diferencia cancelativa aparece. cada vez que yo resto dos números parecidos y hay mecanismos para evitar estas cancelaciones catastróficas. Hay mecanismos que te permiten ciertas restas reescribirlas sin que haya una resta. Básicamente la idea es que cuando yo tengo que restar dos cosas que…
Juan Carlos Gil y Francis Villatoro discuten estrategias para evitar problemas al realizar restas numéricas, como comparar números o usar la función épsilon de una librería numérica.
Habla: Juan Carlos GilSignificado #17función épsilon librería numéricarestas numéricas libreria iVooxa cuadrado menos b cuadradoprimeras mujeres programación década 1940…número y elevar al cuadrado. Hay maneras de eliminar esas restas y eso está muy estudiado en todos los libros de métodos numéricos En sistemas modernos lo que se puede hacer, estaba mirando el código de mi tesis de simulación mientras hablabas y ahí lo tengo Puedes comparar los dos números, puedes comparar la diferencia de los dos números respecto del épsilon de la función Epsilon que te da la librería numérica que la estás tratando. Y si aquello se dispara o produce un error, entonces sabes que no puedes hacer la resta. Porque hacer lo que tú dices, calcular A cuadrado menos B cuadrado dividido por A más B, pues empieza cuando tienes que hacer muchas restas, empieza a ser caro, obviamente. Hay opciones más caras, menos caras, pero es verdad. O sea, solo lo aplicas en principio cuando se ve que es necesario. Esto es conocido desde que hay bits, vamos. Desde que hay ordenadores, desde que las primeras mujeres empezaron a programar en la década de los 1940. Y entonces esto es un problemita que aparece en muchas circunstancias y aparece, por ejemplo, en redes neuronales. Y es una cosa que uno, yo, que he dado clase de método numérico durante 30 años, pues siempre he pensado que en redes neuronales la gente sabía…
Francis Villatoro explica cómo la diferencia de magnitud entre números puede llevar a problemas numéricos al comparar valores en aritmética flotante.
Habla: Francis VillatoroSignificado #7 · Palabras #4función softmax y exponencialeslogaritmos neperianos en softmaxaritmética flotante y órdenes de magnitudaritmética flotante y números pequeñostamaño de almacenamiento exponente insuficientearitmética simple 10 elevado a 80exponencial de menos 18 aritmética…manera de verificar que lo he hecho bien es comprobar que la suma de los gradientes es exactamente cero. Entonces, bueno, softmax una de las ventajas que tiene es que me permite verificar mi implementación de la red tanto en entrenamiento como en ejecución. Bien, entonces Sofmat es muy utilizado, muy muy utilizado. Pero Sofmat hemos dicho que introduce exponenciales. ¿Qué pasa con estos tres numeritos? Tengo tres numeritos que parecen muy sencillitos: uno, nueve y menos nueve. ¿Pero qué pasa con la exponencial de nueve respecto a la exponencial de menos nueve? Hay dieciocho órdenes de magnitud de diferencia. Se utilizan logaritmos, normalmente logaritmos neperianos, pero bueno, imaginemos que fueran logaritmos en base 10: serían 18 órdenes de magnitud, es una barbaridad, ¿por qué? Porque si utilizo una aritmética flotante, una aritmética numérica, por Ejemplo, coma simple, ya esa diferencia es tan grande que cuando comparo un número con el otro, el más pequeño es prácticamente cero y se va, no lo tengo en cuenta. Aquí normalmente se suele, claro, para evitar este tipo de grandes saltos en magnitud, sobre todo evitar que la exponencial se me salga, porque la exponencial 10 elevado a 200, 10 elevado a 300 en aritmética doble y 10 elevado a 80 o por ahí en aritmética simple ya se me salen, se me salen desde el tamaño que puedo almacenar, no tengo el exponente suficientemente grande. Entonces para evitar eso lo que se hace. Es restar el máximo de los valores de los logits, en mi caso eran 1 menos 9, 9. El máximo es 9, resto 9, entonces el 9 lo convierto en 0; la exponencial de 0 vale 1 y el 1 lo convierto en menos 8. La exponencial de menos 8 es un número pequeñito, pero bueno, está bien comparado con 1, pero la exponencial del otro menos 9 ahora es la exponencial de menos 18 y la exponencial de menos 18 en mucha aritmética podría ser 0. Y si usáis aritmética doble, pues pongamos entonces números del orden de 64, que yo tengo 400 categorías y las he ordenado entre el 1 y el 400. Ya tengo una diferencia enorme, 400 órdenes de magnitud cuando aplique las exponenciales. Eso hace que cuando yo aplique las exponenciales, algunos números pequeños desaparecen,…
Francis Villatoro explica cómo el cálculo de probabilidades en redes neuronales puede llevar a resultados constantes debido a la magnitud relativa de los números.
Habla: Francis VillatoroSignificado #12cálculo probabilidades redes neuronalesnúmeros pequeños suman cero relativogradientes cero aritmética usada…Pero en el entrenamiento yo trato de calcular esos gradientes para que la respuesta correcta de la red neuronal, claro, la respuesta correcta tiene asociado el mayor logik, es decir, la mayor probabilidad, es decir, con esta normalización la probabilidad Igual a 1 y los demás tienen probabilidades muy pequeñas. Hay circunstancias en las que todas las probabilidades de los demás son muy pequeñas, con lo que cuentan como si fueran cero. Porque yo tengo un número que es 1 dividido entre ese número 1 más todos los demás números. Pero los demás números son tan pequeños que suman 0. Son 0 relativo al 1 en el tamaño de la aritmética que yo estoy usando. El resultado final es que obtengo 1 dividido entre 1. Pero claro, 1 dividido entre 1 es un valor constante. Cuando calculo los gradientes, los gradientes son 0 y. entonces cuando yo tendría que corregir en el entrenamiento los pesos para que se ajustara mejor la red, resulta que no puedo corregir el gradiente asociado al valor correcto; no lo puedo corregir porque todos los gradientes son cero y puedo corregir, sin…
Francis Villatoro explica el origen del 'efecto tirachinas', una oscilación observada en experimentos con redes neuronales, que resulta ser causada por problemas de aritmética en cálculos con exponenciales y logaritmos.
Habla: Francis VillatoroPalabras #3efecto tirachinas en redes neuronalesaritmética causa efecto tirachinascancelaciones catastróficas exponenciales logaritmosreescribir logaritmos funciones alternativas…importancia, son cositas pequeñas, no importa; lo que provoca se ha observado en los experimentos que han mostrado con redes relativamente pequeñas, es que aparezcan esas oscilaciones: esas oscilaciones que se le llamaban el efecto onda, el efecto slingshot. Eso en español se le llama también, ¿cómo se le llama? Tirachinas, ¿no? Tirachina, exactamente; el efecto tirachina, es decir, una cosa que no se sabía muy bien qué causa tenía, resulta que la causa es la aritmética, las cancelaciones catastróficas, la aritmética por ordenador en ese tipo de operaciones que se trabajan con exponenciales y con logaritmos y cuya solución, que viene en todos los libros de texto, es trivial: es cambiar ligeramente la manera en que escribes los logaritmos. Porque tienes que aplicar logaritmos y entonces tú puedes reescribir los logaritmos utilizando funciones alternativas al logaritmo y la exponencial. Hay funciones como el logaritmo de 1 más x, que es una función que te garantiza que funciona; está implementada en la máquina de tal manera que funciona incluso cuando x está muy próximo a la unidad. En lugar de tú evaluar, hacer una resta entre dos números y…