Búsqueda · 25 momentos en 19 episodios
Francis VillatoroBorja TosarJuan Carlos GilGastón GiribetIgnacio Crespopérdida de precisión al restarnúmeros con tres dígitos significativoscancelación catastrófica de dígitosnúmeros similares resta pérdida dígitosejemplo cancelación números 2 32x10-3pé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 ordenadorreescribir restas como multiplicacionescancelaciones catastróficas en números parecidosmétodos numéricos para evitar cancelacionessimulación de tesis con métodos numéricosfunción épsilon librería numéricarestas numéricas libreria iVooxa cuadrado menos b cuadradoprimeras mujeres programación década 194010 a la menos 11.0010 a la menos 1Francis Villatoro1.23 por 10 elevado a menos 25.32 por 10 elevado a 42.32 x 10^-3EinsteinEpsilondécada de los 1940Juan Carlos Gil64 bits
Resta números parecidos villatoro
Ep577: Planeta Enano; Errores en IAs; Romper Agujeros Negros; Habitabilidad Química; Virus y Monos
29 de octubre de 20264 momentos
Con
0:000:301:001:302:002:303:03
Francis Villatoro explica cómo al restar dos números muy parecidos se produce una pérdida de dígitos debido a las limitaciones de representación numérica.
…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, 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 tienen un tamaño parecido, pues a veces, por ejemplo, si tengo a menos b, pues puedo multiplicarlo por a más b y dividirlo por a más b, entonces arriba tengo a al cuadrado menos b al cuadrado, que lo mismo ya no son tan parecidos y eso hace una diferencia, o puedo multiplicarlo incluso por el mismo 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…
Significado #1 · Palabras #4
Francis Villatoro introduce la explicación de una diferencia cancelativa, planteando un escenario donde dos números muy similares se restan y cómo esto afecta al almacenamiento en ordenadores.
Habla: Francis VillatoroSignificado #15 · Palabras #5diferencia cancelativa en ordenadoresprocesadores de 64 bitsalmacenamiento finito de númerosnúmeros con mantisa y exponentealmacenamiento binario de númerosmantiza en binario iVooxbit de signo en números…La diferencia cancelativa es algo que parece algo tan obvio que hay que tener en cuenta y que todo el mundo se supone que lo tiene en cuenta, que a uno se sorprende de que prácticamente nadie lo tiene en cuenta. O sea, es de este tipo de cosas elementales. ¿Qué es la diferencia cancelativa? Imaginemos que tenemos dos números que son muy parecidos y yo los resto. Si yo tengo, claro, en el ordenador yo tengo que almacenar los números en un tamaño finito. Normalmente por defecto en los procesadores que estamos usando se trabaja con 64 bits, con 8 bytes. Entonces, en esos 64 bits hay que meter un número que tiene una mantiza y un exponente Un número, por ejemplo, 1,32 por 10 elevado a menos 14 El menos 14 es el exponente, por supuesto los números se almacenan en binario Y sería 2 elevado a menos el número que corresponda Pero bueno, para simplificarlo lo menciono en decimal Y tengo la mantiza, que es lo que multiplica a esa potencia Entonces cuando yo almaceno, almaceno la mantiza, que la mantiza siempre 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…
Francis Villatoro explica cómo al restar dos números muy parecidos se produce una pérdida de dígitos debido a las limitaciones de representación numérica.
Habla: Francis VillatoroSignificado #1 · Palabras #4pérdida de precisión al restarnúmeros con tres dígitos significativoscancelación catastrófica de dígitosnúmeros similares resta pérdida dígitosejemplo cancelación números 2 32x10-3pé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 ordenadorreescribir restas como multiplicacionescancelaciones catastróficas en números parecidosmétodos numéricos para evitar cancelacionessimulación de tesis con métodos numéricosfunción épsilon librería numéricarestas numéricas libreria iVooxa cuadrado menos b cuadradoprimeras mujeres programación década 1940…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, 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 tienen un tamaño parecido, pues a veces, por ejemplo, si tengo a menos b, pues puedo multiplicarlo por a más b y dividirlo por a más b, entonces arriba tengo a al cuadrado menos b al cuadrado, que lo mismo ya no son tan parecidos y eso hace una diferencia, o puedo multiplicarlo incluso por el mismo 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 transforma números enteros en probabilidades dentro de una red neuronal, utilizando la función exponencial para normalizar las puntuaciones asignadas a diferentes categorías.
Habla: Francis VillatoroSignificado #8función exponencial en redes neuronalestransformación números enteros probabilidades villatoronormalización puntuaciones categorías exponencial…o negativas. Entonces una operación que se utiliza, dada la salida a una red que está siendo entrenada y que los resultados de salida, que se llaman logics, digamos las puntuaciones que se dan a cada una de las categorías de los resultados que yo obtengo. pues esos son números enteros normalmente. Lo que hago yo es convertirlo en probabilidades metiendo la exponencial. Entonces yo, si tengo 1, menos 9 y 9, pues hago la exponencial de 1, la exponencial de 9 y la exponencial de menos 9. Pero fijaros, todo eso lo divido entre la suma de esas. exponenciales. Entonces, ¿cuál es el resultado? Cada numerito lo he convertido en un número entre 0 y 1 y la suma de los tres números es la unidad. Lo he convertido en probabilidades. He hecho una estimación probabilística y en lugar de tener una etiqueta…
Francis Villatoro explica una técnica para evitar problemas numéricos al usar la función Softmax en redes neuronales.
Habla: Francis VillatoroPalabras #9aritmética flotante y números pequeñostamaño de almacenamiento exponente insuficientearitmética simple 10 elevado a 80exponencial de menos 18 aritmética…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,…
