2

La norme est float32 mais je me demande dans quelles conditions l'utilisation de float16 est autorisée?float16 vs float32 pour les réseaux de neurones convolutifs

J'ai comparé l'exécution du même covnet avec les deux types de données et je n'ai remarqué aucun problème. Avec un grand ensemble de données, je préfère float16 parce que je peux m'inquiéter moins sur les problèmes de mémoire.

+0

Avec float16, vous aurez probablement plus de problèmes avec les gradients de fuite. Et lorsque vous affinez le réglage, si vos dégradés sont trop faibles, les dégradés qui devraient être différents peuvent être égaux. –

Répondre

2

Etonnamment, il est tout à fait OK d'utiliser 16 bits, même pas seulement pour le plaisir, mais aussi en production. Par exemple, dans this video Jeff Dean parle de calculs 16 bits chez Google, vers 52:00. Une citation des diapositives:

formation nette Neural très tolérant de précision réduite

Depuis la mémoire GPU est le principal goulot d'étranglement dans le calcul ML, il y a eu beaucoup de recherches sur la réduction de la précision. Par exemple.

  • Gupta at al paper "Deep apprentissage avec précision numérique limitée" à propos fixe (non flottant) 16 bits formation, mais avec stochastique arrondi.

  • Courbariaux at al « Formation en profondeur des réseaux de neurones avec une faible précision Multiplications » sur 10 bits activations et 12 bits mises à jour des paramètres.

  • Et ce n'est pas la limite. Courbariaux et al, "BinaryNet: formation de réseaux neuronaux profonds avec des poids et des activations contraints à +1 ou -1". Ici, ils discutent 1 bits activations et poids (bien que la plus grande précision pour les gradients), ce qui rend le passage avant super rapide.

Bien sûr, je peux imaginer certains réseaux peuvent nécessiter une grande précision pour la formation, mais je recommande au moins pour essayer 16 bits pour la formation d'un grand réseau et passer à 32 bits si elle se révèle travailler pire.

1

L'entraînement float16 est difficile: votre modèle peut ne pas converger en utilisant float16 standard, mais float16 enregistre de la mémoire, et est également plus rapide si vous utilisez les derniers GPU Volta. Nvidia recommande "Mixed Precision Training" dans la dernière doc et paper.

Pour mieux utiliser float16, vous devez manuellement et soigneusement choisir le loss_scale. Si loss_scale est trop grand, vous pouvez avoir des NAN et des INFs; Si loss_scale est trop petit, le modèle pourrait 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 voulez juste réduire l'utilisation de la mémoire, vous pouvez également essayer tf. to_bfloat16, qui pourrait mieux converger.

0

Selon cette étude:

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

arrondi stochastique

a été nécessaire pour obtenir la convergence lors de l'utilisation de précision flottante demi-point (float16); cependant, quand 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 document: (. Chen et al, 2014)

« Une œuvre récente présente un accélérateur matériel pour la formation du réseau de neurones en profondeur qui emploie unités de calcul à virgule fixe, mais le trouve nécessaire pour utiliser la représentation point fixe 32 bits pour atteindre la convergence alors que la formation d'un réseau de neurones convolutionnel sur l'ensemble de données MNIST. en revanche, nos résultats montrent que il est possible de former ces réseaux en utilisant seulement 16 bits fixe nombre de points, tant que l'arrondissement stochastique est utilisé duri ng calculs à virgule fixe. "

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

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