Pourquoi le pseudo-étiquetage affecte-t-il de manière non triviale les résultats?


19

J'ai étudié des méthodes d'apprentissage semi-supervisées et j'ai découvert le concept de "pseudo-étiquetage".

Si je comprends bien, avec le pseudo-étiquetage, vous avez un ensemble de données étiquetées ainsi qu'un ensemble de données non étiquetées. Vous entraînez d'abord un modèle uniquement sur les données étiquetées. Vous utilisez ensuite ces données initiales pour classer (attacher des étiquettes provisoires) les données non étiquetées. Vous réinjectez ensuite à la fois les données étiquetées et non étiquetées dans votre formation de modèle, (ré) ajustant à la fois les étiquettes connues et les étiquettes prédites. (Répétez ce processus, réétiquetant avec le modèle mis à jour.)

Les avantages revendiqués sont que vous pouvez utiliser les informations sur la structure des données non étiquetées pour améliorer le modèle. Une variation de la figure suivante est souvent montrée, "démontrant" que le processus peut rendre une limite de décision plus complexe en fonction de l'endroit où se trouvent les données (sans étiquette).

Limite de décision dans les méthodes semi-supervisées

Image de Wikimedia Commons par Techerin CC BY-SA 3.0

Cependant, je n'achète pas tout à fait cette explication simpliste. Naïvement, si le résultat de la formation étiquetée uniquement d'origine était la limite de décision supérieure, les pseudo-étiquettes seraient attribuées en fonction de cette limite de décision. Ce qui revient à dire que la main gauche de la courbe supérieure serait pseudo-étiquetée blanche et la main droite de la courbe inférieure serait pseudo-étiquetée noire. Vous n'obtiendrez pas la belle frontière de décision incurvée après le recyclage, car les nouvelles pseudo-étiquettes renforceraient simplement la frontière de décision actuelle.

Ou pour le dire autrement, la limite de décision actuelle uniquement étiquetée aurait une précision de prédiction parfaite pour les données non étiquetées (comme c'est ce que nous avons utilisé pour les faire). Il n'y a pas de force motrice (pas de gradient) qui nous amènerait à changer l'emplacement de cette limite de décision simplement en ajoutant les données pseudo-étiquetées.

Ai-je raison de penser que l'explication incarnée par le diagramme fait défaut? Ou y a-t-il quelque chose qui me manque? Sinon, quel est l'avantage des pseudo-étiquettes, étant donné que la frontière de décision de pré-recyclage a une précision parfaite sur les pseudo-étiquettes?

Réponses:


16

Le pseudo-étiquetage ne fonctionne pas sur le problème de jouet donné

Oliver et al. (2018) ont évalué différents algorithmes d'apprentissage semi-supervisés. Leur première figure montre comment le pseudo-étiquetage (et d'autres méthodes) fonctionne sur le même problème de jouet que dans votre question (appelé le jeu de données `` deux lunes ''):

entrez la description de l'image ici

Le graphique montre les points de données étiquetés et non étiquetés, et les limites de décision obtenues après la formation d'un réseau neuronal en utilisant différentes méthodes d'apprentissage semi-supervisées. Comme vous le soupçonniez, le pseudo-étiquetage ne fonctionne pas bien dans cette situation. Ils disent que le pseudo-étiquetage "est une heuristique simple qui est largement utilisée dans la pratique, probablement en raison de sa simplicité et de sa généralité". Mais: "Bien qu'intuitif, il peut néanmoins produire des résultats incorrects lorsque la fonction de prédiction produit des cibles inutiles pour [les données sans étiquette], comme le montre la figure 1."

Pourquoi et quand fonctionne le pseudo-étiquetage?

Le pseudo-étiquetage a été introduit par Lee (2013), vous pouvez donc y trouver plus de détails.

L'hypothèse de cluster

La justification théorique que Lee a donnée pour le pseudo-étiquetage est qu'elle est similaire à la régularisation d'entropie. La régularisation de l'entropie (Grandvalet et Bengio 2005) est une autre technique d'apprentissage semi-supervisée, qui encourage le classificateur à faire des prédictions sûres sur des données non étiquetées. Par exemple, nous préférerions qu'un point non étiqueté se voit attribuer une forte probabilité d'être dans une classe particulière, plutôt que des probabilités diffuses réparties sur plusieurs classes. Le but est de tirer parti de l'hypothèse selon laquelle les données sont regroupées par classe (appelée «hypothèse de cluster» dans l'apprentissage semi-supervisé). Ainsi, les points voisins ont la même classe et les points de différentes classes sont plus largement séparés, de sorte que les véritables limites de décision traversent des régions de faible densité de l'espace d'entrée.

Pourquoi le pseudo-étiquetage peut échouer

