web-dev-qa-db-fra.com

float16 vs float32 pour les réseaux de neurones convolutifs

La norme est float32 mais je me demande dans quelles conditions l’utilisation de float16 est acceptable.

J'ai comparé l'exécution du même réseau avec les deux types de données et je n'ai pas remarqué de problèmes. Avec un grand jeu de données, je préfère float16 car je peux me soucier moins des problèmes de mémoire.

8
megashigger

Étonnamment, utiliser 16 bits est tout à fait acceptable, pas seulement pour le plaisir, mais aussi pour la production. Par exemple, dans cette vidéo Jeff Dean parle de calculs sur 16 bits sur Google, aux alentours de 52h00. Une citation des diapositives:

Entraînement au réseau neuronal très tolérant de la précision réduite

Étant donné que la mémoire GPU est le principal goulot d'étranglement dans le calcul des ML, de nombreuses recherches ont été menées sur la réduction de la précision. Par exemple. 

  • Gupta at al paper "Apprentissage en profondeur avec précision numérique limitée" à propos de fixed (non flottant) entraînement à 16 bits mais avec arrondi stochastique

  • Courbariaux at al "Formation de réseaux de neurones profonds avec des multiplications de faible précision" sur les activations 10 bits et les mises à jour des paramètres 12 bits

  • Et ce n'est pas la limite. Courbariaux et al , "BinaryNet: Former des réseaux de neurones profonds avec des poids et des activations limités à +1 ou -1". Ici, ils discutent des activations 1-bit et des poids (bien que la précision soit meilleure pour les gradients), ce qui accélère le passage en avant.

Bien sûr, je peux imaginer que certains réseaux peuvent nécessiter une haute précision pour la formation, mais je recommanderais au moins d'essayer 16 bits pour former un grand réseau et de passer à 32 bits si cela s'avère être pire.

5
Maxim

la formation de float16 est délicate: votre modèle peut ne pas converger lors de l'utilisation de float16 standard, mais float16 économise de la mémoire et est également plus rapide si vous utilisez les derniers GPU Volta. Nvidia recommande la "Formation de précision mixte" dans le dernier document doc et papier .

Pour mieux utiliser float16, vous devez choisir manuellement et avec soin le loss_scale. Si loss_scale est trop important, vous pouvez obtenir des NAN et des INF; Si loss_scale est trop petit, le modèle peut ne pas converger. Malheureusement, il n'y a pas de loss_scale commun pour tous les modèles, vous devez donc le choisir avec soin pour votre modèle spécifique.

Si vous souhaitez simplement réduire l’utilisation de la mémoire, vous pouvez également essayer tf. to_bfloat16, qui pourrait converger mieux. 

3
Max

Selon cette étude: 

Gupta, S., Agrawal, A., Gopalakrishnan, K., et Narayanan, P. (2015, Juin). Apprendre en profondeur avec une précision numérique limitée. Dans Conférence internationale sur l'apprentissage automatique (pp. 1737-1746). À: https://arxiv.org/pdf/1502.02551.pdf

l'arrondi stochastique était nécessaire pour obtenir la convergence lors de l'utilisation de la précision flottante à demi-point (float16) cependant, lorsque cette technique d'arrondi a été utilisée, ils ont prétendu obtenir de très bons résultats.

Voici une citation pertinente de ce papier:

"Un travail récent (Chen et al., 2014) présente un accélérateur matériel Pour la formation en réseau neuronal profond qui utilise Des unités de calcul à point fixe, mais juge nécessaire d'utiliser L'utilisation de points fixes à 32 bits représentation pour parvenir à la convergence en formant un réseau de neurones convolutionnels sur le jeu de données MNIST. En revanche, nos résultats montrent qu'il est possible de former ces réseaux en utilisant uniquement des nombres à 16 points fixes , tant que l’arrondi stochastique est utilisé lors de calculs en virgule fixe. "

Pour référence, voici la citation pour Chen dans al., 2014:

Chen, Y., T. Luo, S. Liu, S. Zhang, Lui, L., Wang, J., & Temam, O. (décembre 2014). Dadiannao: Un superordinateur d'apprentissage automatique. Dans Actes du 47ème Symposium international annuel IEEE/ACM sur Microarchitecture (pp. 609-622). IEEE Computer Society. À: http://ieeexplore.ieee.org/document/7011421/?part=1

1
devinbost