De combien de données avez-vous besoin pour un réseau neuronal convolutionnel?


15

Si j'ai un réseau neuronal convolutif (CNN), qui a environ 1 000 000 de paramètres, combien de données d'entraînement sont nécessaires (supposons que je fais une descente de gradient stochastique)? Y a-t-il une règle d'or?

Notes supplémentaires: Lorsque j'ai effectué une descente de gradient stochastique (par exemple, 64 patchs pour 1 itération), après ~ 10000 itérations, la précision du classificateur peut atteindre une valeur stable approximative). Est-ce à dire que peu de données sont nécessaires? Comme les données 100k-1000k.

Réponses:


12

Afin de déterminer si plus de données seront utiles ou non, vous devez comparer les performances de votre algorithme sur les données d'entraînement (c'est-à-dire les données utilisées pour former le réseau neuronal) à ses performances sur les données de test (c'est-à-dire les données que le réseau neuronal a pas "voir" dans la formation).

Une bonne chose à vérifier serait l'erreur (ou la précision) sur chaque ensemble en fonction du nombre d'itérations. Il y a deux possibilités pour le résultat de ceci:

1) L'erreur d'apprentissage converge vers une valeur significativement inférieure à l'erreur de test. Si tel est le cas, les performances de votre algorithme s'amélioreront certainement avec plus de données.

2) L'erreur d'apprentissage et l'erreur de test convergent vers à peu près la même valeur (l'erreur de formation étant probablement encore légèrement inférieure à l'erreur de test). Dans ce cas, des données supplémentaires en elles-mêmes n'aideront pas votre algorithme. Si vous avez besoin de meilleures performances que celles que vous obtenez à ce stade, vous devriez essayer soit d'ajouter plus de neurones à vos couches cachées, soit d'ajouter plus de couches cachées. Si suffisamment d'unités cachées sont ajoutées, vous constaterez que votre erreur de test deviendra sensiblement plus élevée que l'erreur de formation, et plus de données vous aideront à ce stade.

Pour une introduction plus approfondie et utile à la façon de prendre ces décisions, je recommande fortement le cours Coursera d' Andrew Ng , en particulier les leçons "Évaluer un algorithme d'apprentissage" et "Biais vs Variance".


3

La réponse naïve est que toujours plus de données sont nécessaires. Itérer sur le même ensemble de données en disant pour plus d'époques vous aide à "affiner" le résultat mais vous n'améliorez pas le résultat autant que d'avoir plus de données.

Par exemple, je forme un convnet à faire de la modélisation de phrases et à tester si j'ai besoin de plus de données, j'ai essayé de diviser mon ensemble de données de formation en un sous-ensemble plus petit et d'essayer de le tester.

En utilisant l'ensemble de données et la formation pour 10 itérations, j'ai obtenu une précision de 93% sur mon benchmark et il continue de s'améliorer. Au lieu de cela, lorsque j'ai itéré sur les 10% de l'ensemble de données pour 100 itérations, j'ai obtenu un 85%.

Essayez donc toujours d'avoir plus de données, mais si vous ne le pouvez pas, faire plus d'époques peut être un bon échange, mais au final votre modèle converge mieux si vous alimentez le réseau avec toujours de nouvelles données.


1
Merci pour votre réponse! Oui, je sais que plus vous avez de données, mieux vous serez, mais alors exactement combien de données vous avez besoin est ce que je ne suis pas sûr. Parce que vous ne pouvez pas toujours avoir plus de données. Par exemple, j'ai besoin d'embaucher quelqu'un pour faire des annotations et de l'étiquetage, je veux savoir quand je devrais m'arrêter ...
RockTheStar

cela signifie-t-il que si j'ai un petit ensemble de données, mon modèle ne convergera pas?
samsamara

3

Je suppose que la chose la plus importante est que les échantillons de vos données sont bien répartis, car peu importe la quantité de données dont vous disposez, plus de données seraient toujours meilleures. Après tout, si vous essayez d'apprendre à distinguer les photos de chats et de chiens, vous ne pouvez pas vous attendre à ce que votre modèle fonctionne bien si vous ne lui donnez que des images de chats.

Comme suggéré dans la réponse de Kevin L , il est logique de considérer la différence entre l'erreur de formation et l'erreur de test. Si vos données de test sont indépendantes de vos données d'entraînement, cela donne une indication sur la façon dont votre modèle se généralise aux données qui ne sont pas disponibles. Quelque chose que j'aimerais ajouter à cela est le fait qu'une grande différence entre l'entraînement et l'erreur de test vous indique seulement que votre modèle ne se généralise pas bien, c'est-à-dire que vous surappuyez sur les données d'entraînement. Davantage de données seront probablement utiles, car maintenant le réseau doit également modéliser les points de données supplémentaires, il ne peut donc plus trop s'adapter. Cependant, il pourrait être plus intéressant de changer votre modèle afin qu'il se généralise mieux. Ce chapitre d'un excellent livre explique quels types de régularisation existent et comment ils peuvent être appliqués dans les réseaux pour obtenir une meilleure généralisation.

Si vous cherchiez une mesure plus quantitative, j'ai récemment trouvé cette question sur quora. Il s'agit d'un encodeur automatique, mais je suppose qu'il devrait également s'appliquer à votre exemple. Je ne sais pas si c'est correct (veuillez me le faire savoir), mais je dirais que, par exemple pour le MNIST, on pourrait dire que vous essayez de réduire les images avec un maximum de 28 * 28 * 8 * 10 000 = 62 720 000 entropie de bits à dix classes dans un codage à chaud avec 10 * 10 * 10 000 = 1 000 000 bits d'entropie. Parce que nous ne sommes intéressés que par les 1 000 000 bits d'entropie en sortie, nous pouvons dire qu'avec 1 000 000 paramètres, chaque paramètre représente un seul bit, soit 1e-4 bits par échantillon. Cela signifie que vous auriez besoin de plus de données. Ou vous avez trop de paramètres, car par exemple avec 100 paramètres, vous avez 10 000 bits par paramètre et donc 1 bit par échantillon. cependant,


Merci pour votre suggestion. Je pense que de nos jours, les gens proposent une stratégie différente pour réduire le nombre de données pour une tâche spécifique.
RockTheStar

0

Une autre méthode généralement utilisée pour déterminer si votre réseau a appris suffisamment de fonctionnalités consiste à visualiser les filtres initiaux. Si le réseau est bien formé, il devrait afficher un filtre lisse. Un filtre bruyant indique généralement que le réseau n'a pas été suffisamment formé ou qu'il a été surchargé. Pour plus d'informations, lisez cette page .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.