Compte tenu de ce qui précède, il semblerait raisonnable de supposer que l'hypothèse de cluster est une condition nécessaire pour que le pseudo-étiquetage fonctionne. Mais ce n'est clairement pas suffisant, car le problème des deux lunes ci-dessus satisfait l'hypothèse de cluster, mais le pseudo-étiquetage ne fonctionne pas. Dans ce cas, je soupçonne que le problème est qu'il y a très peu de points étiquetés et que la structure de cluster appropriée ne peut pas être identifiée à partir de ces points. Ainsi, comme Oliver et al. décrire (et comme vous le signalez dans votre question), les pseudo-étiquettes résultantes guident le classificateur vers la mauvaise frontière de décision. Cela fonctionnerait peut-être avec des données plus étiquetées. Par exemple, comparez cela au cas du MNIST décrit ci-dessous, où le pseudo-étiquetage fonctionne.

Où ça marche

Lee (2013) a montré que le pseudo-étiquetage peut aider sur l'ensemble de données MNIST (avec 100 à 3000 exemples étiquetés). En figue. 1 de cet article, vous pouvez voir qu'un réseau de neurones formé sur 600 exemples étiquetés (sans aucun apprentissage semi-supervisé) peut déjà récupérer la structure de cluster entre les classes. Il semble que le pseudo-étiquetage aide alors à affiner la structure. Notez que cela ne ressemble pas à l'exemple des deux lunes, où plusieurs points étiquetés n'étaient pas suffisants pour apprendre les grappes appropriées.

Le document mentionne également que les résultats étaient instables avec seulement 100 exemples étiquetés. Cela soutient à nouveau l'idée que le pseudo-étiquetage est sensible aux prédictions initiales et que de bonnes prédictions initiales nécessitent un nombre suffisant de points étiquetés.

Lee a également montré que la pré-formation non supervisée utilisant des auto-encodeurs de débruitage aide davantage, mais cela semble être une manière distincte d'exploiter la structure dans les données non étiquetées; malheureusement, il n'y avait pas de comparaison avec la pré-formation non supervisée seule (sans pseudo-étiquetage).

Grandvalet et Bengio (2005) ont rapporté que le pseudo-étiquetage bat l'apprentissage supervisé sur les jeux de données CIFAR-10 et SVHN (avec 4000 et 1000 exemples étiquetés, respectivement). Comme ci-dessus, il s'agit de données bien plus étiquetées que les 6 points étiquetés du problème des deux lunes.

Les références

  • Grandvalet et Bengio (2005) . Apprentissage semi-supervisé par minimisation d'entropie.

  • Lee (2013) . Pseudo-étiquette: la méthode d'apprentissage semi-supervisé simple et efficace pour les réseaux de neurones profonds.

  • Oliver et al. (2018) . Évaluation réaliste des algorithmes d'apprentissage semi-supervisés.


5

Ce que vous pourriez oublier dans le fonctionnement de l'autoformation, c'est que:

  1. C'est itératif, pas ponctuel.

  2. Vous utilisez un classificateur qui renvoie des valeurs probabilistes. À chaque itération, vous ajoutez uniquement des pseudo-étiquettes pour les cas dont votre algorithme est le plus sûr.

Dans votre exemple, la première itération n'est peut-être que suffisamment sûre pour étiqueter un ou deux points très près de chacun des points étiquetés. Dans la prochaine itération, la frontière tournera légèrement pour accueillir ces quatre à six points étiquetés, et si elle n'est pas linéaire, elle peut également commencer à se plier légèrement. Répéter.

Ce n'est pas garanti de fonctionner. Cela dépend de votre classificateur de base, de votre algorithme (à quel point vous devez être certain pour attribuer un pseudo-label, etc.), de vos données, etc.

Il existe également d'autres algorithmes plus puissants si vous pouvez les utiliser. Je pense que vous décrivez l'auto-formation, qui est facile à coder, mais vous utilisez un classificateur unique qui examine les mêmes informations à plusieurs reprises. La co-formation utilise plusieurs classificateurs qui examinent chacun des informations différentes pour chaque point. (Ceci est quelque peu analogue aux forêts aléatoires.) Il existe également d'autres techniques semi-supervisées - telles que celles qui se regroupent explicitement - bien que dans l'ensemble "cela fonctionne toujours et c'est le gagnant".

EN RÉPONSE au commentaire: Je ne suis pas un expert dans ce domaine. Nous le considérons comme très applicable à ce que nous faisons généralement avec les clients, donc j'apprends et je n'ai pas toutes les réponses.

Le premier succès lorsque je recherche des aperçus d'apprentissage semi-supervisé est: Enquête sur la littérature sur l'apprentissage semi-supervisé , de 2008. Il y a longtemps, sur le plan informatique, mais il parle des choses que j'ai mentionnées ici.

