Francis Villatoro explica que las librerías estándar en Python utilizadas para implementar redes neuronales como PyTorch, TensorFlow y JAX no corrigen un problema numérico común.
…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 esto y lo arreglaba. Y resulta que no, que las librerías estándares en Python que se usan más para la implementación de redes neuronales como PyTorch, como TensorFlow, como JAX, no lo tienen implementado; no hacen esta corrección. Y claro, uno puede decir: bueno, pero esa corrección es poco relevante, bueno, poco relevante entre comillas, porque ahora se ha puesto de moda en todas las redes neuronales modernas. Todo lo que llaman apariencia de profundo, se utiliza una manera de estimar probabilidades para los resultados de la salida, que a partir de esas probabilidades yo calculo lo que llaman la pérdida, el error de la red neuronal y con ese error, hago un cálculo de una cosa que se llama el gradiente, la sensibilidad, de la salida a los parámetros de la red; modifico la red. Y cuando yo hago la operación más usada, se llama SoftMax. La idea es utilizar exponenciales. La idea es: la red, a partir de una entrada, me devuelve una salida, y las salidas son una serie de etiquetas que yo he convenido, una serie de números, pues yo qué…
Francis Villatoro explica cómo funciona el proceso de entrenamiento de una red neuronal, detallando la división del conjunto de datos en bloques y el uso del algoritmo de descenso del gradiente para modificar los pesos.
Habla: Francis VillatoroSignificado #4 · Palabras #5parámetros de matrices vectoresentrenamiento de la red neuronalajuste de parámetros durante entrenamientored neuronal multicapa villatorodatos de entrenamiento francis villatorosalida correcta comparada con iVooxerror para corregir parámetros reddescenso del gradiente modifica pesosred neuronal divide conjunto entrenamientoalgoritmo descenso gradiente calcula errores…a nadie se le ocurriera que esto podía ser relevante porque ya se sabía en el entrenamiento de redes neuronales. Muchas veces cuando vemos en libros, etc., la curva de las pérdidas, de la calidad del entrenamiento, del error que comete la red: La red es un Sistema en el que yo meto una entrada, obtengo una salida y en el proceso de entrenamiento la red tiene una serie de parámetros, muchos parámetros, una serie de matrices y vectores que caracterizan la dinámica, el comportamiento de la red neuronal multicapa. Cada capa tiene sus matrices y sus vectores. Yo meto una entrada y claro, yo tengo que ajustar, entrenar la red, los parámetros. Yo no sé cuáles son los parámetros correctos, entonces voy. metiendo entradas y las salidas las comparo con los datos de entrenamiento. Yo sé cuál es la salida correcta, pues comparo la salida de la red neuronal con la salida correcta y eso me permite determinar el error que yo uso para corregir el estado actual de los parámetros de la red. Yo opero en un conjunto de pasos de entrenamiento. Básicamente suelo dividir el conjunto de entrenamiento, que suele ser un conjunto grande, en una serie de bloques; y para cada bloque veo cuáles son las salidas de la red neuronal, calculo los errores y uso lo que se llama el gradiente, el algoritmo del descenso del gradiente. Ahora explicaré un poquito de qué va; y uso esos errores para modificar los pesos. Entonces, cada paso yo modifico los pesos y voy repitiendo. Estos pasos hasta que acabo con todo el conjunto de entrenamiento; en ese momento hablo de una época de entrenamiento y normalmente una red neuronal requiere múltiples épocas en las que voy pasando por todos los datos de entrenamiento. Una de las cosas que se…
Francis Villatoro explica que las librerías estándar en Python utilizadas para implementar redes neuronales como PyTorch, TensorFlow y JAX no corrigen un problema numérico común.
Habla: Francis VillatoroSignificado #2 · Palabras #1pytorch tensorflow jax redes neuronalespérdida error red neuronalgradiente sensibilidad salida parámetrosaparición de profundo estimar probabilidades…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 esto y lo arreglaba. Y resulta que no, que las librerías estándares en Python que se usan más para la implementación de redes neuronales como PyTorch, como TensorFlow, como JAX, no lo tienen implementado; no hacen esta corrección. Y claro, uno puede decir: bueno, pero esa corrección es poco relevante, bueno, poco relevante entre comillas, porque ahora se ha puesto de moda en todas las redes neuronales modernas. Todo lo que llaman apariencia de profundo, se utiliza una manera de estimar probabilidades para los resultados de la salida, que a partir de esas probabilidades yo calculo lo que llaman la pérdida, el error de la red neuronal y con ese error, hago un cálculo de una cosa que se llama el gradiente, la sensibilidad, de la salida a los parámetros de la red; modifico la red. Y cuando yo hago la operación más usada, se llama SoftMax. La idea es utilizar exponenciales. La idea es: la red, a partir de una entrada, me devuelve una salida, y las salidas son una serie de etiquetas que yo he convenido, una serie de números, pues yo qué…
Francis Villatoro explica cómo se determina la sensibilidad en redes neuronales mediante el cálculo del gradiente y cómo esta operación se simplifica gracias a algoritmos de diferenciación automática.
Habla: Francis VillatoroSignificado #1 · Palabras #2función exponencial para probabilidadespérdidas con estimación probabilísticagradientes de redes neuronales iVooxetiquetas numéricas arbitrarias transformadasgradiente con diferenciación automáticasoftmax y gradientes suman cerodiferencias finitas para calcular gradientesimplementación de redes neuronales softmax…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 numérica más o menos arbitraria, usando la exponencial he obtenido una estimación de tipo probabilidad. Y eso tiene ciertas ventajas porque cuando yo utilizo esas probabilidades para calcular las pérdidas, para calcular los errores de la red, los gradientes, es decir, cómo cada una de esas probabilidades varía, cuando yo varío un parámetro de la red, un peso o un sesgo, uno de los vectores que aparece en cada una de las capas, yo varío ligeramente ese valor y eso me modifica la salida. ¿Cuánto me modifica la salida? Más o menos, eso se llama la sensibilidad; eso se determina calculando el gradiente, calculando la derivada de la salida respecto a ese parámetro. Bien, pues cuando yo utilizo probabilidades con softmax, los gradientes suman cero. Entonces, calcular los gradientes es algo fácil; hoy día tenemos hasta algoritmos de diferenciación automática que da un software, un programa arbitrario que calculan los gradientes, pero muchas veces se calculan con diferencias finitas, pero mucha gente pues lo calcula directamente a mano porque son cosas muy sencillas de calcular cuando tengo bien controlada la red y no varío muchas cosas en la red, puedo calcularlos de forma analítica. Una 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…
Francis Villatoro explica las consecuencias de obtener valores constantes al calcular probabilidades en redes neuronales, lo que impide la corrección adecuada de los pesos durante el entrenamiento.
Habla: Francis VillatoroSignificado #14 · Palabras #14gradientes cero en redes neuronalescorrección de pesos entrenamiento iVooxefecto slingshot en redes pequeñasoscilaciones efecto onda…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 embargo, todos los demás. Además, cuando hago los gradientes respecto a todos los demás valores, valores incorrectos, sí corrijo esos valores. Lo que pasa es que ahora los gradientes no suman igual a cero porque me falta uno de ellos. La diferencia es pequeña, ¿vale? Sí, es pequeña, pero ya no es cero. Y esto que parece una cosa como de menor 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…
Francis Villatoro describe un problema observado durante el entrenamiento de redes neuronales, donde estas pueden volverse inestables y generar errores significativos.
Habla: Francis VillatoroPalabras #7errores del 200 en gradientesredes neuronales inestables villatoroentrenamiento de redes relativamente grandes…de memoria por relativamente pequeña, 50.000 millones de tokens, ¿eh? Han observado que aparece este tipo de fenómeno en el proceso de entrenamiento: cuando el entrenamiento tiene muchas épocas, llega un momento en que de repente se va de olla y se va. Y se desvía una barbaridad con errores enormes, errores en los gradientes que pueden llegar a ser del 200%, del 200%, 219% en algunos parámetros. Es una barbaridad, con lo que incluso en el entrenamiento de este tipo de redes relativamente grandes también se observa este fenómeno y la solución es tan sencilla como cambiar unas restas en un cierto lugar y corregirlas. Por cierto, este artículo del 28 de septiembre se publicó antes que el de DeepMind y utiliza la misma técnica de resolver estas diferencias cancelativas, o sea que se ha publicado esto varias veces. Qué curioso, Francis; deja que te pregunte por esto porque…
Francis Villatoro continúa explicando cómo la amplificación de errores relacionada con el caos determinista y la sensibilidad a las condiciones iniciales es otro fenómeno relevante en redes neuronales.
Habla: Francis VillatoroSignificado #10 · Palabras #3amplificación de errores en redes neuronalescaos determinista y condiciones inicialesalgoritmo de gradiente convergeredes neuronales comportamiento caóticosensibilidad condiciones iniciales redes neuronalescuencas de atracción atractores fractalesefecto mariposa caos determinista…no está discretizada a la hora de operar; la naturaleza actúa más o menos de manera analógica. Se refiere a que ese mecanismo que yo desconozco bien y no puedo argumentar, también produce una amplificación de los errores, entonces en ese sentido yo creo que La amplificación de los errores asociadas a caos deterministas y al hecho de que tenemos una sensibilidad con las condiciones iniciales, etc., es otro fenómeno y es relevante. En redes normales, por ejemplo, las redes normales se diseñan para que el algoritmo de gradiente converja, eso sí, asumiendo un número infinito de pasos, etc. Pero hay garantías de que ese tipo de no linealidad no aparece. Hay redes normales en las que se aprovecha ese tipo de normalidad, que tienen comportamiento caótico y tú aprovechas esa sensibilidad a las condiciones iniciales para permitir que la red almacene más de lo que debería almacenar, que las cuencas de atracción sean lo más pequeñas posibles de cada uno de los atractores y aunque su borde es muy fractal, que sean lo más pequeñas posibles y te metan la mayor cantidad posible de información. Ahí sí se puede introducir ese tipo de fenómenos de sensibilidad a la condición inicial, de efecto mariposa, caos determinista, etc. Pero eso es un reducto en el campo de las redes neuronales. La mayor parte de la gente no usa ese tipo de cosas porque son incontrolables. Tú no tienes garantías de que controles bien el asunto. En la naturaleza se dan, hay muchos fenómenos no lineales, pero…