Las matemáticas de aprendizaje automático utilizan números reales, pero las computadoras son digitales. ¿Por qué es esto? ¿Podría ser diferente?

Problema I: aproximaciones

Las computadoras intercambian precisión con rango. Las representaciones de punto flotante se aproximan a un número real con un límite superior en el error de redondeo, también conocido como Machine Epsilon (macheps).

La aproximación flotante de 32 bits tiene un macheps máximo de 2 ^ -24.

(flotante en Java, flotante32 en Python)

La aproximación flotante de 64 bits tiene un macheps máximo de 2 ^ -53

(doble en Java, float64 en Python)

La mejor aproximación, pero no práctica, es la aproximación flotante de 128 bits que tiene un macheps máximo de 2 ^ -113

La mayoría de los investigadores prefieren float32 ya que el tiempo de entrenamiento depende en gran medida de ello. Una GPU NVIDIA Tesla K80 (figura anterior) puede realizar 8.74 TFlops / segundo con variables de precisión individuales (float32 / float); mientras que solo puede realizar 2.91 TFlops / segundo con doble precisión (float64 / double).

Nota: TFlops / segundo significa “Operaciones de punto flotante de Tera por segundo” = 10 ^ 12 * “Operaciones de punto flotante por segundo”. Es una medida de la capacidad del procesador.

Problema II: Underflow

Hay otro problema asociado con esta discrepancia (indicado en la pregunta). Los algoritmos de Machine Learning calculan probabilidades y algunas probabilidades tienden a ser muy pequeñas. Sin embargo, todavía necesitamos resultados muy precisos incluso en los casos en que las probabilidades son pequeñas. Tal vez hay una regla de decisión que depende de que una probabilidad muy pequeña sea mayor que otra probabilidad muy pequeña. Esta es la razón por la cual los algoritmos tienden a usar logaritmos como la minimización negativa de la probabilidad logarítmica en lugar de la minimización negativa de la probabilidad. La función de logaritmo es monotónica; por lo tanto, no altera las estadísticas de orden de sus entradas (dominio) en su salida (rango). Cuando deja de lado el logaritmo, puede encontrar un fenómeno llamado flujo inferior; que es básicamente la computadora que no puede capturar un valor que es más pequeño de lo que puede presentar.

Las computadoras no usan números. No son digitales, son binarios. Binario es lo suficientemente bueno para cualquier cosa. Las computadoras convierten los símbolos de ida y vuelta codificados en el potencial eléctrico en los cables. Solo hay dos, no diez como lo indica el dígito. Las computadoras son máquinas Turing universales, excepto que la cinta no es infinita. Los símbolos pueden ser cualquier símbolo, depende del diseñador agregarles significado, como la originalidad y el dominio, proporcionando algoritmos y codificaciones de almacenamiento. Tener que codificar cosas es donde las computadoras son las más limitadas en este momento.

Si bien la mayoría de las computadoras tienen una comprensión básica de la aritmética en números enteros, así como los números de coma flotante, lo hacen por conveniencia. Puede producir aritmética de enteros encadenando la lógica, como ‘y’, ‘no’ y ‘o’ en las secuencias de bits. Para una computadora, 1 + 1 = 2 porque la lógica dentro de ellos, parcialmente en cables y parcialmente en software, está configurada de modo que cuando entra un 1 y entra otro 1, devuelve 2.

No obtienen automáticamente las matemáticas y no sabrán que 2 = 1 + 1 por definición al ver 1 + 1 = 2 (a menos que los hagan correr hacia atrás en el tiempo de alguna manera). Simplemente están siguiendo las instrucciones en sus símbolos. Depende del programador dar esos saltos entre cómo se almacenan las cosas y lo que representan.

Pero sí, podríamos agregar hardware que diga ‘dada esta red neuronal y su estado, producir un símbolo de salida para este símbolo de entrada’. No cambia que la computadora pueda hacerlo sin el hardware. Pero hará que el proceso sea mucho más rápido, ya que no tendría que dividirlo en aritmética o lógica ni en nada que una computadora sepa hacer.

Los fabricantes de chips no los colocan en sus computadoras porque no es así como se usan la mayoría de las computadoras. Además, hay muchos más algoritmos que solo redes neuronales. Una adición reciente puso usb, bluetooth y wifi en el chip. Eso sí que es útil.

Utiliza números reales porque
int a = 3/5; resultará en cero. y hay muchos dividiéndose allí.
Siga el curso de Andrew Ng en Coursera

Y si su pregunta es sobre cómo se almacenan / aproximan los números reales en una computadora digital, lea esto en detalle
IEEE 754-1985 – Wikipedia

^ como resultado, no debe verificar la igualdad de los números reales, no siempre serán correctos debido a los errores de redondeo.