Je vous entends qu'un classificateur pourrait évaluer les points non étiquetés les plus éloignés des nœuds étiquetés avec la plus grande certitude. D'un autre côté, nos intuitions peuvent nous tromper. Par exemple, considérons le graphique que vous avez obtenu de Wikipedia avec les nœuds noir, blanc et gris.

Tout d'abord, c'est en 2D et les problèmes les plus réalistes seront dans des dimensions plus élevées, où notre intuition nous induit souvent en erreur. L'espace de grande dimension agit différemment de plusieurs façons - certains négatifs et certains réellement utiles.

Deuxièmement, nous pourrions deviner que dans la première itération, les deux points gris les plus à droite et les plus bas seraient étiquetés comme noirs, car le point étiqueté noir est plus proche d'eux que le point étiqueté blanc. Mais si cela se produisait des deux côtés, la frontière de décision verticale s'inclinerait et ne serait plus verticale. Au moins dans mon imagination, s'il s'agissait d'une ligne droite, elle descendrait l'espace vide diagonal entre les deux points étiquetés à l'origine. Il diviserait toujours les deux croissants de manière incorrecte, mais il serait désormais plus aligné sur les données. Une itération continue - en particulier avec une frontière de décision non linéaire - pourrait donner une meilleure réponse que ce que nous prévoyons.

Troisièmement, je ne suis pas sûr qu'une fois étiquetée, toujours étiquetée, c'est comme cela que cela devrait fonctionner. Selon la façon dont vous le faites et le fonctionnement de l'algorithme, vous pourriez finir par incliner la frontière tout en la pliant (en supposant qu'elle n'est pas linéaire), puis certaines parties mal classées des croissants pourraient déplacer leurs étiquettes.

Mon instinct est que ces trois points, combinés à des données appropriées (probablement de dimension supérieure) et à des classificateurs appropriés, peuvent faire mieux qu'un contrôle direct avec un très petit nombre d'échantillons d'entraînement (étiquetés). Aucune garantie, et dans mes expériences, j'ai trouvé - je le blâme sur des ensembles de données trop simples - que la semi-supervision ne peut que s'améliorer légèrement par rapport à la supervision et peut parfois échouer gravement. Là encore, je joue avec deux algorithmes que j'ai créés qui peuvent être bons ou pas.


2
Pourriez-vous développer sur quels types de classificateurs / situations cela fonctionnerait? Ma compréhension de la plupart des classificateurs travaillant sur le type d'exemples de données montrés serait que ce sont les points loin de la limite de décision (par rapport aux points connus) qui obtiendraient une confiance élevée, de sorte que ces queues distales seraient mal classées en toute confiance dans le exemple. (De plus, toute référence / lecture supplémentaire que vous pourriez indiquer concernant l'utilisation efficace du pseudomarquage et des techniques connexes serait appréciée.)
RM

@RM Edited. Comment ça?
Wayne

1

Attention, je ne suis pas un expert de cette procédure. Mon incapacité à produire de bons résultats n'est pas la preuve que la technique ne peut pas fonctionner. De plus, votre image a la description générale de l'apprentissage "semi-supervisé", qui est un vaste domaine avec une variété de techniques.

Je suis d'accord avec votre intuition, je ne vois pas comment une technique comme celle-ci pourrait fonctionner hors de la boîte. En d'autres termes, je pense que vous auriez besoin de beaucoup d'efforts pour le faire fonctionner correctement pour une application spécifique, et cet effort ne serait pas nécessairement utile dans d'autres applications.

J'ai essayé deux instances différentes, l'une avec un ensemble de données en forme de banane comme celui de l'exemple d'image, et un autre ensemble de données plus facile avec deux clusters distribués normaux simples. Dans les deux cas, je n'ai pas pu améliorer le classificateur initial.

Dans une petite tentative pour encourager les choses, j'ai ajouté du bruit à toutes les probabilités prédites dans l'espoir que cela entraînerait de meilleurs résultats.

Le premier exemple, j'ai recréé l'image ci-dessus aussi fidèlement que possible. Je ne pense pas que le pseudo-étiquetage puisse aider du tout ici.

Examlpe one, données en forme de banane

Le deuxième exemple est beaucoup plus facile, mais même ici, il ne parvient pas à améliorer le classificateur initial. J'ai spécifiquement choisi le point étiqueté du centre de la classe gauche, et le côté droit de la classe droite en espérant qu'il se déplacerait dans la bonne direction, pas de chance.

Exemple deux, données 2D normalement distribuées] =

Code pour l'exemple 1 (l'exemple 2 est suffisamment similaire pour que je ne le reproduise pas ici):

