Utiliser un classificateur CNN pré-formé et l'appliquer sur un ensemble de données d'image différent


11

Comment pourriez-vous optimiser un pré-formé neural network pour l'appliquer à un problème distinct? Souhaitez-vous simplement ajouter plus de couches au modèle pré-formé et le tester sur votre ensemble de données?

Par exemple, si la tâche consistait à utiliser un CNN pour classer les groupes de papiers peints , je suis sûr que cela ne fonctionnerait pas pour classer directement un réseau pré-formé formé sur les images chats et chiens, même si les deux sont des classificateurs d'images.

Réponses:


15

Lire Do - Lorsque le transfert d' apprentissage est désavantageux (remerciements à @media) (regards très instructifs pour moi, donc ajouté ici pour faire cette réponse un moment complète ...)

Réponse à votre question .. (commence ici)

L'apprentissage par transfert est ce que vous recherchez.

  • Lorsque l'on nous confie une tâche d'apprentissage en profondeur, disons, qui implique la formation d'un réseau neuronal convolutionnel (Covnet) sur un ensemble de données d'images, notre premier instinct serait de former le réseau à partir de zéro. Cependant, dans la pratique, les réseaux de neurones profonds comme Covnet ont un grand nombre de paramètres, souvent de l'ordre de millions. La formation d'un Covnet sur un petit ensemble de données (un qui est plus petit que le nombre de paramètres) affecte considérablement la capacité du Covnet à généraliser, entraînant souvent un sur-ajustement.

  • Par conséquent, le plus souvent dans la pratique, on pourrait affiner les réseaux existants qui sont formés sur un grand ensemble de données comme ImageNet (images étiquetées à 1,2 million) en continuant à le former (c'est-à-dire en exécutant une rétro-propagation) sur le plus petit ensemble de données que nous avons. À condition que notre ensemble de données ne soit pas radicalement différent dans le contexte de l'ensemble de données d'origine (par exemple ImageNet), le modèle pré-formé aura déjà des fonctionnalités apprises qui sont pertinentes pour notre propre problème de classification.

Quand affiner les modèles?

  • En général, si notre ensemble de données n'est pas radicalement différent dans le contexte de l'ensemble de données sur lequel le modèle pré-formé est formé, nous devrions opter pour un réglage fin. Un réseau pré-formé sur un ensemble de données vaste et diversifié comme ImageNet capture des caractéristiques universelles comme les courbes et les bords dans ses premières couches, qui sont pertinentes et utiles pour la plupart des problèmes de classification.

  • Bien sûr, si notre ensemble de données représente un domaine très spécifique, par exemple, des images médicales ou des caractères manuscrits chinois, et qu'aucun réseau pré-formé sur ce domaine ne peut être trouvé, nous devrions alors envisager de former le réseau à partir de zéro.

  • Une autre préoccupation est que si notre ensemble de données est petit, le réglage fin du réseau pré-formé sur un petit ensemble de données peut entraîner un sur-ajustement, surtout si les dernières couches du réseau sont des couches entièrement connectées, comme dans le cas du réseau VGG. D'après mon expérience, si nous avons quelques milliers d'échantillons bruts, avec les stratégies communes d'augmentation des données mises en œuvre (traduction, rotation, retournement, etc.), un réglage fin nous permettra généralement d'obtenir un meilleur résultat.

  • Si notre ensemble de données est vraiment petit, disons moins d'un millier d'échantillons, une meilleure approche consiste à prendre la sortie de la couche intermédiaire avant les couches entièrement connectées en tant qu'entités (entités goulot d'étranglement) et à former un classificateur linéaire (par exemple SVM) au-dessus de il. SVM est particulièrement efficace pour tracer des limites de décision sur un petit ensemble de données.

Techniques de réglage fin

Vous trouverez ci-dessous quelques directives générales pour une mise en œuvre précise:

  • La pratique courante consiste à tronquer la dernière couche (couche softmax) du réseau pré-formé et à la remplacer par notre nouvelle couche softmax correspondant à notre propre problème. Par exemple, un réseau pré-formé sur ImageNet est livré avec une couche softmax avec 1000 catégories.

  • Si notre tâche est un classement sur 10 catégories, la nouvelle couche softmax du réseau sera de 10 catégories au lieu de 1000 catégories. Nous reportons ensuite la propagation sur le réseau pour affiner les poids pré-entraînés. Assurez-vous que la validation croisée est effectuée afin que le réseau puisse bien se généraliser.

  • Utilisez un taux d'apprentissage plus faible pour former le réseau. Comme nous nous attendons à ce que les poids pré-entraînés soient déjà assez bons par rapport aux poids initialisés au hasard, nous ne voulons pas les déformer trop rapidement et trop. Une pratique courante consiste à faire le taux d'apprentissage initial 10 fois plus petit que celui utilisé pour la formation de zéro.

  • Il est également courant de geler les poids des premières couches du réseau pré-formé. En effet, les premières couches capturent des caractéristiques universelles comme les courbes et les arêtes qui sont également pertinentes pour notre nouveau problème. Nous voulons garder ces poids intacts. Au lieu de cela, nous amènerons le réseau à se concentrer sur l'apprentissage des fonctionnalités spécifiques aux jeux de données dans les couches suivantes.

Vous devez les former à nouveau dans ce cas comme si je ne me trompais pas, alors les fonds d'écran ne sont pas une classe de modèles Image-net. Il ne sera pas difficile de construire un modèle à partir de zéro pour le faire (de préférence un faites aussi ici ..)

La source de ma réponse est la traduction de ces cours incroyables ..

Pour d'autres lectures,


Si vous ne faites que l'extraction de fonctionnalités, comme pour ne pas affiner les calques. Y a-t-il une raison de remplacer la dernière couche dense par un classificateur linéaire? Pourquoi ne pas le conserver comme une nouvelle couche dense et simplement le recycler tout en gardant toutes les couches inférieures gelées? Est-ce simplement parce que la formation d'un classificateur linéaire sera plus rapide que la formation d'une nouvelle couche dense?
CMCDragonkai

1
Pour l'extraction d'entités, pas besoin d'ajouter des calques mais peu de calques comme le regroupement et le redimensionnement des formes sont ajoutés pour correspondre aux dims et éventuellement réduire les valeurs intermédiaires; Certes, il est plus rapide de former un modèle linéaire qu'un NN, mais vous pouvez essayer les deux et voir ce qui fonctionne le mieux pour votre cas d'utilisation; Dégeler la dernière couche dense et recycler avec quelques couches supplémentaires pour répondre à votre problème est une pratique courante
Aditya
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.