¿Dónde es importante la doble precisión en el aprendizaje profundo?

Cuando intentas rastrear y derribar cohetes balísticos.

¿QUÉ?

Aquí está la historia.

MIM-104 Patriot es un sistema de misiles tierra-aire utilizado por el Ejército de EE. UU. El 25 de febrero de 1991, en Dhahran, un misil iraquí R-300 voló directamente a un cuartel estadounidense, matando a 28 e hiriendo a 96 porque Patriot había fallado.

Esto sucedió debido a un error de redondeo en el software, que utilizaba enteros de 24 bits para la hora del sistema, introduciendo un error de ~ 0.000000095 segundos cada 0.1 segundos. Después de 100 horas de trabajo, un Patriot tenía 0,34 segundos de error en el tiempo de su sistema.

R-300 vuela a una velocidad de 1676 metros por segundo, lo que le da 569.84 metros por 0.34 segundos; después de tal error de cálculo, el misil queda fuera del alcance efectivo de Patriot cuando decide disparar.

Este sistema no se basó en el aprendizaje profundo, por supuesto, fue escrito hace 15-20 años. Pero con las tendencias actuales en la automatización de todo, podríamos ver modelos de aprendizaje profundo utilizados incluso en la guerra moderna (¡mala, mala idea!).

Las fallas serían aún más drásticas dada la negligencia que las personas tienen hacia la precisión de la computación en el aprendizaje profundo (con razón, porque no hace absolutamente ninguna diferencia). Entonces, la respuesta obvia a la pregunta: en cualquier situación en la que los pequeños errores se acumulan en desastres con el tiempo.

Este ejemplo muestra el punto de fracaso en el que muy pocas personas piensan, porque de eso no se trata actualmente el aprendizaje profundo.

Para las tareas que se usa ahora el DL, incluso la precisión única es una exageración que ralentiza el proceso de entrenamiento y consume el doble de memoria donde la media precisión es más que suficiente. El día en que Nvidia publique soporte completo de float16 en CUDA será un feriado en toda la industria.

Primero debemos hacer la pregunta más simple

¿Cuándo es importante la doble precisión?

La pérdida de precisión generalmente solo es problemática en el caso de una cancelación catastrófica [1] Cuando eso ocurre, obtiene un gran error relativo en su aritmética.

¿Cómo afecta esto al aprendizaje profundo?

Esperaría que fuera bastante raro. Con la inicialización y regularización de peso adecuadas, encontrará que la mayoría de las funciones en la mayoría de las capas de la red tienen órdenes de magnitud similares. La probabilidad de que los pesos sean correctos para causar una cancelación catastrófica en una combinación lineal es muy pequeña. Si está utilizando la activación sigmoidea (o cualquier activación con rango acotado), puede aumentar un poco, pero no mucho. Incluso cuando ocurre, aunque el error relativo puede ser grande, el error absoluto será pequeño en relación con los otros valores de la capa; espere al menos dos órdenes de magnitud más pequeños. Es una muy buena noticia porque las redes profundas construyen funciones continuas y (generalmente) diferenciables . Eso significa que si una característica está desactivada solo un poco, la salida también estará desactivada solo un poco.

Recuerde que [matemáticas] f (x + \ epsilon) \ aprox. F (x) + \ epsilon f ‘(x) [/ math]. En este caso, [matemática] x [/ matemática] es la característica particular, [matemática] f [/ matemática] es la función que la red ha aprendido pero con todas las demás características que no dependen de [matemática] x [/ matemática] mantenida constante . Eso significa que podemos esperar un error que es [math] O (\ epsilon) [/ math], que generalmente se considera bastante bueno desde el punto de vista de la estabilidad numérica.

Este es, por supuesto, un análisis muy simplificado, pero puede asumir con seguridad que mientras la función que desea aprender no sea demasiado loca, la pérdida de precisión no será un gran problema. Será una fuente de error insignificante en comparación con el hecho de que su modelo no es perfecto.

En la clasificación, puede estar bastante seguro de que no afectará la predicción. En la regresión, afectará la predicción, pero no mucho y el efecto promedio será bastante cercano a cero. La doble precisión no vale el tiempo extra de cálculo. De hecho, para la mayoría de las aplicaciones me gustaría ver un modelo más rápido y de menor precisión (pero no demasiado) en comparación con la precisión simple.

Tendremos que hacer enormes avances en precisión antes de que la precisión se convierta en un problema.

La excepción:

La explosión gradual y la desaparición gradual pueden ser un problema grave en el aprendizaje profundo. La doble precisión hace que estos sean un poco menos peligrosos. No hace mucho por la explosión, pero puede ayudar a desaparecer. Sin embargo, generalmente encontrará que hay formas mucho más eficientes de tratar estos problemas que arrojarles precisión.

Notas al pie

[1] Pérdida de importancia – Wikipedia

Casi nunca. De hecho, la pregunta que la gente hace es “¿puedo escaparme con aún menos precisión?”, Y la respuesta es bastante sí. El entrenamiento de redes neuronales profundas con multiplicaciones de baja precisión considera operaciones de punto fijo en lugar de coma flotante, y muestra que el rendimiento en puntos de referencia comunes puede ser solo un poco menos. Incluso las CNN con pesos binarios y activaciones pueden funcionar bastante bien. Y las mediciones de estos documentos son el peor de los casos; con una precisión más baja, puede entrenar en más datos por segundo, por lo que en configuraciones de tiempo limitado quizás pueda superar la precisión habitual.

Aparentemente, la relevancia de la doble precisión en los gráficos es similar a su baja relevancia en el aprendizaje profundo, y esto está cambiando la forma en que se diseña el hardware. El rendimiento de doble precisión en relación con el rendimiento de precisión simple es más bajo para la nueva arquitectura Maxwell Nvidia que la arquitectura Kepler anterior. Las personas que usan GPU para el tipo de ciencia donde la precisión y la estabilidad numérica son de suma importancia, por ejemplo, Molecular Dynamics, pueden no estar contentas de escuchar esto. Quizás los competidores de Nvidia como AMD lo intenten o intenten atraer al mercado de la ciencia de alta precisión.

Probablemente nunca, como lo explicó Alex Seewald. Lo que probablemente sea más interesante de preguntar es qué parte del aprendizaje profundo introduce ruido. Mi conjetura sería el proceso de entrenamiento.

Actualmente, la mayoría de los modelos de aprendizaje profundo están entrenados por gradiente estocástico decente. Con este método, el gradiente calculado casi nunca es igual al gradiente verdadero porque utiliza un subconjunto del conjunto de entrenamiento en lugar del conjunto completo de entrenamiento para el cálculo.

Intente calcular el error del gradiente y compárelo con el error numérico de doble precisión. Estoy bastante seguro de que los gradientes calculados estocásticamente serían mucho más ruidosos.