import numpy as np
from sklearn.ensemble import RandomForestClassifier
import matplotlib.pyplot as plt
import seaborn

np.random.seed(2018-10-1)
N = 1000

_x = np.linspace(0, np.pi, num=N)
x0 = np.array([_x, np.sin(_x)]).T
x1 = -1 * x0 + [np.pi / 2, 0]

scale = 0.15
x0 += np.random.normal(scale=scale, size=(N, 2))
x1 += np.random.normal(scale=scale, size=(N, 2))

X = np.vstack([x0, x1])

proto_0 = np.array([[0], [0]]).T # the single "labeled" 0
proto_1 = np.array([[np.pi / 2], [0]]).T # the single "labeled" 1

model = RandomForestClassifier()
model.fit(np.vstack([proto_0, proto_1]), np.array([0, 1]))
for itercount in range(100):
    labels = model.predict_proba(X)[:, 0]
    labels += (np.random.random(labels.size) - 0.5) / 10 # add some noise
    labels = labels > 0.5
    model = RandomForestClassifier()
    model.fit(X, labels)

f, axs = plt.subplots(1, 2, squeeze=True, figsize=(10, 5))

axs[0].plot(x0[:, 0], x0[:, 1], '.', alpha=0.25, label='unlabeled x0')
axs[0].plot(proto_0[:, 0], proto_0[:, 1], 'o', color='royalblue', markersize=10, label='labeled x0')
axs[0].plot(x1[:, 0], x1[:, 1], '.', alpha=0.25, label='unlabeled x1')
axs[0].plot(proto_1[:, 0], proto_1[:, 1], 'o', color='coral', markersize=10, label='labeled x1')
axs[0].legend()

axs[1].plot(X[~labels, 0], X[~labels, 1], '.', alpha=0.25, label='predicted class 0')
axs[1].plot(X[labels, 0], X[labels, 1], '.', alpha=0.25, label='predicted class 1')
axs[1].plot([np.pi / 4] * 2, [-1.5, 1.5], 'k--', label='halfway between labeled data')
axs[1].legend()
plt.show()

1

Voici ma supposition (je ne sais pas grand-chose sur ce sujet non plus, je voulais juste ajouter mes deux cents à cette discussion).

Je pense que vous avez raison, il est inutile de former un modèle classique et d'utiliser ses prédictions comme données, car comme vous le dites, rien n'incite l'optimiseur à faire mieux. Je suppose que les algorithmes à démarrage aléatoire sont plus susceptibles de trouver le même optimum car ils seraient "plus sûrs" que l'optimum trouvé précédemment est correct, en raison de l'ensemble de données plus important, mais cela n'est pas pertinent.

Cela dit, la première réponse que vous avez reçue a un point - cet exemple sur Wikipédia parle de clustering, et je pense que cela fait toute la différence. Lorsque vous avez des données non étiquetées, vous avez essentiellement un tas de points non étiquetés se trouvant sur un "espace d'entités latentes" partagé comme les autres étiquetés. Vous ne pouvez vraiment faire mieux qu'un algorithme de classification formé sur les données étiquetées, si vous pouvez découvrir le fait que les points non étiquetés peuvent être séparés puis classés en fonction de la classe à laquelle appartiennent les points étiquetés, sur cet espace d' entités latentes.

Ce que je veux dire, c'est que vous devez faire ceci:

lunebelleunetuneclusterjengclunessjeFjecunetjeon

... puis répétez avec des données non étiquetées. Ici, les limites de cluster apprises ne seront pas les mêmes, car le clustering ne se soucie pas des étiquettes de classe, il ne tient qu'à transformer l'espace des fonctionnalités. Le clustering génère un espace d'entités latentes, sur lequel la limite de classification est apprise, et cela ne dépend que des données étiquetées.

Les algorithmes qui n'effectuent aucune sorte de clustering, je crois, ne pourront pas changer leur optimum en fonction de l'ensemble de données non étiqueté.

Soit dit en passant, l'image que vous avez liée fait du bon travail, je pense d'expliquer ce qui se passe ici; une frontière de décision est apprise basée uniquement sur l'algorithme de clustering. Vous n'avez aucune idée des bonnes classes ici - il se peut qu'elles soient toutes aléatoires - nous ne savons pas. Tout ce que nous pouvons maintenant, c'est qu'il semble y avoir une certaine structure dans l'espace des fonctionnalités, et il semble y avoir un mappage de l'espace des fonctionnalités vers les étiquettes de classe.

Je n'ai pas vraiment de références mais sur ce post Reddit , si je comprends bien, il y a une discussion sur un GAN effectuant un apprentissage semi-supervisé. C'est un de mes calculs qu'il effectue implicitement un regroupement, suivi d'une classification.

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.