Malheureusement, il n'existe aucun moyen générique de déterminer a priori le meilleur nombre de neurones et le nombre de couches pour un réseau neuronal, étant donné juste une description du problème. Il n'y a même pas beaucoup de conseils pour déterminer les bonnes valeurs à essayer comme point de départ.
L'approche la plus courante semble être de commencer par une estimation approximative basée sur l'expérience antérieure des réseaux utilisés sur des problèmes similaires. Cela peut être votre propre expérience, ou une expérience de seconde / troisième main que vous avez acquise dans un cours de formation, un blog ou un document de recherche. Essayez ensuite quelques variantes et vérifiez attentivement les performances avant d'en choisir une meilleure.
La taille et la profondeur des réseaux de neurones interagissent également avec d'autres hyperparamètres , de sorte que changer une chose ailleurs peut affecter où se trouvent les meilleures valeurs. Il n'est donc pas possible d'isoler une «meilleure» taille et profondeur pour un réseau, puis de continuer à régler les autres paramètres de manière isolée. Par exemple, si vous avez un réseau très profond, il peut fonctionner efficacement avec la fonction d'activation ReLU, mais pas si bien avec sigmoid - si vous avez trouvé la meilleure taille / forme de réseau et avez ensuite essayé une expérience avec différentes fonctions d'activation, vous pouvez venir à la mauvaise conclusion sur ce qui fonctionne le mieux.
Vous pouvez parfois lire sur les «règles de base» que les chercheurs utilisent lors du démarrage d'une conception de réseau neuronal à partir de zéro. Ces choses peuvent fonctionner pour vos problèmes ou non, mais elles ont au moins l'avantage de commencer le problème. Les variations que j'ai vues sont:
Créez un réseau avec des couches cachées de taille similaire à l'entrée, et toutes de même taille, au motif qu'il n'y a pas de raison particulière de varier la taille (sauf si vous créez peut-être un autoencodeur).
Commencez simplement et développez la complexité pour voir ce qui améliore un réseau simple.
Essayez différentes profondeurs de réseau si vous vous attendez à ce que la sortie soit bien expliquée par les données d'entrée, mais avec une relation complexe (par opposition à juste intrinsèquement bruyante).
Essayez d'ajouter un peu de décrochage, c'est ce que les réseaux de neurones ont de plus proche de la poussière de fée magique qui rend tout meilleur (mise en garde: l'ajout de décrochage peut améliorer la généralisation, mais peut également augmenter la taille des couches et les temps de formation requis).
Si vous les lisez ou quelque chose comme ça dans n'importe quel texte, alors prenez-les avec une pincée de sel. Cependant, au pire, ils vous aident à surmonter l'effet de page blanche, à écrire une sorte de réseau et à démarrer le processus de test et de raffinement.
En passant, essayez de ne pas vous perdre trop dans le réglage d'un réseau de neurones quand une autre approche pourrait être meilleure et vous faire gagner beaucoup de temps. Envisagez et utilisez d'autres approches d'apprentissage automatique et de science des données. Explorez les données, faites peut-être des tracés. Essayez d'abord quelques approches linéaires simples pour obtenir des repères à battre, régression linéaire, régression logistique ou régression softmax en fonction de votre problème. Envisagez d'utiliser un algorithme ML différent des NN - les approches basées sur l'arbre de décision telles que XGBoost peuvent être plus rapides et plus efficaces que l'apprentissage en profondeur sur de nombreux problèmes.