Très bonne question, car il n'existe pas encore de réponse exacte à cette question. Il s'agit d'un domaine de recherche actif.
Au final, l'architecture de votre réseau est liée à la dimensionnalité de vos données. Étant donné que les réseaux de neurones sont des approximateurs universels, tant que votre réseau est suffisamment grand, il a la capacité d'adapter vos données.
La seule façon de savoir vraiment quelle architecture fonctionne le mieux est de les essayer toutes, puis de choisir la meilleure. Mais bien sûr, avec les réseaux de neurones, c'est assez difficile car chaque modèle prend un certain temps à s'entraîner. Ce que certaines personnes font, c'est d'abord former un modèle qui est «trop grand» exprès, puis l'élaguer en supprimant les poids qui ne contribuent pas beaucoup au réseau.
Et si mon réseau est "trop grand"
Si votre réseau est trop volumineux, il peut soit être surchargé, soit avoir du mal à converger. Intuitivement, ce qui se passe, c'est que votre réseau essaie d'expliquer vos données d'une manière plus compliquée qu'il ne devrait. C'est comme essayer de répondre à une question à laquelle on pourrait répondre en une phrase avec un essai de 10 pages. Il peut être difficile de structurer une réponse aussi longue, et il peut y avoir beaucoup de faits inutiles. ( Voir cette question )
Et si mon réseau est "trop petit"
En revanche, si votre réseau est trop petit, il équipera vos données et donc. Ce serait comme répondre avec une phrase alors que vous auriez dû rédiger un essai de 10 pages. Aussi bonne que soit votre réponse, certains des faits pertinents vous manqueront.
Estimation de la taille du réseau
Si vous connaissez la dimensionnalité de vos données, vous pouvez savoir si votre réseau est suffisamment grand. Pour estimer la dimensionnalité de vos données, vous pouvez essayer de calculer son classement. C'est une idée fondamentale dans la façon dont les gens essaient d'estimer la taille des réseaux.
Cependant, ce n'est pas aussi simple. En effet, si votre réseau doit être en 64 dimensions, construisez-vous une seule couche cachée de taille 64 ou deux couches de taille 8? Ici, je vais vous donner une idée de ce qui se passerait dans les deux cas.
Aller plus loin
Aller plus loin signifie ajouter plus de couches cachées. Ce qu'il fait, c'est qu'il permet au réseau de calculer des fonctionnalités plus complexes. Dans les réseaux de neurones convolutifs, par exemple, il a été souvent démontré que les premières couches représentent des caractéristiques "de bas niveau" telles que les bords, et les dernières couches représentent des caractéristiques "de haut niveau" telles que les visages, les parties du corps, etc.
Vous devez généralement approfondir si vos données sont très non structurées (comme une image) et doivent être traitées un peu avant de pouvoir en extraire des informations utiles.
Aller plus loin
Aller plus loin signifie créer des fonctionnalités plus complexes, et «élargir» signifie simplement créer plus de ces fonctionnalités. Il se peut que votre problème puisse être expliqué par des fonctionnalités très simples, mais il doit y en avoir beaucoup. Habituellement, les couches deviennent plus étroites vers la fin du réseau pour la simple raison que les fonctionnalités complexes transportent plus d'informations que les simples, et donc vous n'en avez pas besoin d'autant.
Réponse courte: elle est très liée aux dimensions de vos données et au type d'application.
Le choix du bon nombre de couches ne peut être atteint qu'avec la pratique. Il n'y a pas encore de réponse générale à cette question . En choisissant une architecture de réseau, vous limitez votre espace de possibilités (espace d'hypothèses) à une série spécifique d'opérations de tenseur, en mappant les données d'entrée aux données de sortie. Dans un DeepNN, chaque couche ne peut accéder qu'aux informations présentes dans la sortie de la couche précédente. Si une couche supprime des informations pertinentes au problème en question, ces informations ne peuvent jamais être récupérées par des couches ultérieures. Ceci est généralement appelé « goulot d'étranglement de l'information ».
Information Bottleneck est une épée à double tranchant:
1) Si vous utilisez un certain nombre de couches / neurones, le modèle apprendra simplement quelques représentations / caractéristiques utiles de vos données et perdra certaines importantes, car la capacité des couches moyennes est très limitée (sous- ajustement ).
2) Si vous utilisez un grand nombre de couches / neurones, le modèle apprendra trop de représentations / fonctionnalités spécifiques aux données d'entraînement et ne généralisera pas aux données dans le monde réel et en dehors de votre ensemble d'entraînement (sur- ajustement ).
Liens utiles pour des exemples et d'autres recherches:
[1] https: //livebook.manning.com#! / Book / deep-learning-with-python / chapter-3 / point-1130-232-232-0
[2] https://www.quantamagazine.org/new-theory-cracks-open-the-black-box-of-deep-learning-20170921/
la source
Travailler avec des réseaux de neurones depuis deux ans, c'est un problème que j'ai toujours à chaque fois que je ne veux pas modéliser un nouveau système. La meilleure approche que j'ai trouvée est la suivante:
L'approche générale consiste à essayer différentes architectures, comparer les résultats et prendre la meilleure configuration. L'expérience vous donne plus d'intuition dans la première estimation de l'architecture.
la source
En plus des réponses précédentes, il existe des approches où la topologie du réseau neuronal émerge de manière endogène, dans le cadre de la formation. Plus important encore, vous avez Neuroevolution of Augmenting Topologies (NEAT) où vous commencez avec un réseau de base sans couches cachées, puis utilisez un algorithme génétique pour «complexifier» la structure du réseau. NEAT est implémenté dans de nombreux cadres ML. Voici un article assez accessible sur une implémentation pour apprendre Mario: CrAIg: Utiliser les réseaux de neurones pour apprendre Mario
la source