Je travaille avec des réseaux de neurones (NN) dans le cadre de ma thèse en géophysique et j'utilise TensorFlow avec Keras pour former mon réseau.
Ma tâche actuelle est d'utiliser un NN pour approcher un modèle thermodynamique c'est-à-dire un problème de régression non linéaire. Il prend 13 paramètres d'entrée et produit un profil de vitesse (vitesse par rapport à la profondeur) de 450 paramètres. Mes données se composent de 100000 exemples synthétiques (c'est-à-dire qu'aucun bruit n'est présent), répartis en entraînement (80k), validation (10k) et tests (10k).
J'ai testé mon réseau pour un certain nombre d'architectures différentes: plus large (5 à 800 neurones) et plus profonde (jusqu'à 10 couches), différents taux d'apprentissage et tailles de lots, et même pour de nombreuses époques (5000). En gros, toutes les astuces standard du métier ...
Mais je suis étonné par le fait que la courbe d'apprentissage montre une erreur de validation inférieure à l'erreur d'entraînement (pour tous mes tests), et je n'ai jamais été en mesure de suradapter les données d'entraînement. Voir la figure ci-dessous:
L'erreur sur l'ensemble de test est en conséquence faible, ainsi le réseau semble être en mesure de faire des prédictions décentes. Il semble qu'une seule couche cachée de 50 neurones soit suffisante. Cependant, je ne suis pas sûr de pouvoir faire confiance à ces résultats en raison du comportement de la courbe d'apprentissage. J'ai considéré que cela pourrait être dû au jeu de validation composé d'exemples "faciles" à prédire, mais je ne vois pas comment je devrais changer cela. Un plus grand ensemble de validation peut-être?
Pour conclure: est-ce nécessairement un mauvais signe si l'erreur de validation est inférieure ou très proche de l'erreur d'entraînement? Et si les prédictions faites avec ledit réseau sont correctes?
Est-il possible qu'un surajustement ne soit tout simplement pas possible pour mon problème et mes données?
3 Réponses :
Vous pouvez obtenir des résultats plus fiables en répétant vos tests sur différentes données. Utilisez la validation croisée avec un pli élevé (comme k = 10) pour obtenir une meilleure confiance dans les performances de votre solution. Habituellement, les réseaux de neurones se surajustent facilement, si votre solution a des résultats similaires lors de la validation et de l'ensemble de test, c'est un bon signe.
Ce n'est pas si simple à dire quand on ne sait pas exactement comment vous avez configuré l'expérience:
Comme vous l'avez mentionné, le fait que vous observiez une erreur de validation inférieure à l'entraînement peut être le résultat du fait que soit l'ensemble de données d'entraînement contient de nombreux cas «difficiles» à apprendre, soit l'ensemble de validation contient de nombreux cas «faciles» à prévoir.
Cependant, comme on s'attend généralement à ce que la perte d'entraînement sous-estime la validation, le modèle spécifique semble avoir un ajustement imprévisible / inconnu (il est plus performant pour prédire l'inconnu que le connu semble vraiment étrange).
Pour surmonter cela, je commencerais à expérimenter en reconsidérant la stratégie de fractionnement des données, en ajoutant plus de données si possible, ou même en modifiant votre statistique de performance.
Merci, je n'ai en fait utilisé aucune méthode de validation croisée, mais je vais essayer!
En plus d'essayer un facteur k plus élevé et l'échantillon d'exclusion de test supplémentaire, peut-être le mélanger lors de l'échantillonnage à partir de l'ensemble de données d'origine: sélectionnez un échantillon stratifié lors du partitionnement des ensembles d'apprentissage et de validation / test. Ensuite, partitionnez l'ensemble de validation et de test sans stratifier l'échantillonnage.
Mon opinion est que si vous introduisez plus de variations dans votre méthodologie de modélisation (sans enfreindre les "règles statistiques"), vous pouvez être plus confiant dans le modèle que vous avez créé.
Je ne vois aucun problème avec les courbes d'erreur affichées ...
Ce n'est pas un problème. Cela signifie simplement que votre ensemble de validation est très proche de votre ensemble d'entraînement et que le NN fait un excellent travail pour trouver la structure. Il est absolument possible que vous n'ayez pas de bruit dans vos données et que cela fonctionne bien.
Je vote pour clore cette question comme hors sujet parce que ce n'est pas un problème.
Je vous remercie. C'est la première fois que je travaille avec des NN et comme le surajustement semble être le problème le plus courant lors de la formation, j'ai trouvé étrange que cela ne se produise pas pour mon cas.