Comment puis-je appliquer multithreading à la formation du réseau de neurones rétropropagation?

StackOverflow https://stackoverflow.com/questions/1830350

Question

Pour mon projet universitaire je crée un réseau de neurones qui peut classer la probabilité qu'une transaction par carte de crédit est frauduleuse ou non. Je suis une formation avec rétropropagation. Je vous écris ceci en Java. Je voudrais demander multithreading, parce que mon ordinateur est un quad-core i7. bugs Il me passer des heures de formation et de voir la plupart de mes noyaux de repos.

Mais comment pourrais-je appliquer multithreading à rétropropagation? Backprop fonctionne en ajustant les erreurs en arrière à travers le réseau. Une couche doit être fait avant que l'autre puisse se poursuivre. Est-il possible que je peux modifier mon programme pour faire fond multicœur?

Était-ce utile?

La solution

Tout d'abord, ne pas utiliser rétropropagation. Il y a beaucoup d'autres options là-bas. Je suggère d'essayer RPROP (propagation élastique). Il ne sera pas grande que la modification de votre algorithme de rétropropagation. Vous n'avez pas besoin de spécifier le taux d'apprentissage ou dynamique. Son vraiment presque comme si vous avez un individu variable, le taux d'apprentissage pour chaque connexion dans le réseau de neurones.

En ce qui concerne l'application de multithreading à rétropropagation. Je viens d'écrire un article sur ce sujet.

http://www.heatonresearch.com/encog/mprop/compare.html

Fondamentalement, je créer un certain nombre de fils et de répartir les données d'entraînement de sorte que chaque fil a une quantité égale proche. Je calcule les gradients dans chaque fil et ils sont sommés dans une étape de réduire. Comment les gradients sont appliqués aux poids dépend de l'algorithme de formation de propagation utilisé, mais la mise à jour de poids se fait dans une section critique.

Quand vous avez beaucoup plus d'échantillons de formation que le code poids passe beaucoup plus de temps dans le calcul du gradient multi-thread que la section critique mise à jour de poids.

Je donne quelques-uns des résultats de la performance au lien ci-dessus. Il n'accélère vraiment les choses!

Autres conseils

Pour utiliser plusieurs cœurs CPU avec Java, vous pouvez juste essayer plus d'options pour la JVM sans changer le code:

  • -server
  • -d64
  • -XX: -UseParallelGC

et d'autres options à http://java.sun.com/javase /technologies/hotspot/vmoptions.jsp

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top