Warum wirkt sich die Verwendung der Pseudomarkierung nicht trivial auf die Ergebnisse aus?

16

Ich habe mich mit halbüberwachten Lernmethoden befasst und bin auf das Konzept der "Pseudo-Kennzeichnung" gestoßen.

So wie ich es verstehe, haben Sie mit Pseudo-Labeling eine Reihe von beschrifteten Daten sowie eine Reihe von unbeschrifteten Daten. Sie trainieren zunächst ein Modell nur mit den beschrifteten Daten. Sie verwenden diese Anfangsdaten dann, um die unbeschrifteten Daten zu klassifizieren (vorläufige Beschriftungen anzuhängen). Anschließend geben Sie sowohl die beschrifteten als auch die unbeschrifteten Daten in Ihr Modelltraining zurück und passen sie sowohl an die bekannten als auch an die vorhergesagten Etiketten (neu) an. (Wiederholen Sie diesen Vorgang und kennzeichnen Sie ihn erneut mit dem aktualisierten Modell.)

Die behaupteten Vorteile bestehen darin, dass Sie die Informationen über die Struktur der unbeschrifteten Daten verwenden können, um das Modell zu verbessern. Eine Variation der folgenden Abbildung wird häufig gezeigt, um zu "demonstrieren", dass der Prozess eine komplexere Entscheidungsgrenze basierend auf dem Ort der (unbeschrifteten) Daten festlegen kann.

Entscheidungsgrenze bei halbüberwachten Methoden

Bild aus Wikimedia Commons von Techerin CC BY-SA 3.0

Ich kaufe diese vereinfachende Erklärung jedoch nicht ganz. Naiv, wenn das ursprüngliche Trainingsergebnis nur mit Beschriftung die obere Entscheidungsgrenze wäre, würden die Pseudo-Beschriftungen basierend auf dieser Entscheidungsgrenze zugewiesen. Das heißt, die linke Hand der oberen Kurve wäre pseudo-markiert weiß und die rechte Hand der unteren Kurve wäre pseudo-markiert schwarz. Sie würden die schöne geschwungene Entscheidungsgrenze nach der Umschulung nicht erhalten, da die neuen Pseudo-Labels einfach die aktuelle Entscheidungsgrenze verstärken würden.

Oder anders ausgedrückt, die derzeitige Entscheidungsgrenze nur für Beschriftungen hätte eine perfekte Vorhersagegenauigkeit für die unbeschrifteten Daten (wie wir sie verwendet haben). Es gibt keine treibende Kraft (kein Gradient), die dazu führen würde, dass wir den Ort dieser Entscheidungsgrenze ändern, indem wir einfach die pseudo-markierten Daten hinzufügen.

Habe ich Recht, wenn ich denke, dass die im Diagramm enthaltene Erklärung fehlt? Oder fehlt mir etwas? Wenn nicht, was ist der Vorteil von Pseudo-Labels, da die Entscheidungsgrenze vor der Umschulung eine perfekte Genauigkeit gegenüber den Pseudo-Labels aufweist?

RM
quelle

Antworten:

13

Pseudo-Labeling funktioniert bei dem gegebenen Spielzeugproblem nicht

Oliver et al. (2018) untersuchten verschiedene halbüberwachte Lernalgorithmen. Die erste Abbildung zeigt, wie die Pseudo-Kennzeichnung (und andere Methoden) bei demselben Spielzeugproblem wie in Ihrer Frage (als "Zwei-Monde" -Datensatz bezeichnet) funktioniert:

Geben Sie hier die Bildbeschreibung ein

Das Diagramm zeigt die markierten und unbeschrifteten Datenpunkte sowie die Entscheidungsgrenzen, die nach dem Training eines neuronalen Netzes unter Verwendung verschiedener halbüberwachter Lernmethoden erhalten wurden. Wie Sie vermutet haben, funktioniert die Pseudo-Kennzeichnung in dieser Situation nicht gut. Sie sagen, dass Pseudo-Labeling "eine einfache Heuristik ist, die in der Praxis weit verbreitet ist, wahrscheinlich wegen ihrer Einfachheit und Allgemeinheit". Aber: "Obwohl intuitiv, kann es dennoch zu falschen Ergebnissen führen, wenn die Vorhersagefunktion nicht hilfreiche Ziele für [die unbeschrifteten Daten] erzeugt, wie in Abb. 1 gezeigt."

Warum und wann funktioniert Pseudo-Labeling?

Die Pseudo-Kennzeichnung wurde von Lee (2013) eingeführt, sodass Sie dort weitere Details finden.

Die Clusterannahme

Die theoretische Begründung, die Lee für die Pseudomarkierung gegeben hat, ist, dass sie der Entropie-Regularisierung ähnlich ist. Die Entropie-Regularisierung (Grandvalet und Bengio 2005) ist eine weitere halbüberwachte Lerntechnik, die den Klassifizierer dazu ermutigt, sichere Vorhersagen für unbeschriftete Daten zu treffen. Zum Beispiel würden wir es vorziehen, wenn einem unbeschrifteten Punkt eine hohe Wahrscheinlichkeit zugewiesen wird, in einer bestimmten Klasse zu sein, anstatt diffuse Wahrscheinlichkeiten, die über mehrere Klassen verteilt sind. Der Zweck besteht darin, die Annahme auszunutzen, dass die Daten nach Klassen geclustert sind (im halbüberwachten Lernen als "Clusterannahme" bezeichnet). In der Nähe befindliche Punkte haben also dieselbe Klasse, und Punkte in verschiedenen Klassen sind weiter voneinander getrennt, sodass die tatsächlichen Entscheidungsgrenzen durch Bereiche mit geringer Dichte des Eingaberaums verlaufen.

Warum Pseudo-Labeling fehlschlagen könnte

Angesichts des oben Gesagten erscheint es vernünftig zu vermuten, dass die Clusterannahme eine notwendige Voraussetzung für das Funktionieren der Pseudomarkierung ist. Dies ist jedoch eindeutig nicht ausreichend, da das oben beschriebene Zwei-Monde-Problem die Cluster-Annahme erfüllt, die Pseudo-Markierung jedoch nicht funktioniert. In diesem Fall besteht das Problem vermutlich darin, dass nur sehr wenige markierte Punkte vorhanden sind und die richtige Clusterstruktur anhand dieser Punkte nicht identifiziert werden kann. Wie Oliver et al. beschreiben (und wie Sie in Ihrer Frage hervorheben), führen die resultierenden Pseudo-Labels den Klassifikator zur falschen Entscheidungsgrenze. Vielleicht würde es bei mehr beschrifteten Daten funktionieren. Vergleichen Sie dies beispielsweise mit dem unten beschriebenen MNIST-Fall, in dem die Pseudomarkierung funktioniert.

Wo es funktioniert

Lee (2013) zeigte, dass Pseudomarkierung im MNIST-Datensatz hilfreich sein kann (mit 100-3000 markierten Beispielen). In Abb. In 1 dieses Dokuments können Sie sehen, dass ein neuronales Netz, das an 600 markierten Beispielen (ohne halbüberwachtes Lernen) trainiert wurde, bereits die Clusterstruktur zwischen Klassen wiederherstellen kann . Es scheint, dass Pseudomarkierung dann hilft , die Struktur zu verfeinern . Beachten Sie, dass dies anders ist als im Beispiel mit zwei Monden, bei dem mehrere markierte Punkte nicht ausreichten, um die richtigen Cluster zu lernen.

Das Papier erwähnt auch, dass die Ergebnisse mit nur 100 markierten Beispielen instabil waren. Dies unterstützt wiederum die Idee, dass die Pseudomarkierung für die anfänglichen Vorhersagen empfindlich ist und dass gute anfängliche Vorhersagen eine ausreichende Anzahl von markierten Punkten erfordern.

Lee zeigte auch, dass unbeaufsichtigtes Pre-Training mit Autoencodern zum Entrauschen weiter hilft, aber dies scheint eine separate Möglichkeit zu sein, die Struktur in den unbeschrifteten Daten auszunutzen. Leider gab es keinen Vergleich mit unbeaufsichtigtem Pre-Training allein (ohne Pseudo-Labeling).

Grandvalet und Bengio (2005) berichteten, dass Pseudomarkierungsschläge das Lernen in den CIFAR-10- und SVHN-Datensätzen überwachen (mit 4000 bzw. 1000 markierten Beispielen). Wie oben sind dies viel mehr markierte Daten als die 6 markierten Punkte im Zwei-Monde-Problem.

Verweise

user20160
quelle
5

Was Sie bei der Funktionsweise des Selbsttrainings möglicherweise übersehen, ist Folgendes:

  1. Es ist iterativ, nicht einmalig.

  2. Sie verwenden einen Klassifikator, der Wahrscheinlichkeitswerte zurückgibt. Bei jeder Iteration fügen Sie nur Pseudo-Labels für die Fälle hinzu, bei denen Ihr Algorithmus am sichersten ist.

In Ihrem Beispiel ist die erste Iteration möglicherweise nur sicher genug, um einen oder zwei Punkte sehr nahe an jedem der markierten Punkte zu kennzeichnen. In der nächsten Iteration dreht sich die Grenze leicht, um diese vier bis sechs markierten Punkte aufzunehmen, und wenn sie nicht linear ist, kann sie sich auch leicht verbiegen. Wiederholen.

Es ist nicht garantiert zu funktionieren. Dies hängt von Ihrem Basisklassifikator, Ihrem Algorithmus (wie sicher Sie sein müssen, um ein Pseudo-Label zuzuweisen usw.), Ihren Daten usw. ab.

Es gibt auch andere Algorithmen, die leistungsfähiger sind, wenn Sie sie verwenden können. Ich glaube, Sie beschreiben das Selbsttraining, das leicht zu codieren ist, aber Sie verwenden einen einzelnen Klassifikator, der dieselben Informationen wiederholt betrachtet. Beim Co-Training werden mehrere Klassifikatoren verwendet, die jeweils unterschiedliche Informationen für jeden Punkt anzeigen. (Dies ist etwas analog zu Random Forests.) Es gibt auch andere halbüberwachte Techniken - wie jene, die explizit gruppieren - obwohl insgesamt kein "dies funktioniert immer und dies ist der Gewinner".

Als Antwort auf den Kommentar: Ich bin kein Experte auf diesem Gebiet. Wir sehen es als sehr zutreffend für das, was wir normalerweise mit Kunden machen, also lerne ich und habe nicht alle Antworten.

Der Top-Hit bei der Suche nach halbüberwachten Lernübersichten ist: Semi-Supervised Learning Literature Survey , aus dem Jahr 2008. Das ist in Bezug auf Computer schon lange her, aber es spricht über die Dinge, die ich hier erwähnt habe.

Ich höre Sie, dass ein Klassifizierer unbeschriftete Punkte, die am weitesten von den beschrifteten Knoten entfernt sind, mit größter Sicherheit bewerten könnte. Andererseits können uns unsere Intuitionen täuschen. Betrachten wir zum Beispiel die Grafik, die Sie von Wikipedia mit den schwarzen, weißen und grauen Knoten erhalten haben.

Erstens ist dies in 2D und die realistischsten Probleme werden in höheren Dimensionen auftreten, wo unsere Intuition uns oft irreführt. Der hochdimensionale Raum verhält sich in vielerlei Hinsicht unterschiedlich - einige negativ und andere tatsächlich hilfreich.

Zweitens könnten wir vermuten, dass in der ersten Iteration die beiden am weitesten rechts und am weitesten unten liegenden Graupunkte als schwarz gekennzeichnet würden, da der schwarz markierte Punkt näher an ihnen liegt als der weiß markierte Punkt. Wenn dies jedoch auf beiden Seiten geschehen würde, würde sich die vertikale Entscheidungsgrenze immer noch neigen und nicht mehr vertikal sein. Zumindest in meiner Vorstellung würde eine gerade Linie den diagonalen leeren Raum zwischen den beiden ursprünglich gekennzeichneten Punkten hinuntergehen. Es würde die beiden Halbmonde immer noch falsch aufteilen, aber es würde jetzt mehr auf die Daten ausgerichtet sein. Eine fortgesetzte Iteration - insbesondere mit einer nichtlinearen Entscheidungsgrenze - könnte eine bessere Antwort liefern, als wir erwarten.

Drittens bin ich mir nicht sicher, ob es tatsächlich funktionieren soll, wenn es einmal beschriftet oder immer beschriftet ist. Abhängig davon, wie Sie es tun und wie der Algorithmus funktioniert, neigen Sie möglicherweise dazu, zuerst die Grenze zu kippen, während Sie sie biegen (vorausgesetzt, nicht linear), und dann können einige der falsch klassifizierten Teile der Halbmonde ihre Beschriftungen verschieben.

Mein Bauch ist, dass diese drei Punkte, kombiniert mit geeigneten (wahrscheinlich höherdimensionalen) Daten und geeigneten Klassifikatoren, besser abschneiden können als ein Straight-up, das mit einer sehr kleinen Anzahl von Trainingsproben (beschriftet) überwacht wird. Keine Garantie, und in meinen Experimenten habe ich festgestellt - ich beschuldige zu einfache Datensätze -, dass sich halbüberwacht nur geringfügig gegenüber überwacht verbessert und manchmal schlecht ausfällt. Andererseits spiele ich mit zwei Algorithmen, die ich erstellt habe und die möglicherweise tatsächlich gut sind oder nicht.

Wayne
quelle
1
Könnten Sie näher erläutern, auf welche Arten von Klassifikatoren / Situationen es funktionieren würde? Mein Verständnis der meisten Klassifikatoren, die an der Art der gezeigten Beispieldaten arbeiten, wäre, dass es Punkte sind, die weit von der Entscheidungsgrenze entfernt sind (im Vergleich zu nahe an den bekannten Punkten), die ein hohes Vertrauen erhalten würden, so dass diese distalen Schwänze sicher falsch klassifiziert würden Beispiel. (Darüber hinaus sind alle Referenzen / weiterführenden Informationen, auf die Sie bezüglich der effektiven Verwendung von Pseudolabeling und verwandten Techniken hinweisen könnten, willkommen.)
RM
@RM bearbeitet. Wie ist das?
Wayne
1

Achtung, ich bin kein Experte für dieses Verfahren. Mein Versagen, gute Ergebnisse zu erzielen, ist kein Beweis dafür, dass die Technik nicht zum Funktionieren gebracht werden kann. Darüber hinaus enthält Ihr Bild die allgemeine Beschreibung des "halbüberwachten" Lernens, das ein weites Gebiet mit einer Vielzahl von Techniken darstellt.

Ich stimme Ihrer Intuition zu, ich sehe nicht, wie eine solche Technik sofort funktionieren könnte. Mit anderen Worten, ich denke, Sie würden viel Aufwand benötigen , damit es für eine bestimmte Anwendung gut funktioniert, und dieser Aufwand wäre in anderen Anwendungen nicht unbedingt hilfreich.

Ich habe zwei verschiedene Instanzen ausprobiert, eine mit einem bananenförmigen Datensatz wie dem im Beispielbild und einen weiteren einfacheren Datensatz mit zwei einfachen normalverteilten Clustern. In beiden Fällen konnte ich den anfänglichen Klassifikator nicht verbessern.

Als kleinen Versuch, Dinge zu fördern, fügte ich allen vorhergesagten Wahrscheinlichkeiten Rauschen hinzu, in der Hoffnung, dass dies zu besseren Ergebnissen führen würde.

Im ersten Beispiel habe ich das obige Bild so originalgetreu wie möglich neu erstellt. Ich glaube nicht, dass die Pseudo-Kennzeichnung hier überhaupt helfen kann.

Beispiel eins: bananenförmige Daten

Das zweite Beispiel ist viel einfacher, aber selbst hier kann es den anfänglichen Klassifikator nicht verbessern. Ich habe speziell den einen markierten Punkt aus der Mitte der linken Klasse und die rechte Seite der rechten Klasse ausgewählt, in der Hoffnung, dass er sich in die richtige Richtung verschieben würde, kein solches Glück.

Beispiel zwei, normalverteilte 2D-Daten] =

Code zum Beispiel 1 (Beispiel 2 ist ähnlich genug, dass ich hier nicht duplizieren werde):

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()
kbrose
quelle
1

Hier ist meine Vermutung (ich weiß auch nicht viel über dieses Thema, wollte nur meine zwei Cent zu dieser Diskussion hinzufügen).

Ich denke, Sie haben Recht, es macht keinen Sinn, ein klassisches Modell zu trainieren und seine Vorhersagen als Daten zu verwenden, denn wie Sie sagen, gibt es für den Optimierer keinen Anreiz, es besser zu machen. Ich würde vermuten, dass randomisierte Startalgorithmen mit größerer Wahrscheinlichkeit dasselbe Optimum finden, da sie aufgrund des größeren Datensatzes "sicherer" wären, dass das zuvor gefundene Optimum korrekt ist, aber dies ist irrelevant.

Die erste Antwort, die Sie erhalten haben, hat einen Punkt - dieses Beispiel auf Wikipedia spricht von Clustering, und ich denke, das macht den Unterschied. Wenn Sie unbeschriftete Daten haben, haben Sie im Wesentlichen eine Reihe von unbeschrifteten Punkten, die auf einem gemeinsamen "latenten Merkmalsraum" liegen, wie die anderen beschrifteten. Sie können nur dann wirklich bessere Ergebnisse erzielen als ein Klassifizierungsalgorithmus, der auf den beschrifteten Daten trainiert wird, wenn Sie die Tatsache aufdecken können, dass die unbeschrifteten Punkte in diesem latenten Merkmalsraum getrennt und dann basierend auf der Klasse klassifiziert werden können, zu der die beschrifteten Punkte gehören.

Was ich meine ist, dass Sie dies tun müssen:

leinbelleddeinteinclusterichnGcleinssichfichceintichÖn

... und dann mit unbeschrifteten Daten wiederholen. Hier sind die erlernten Clustergrenzen nicht dieselben, da beim Clustering keine Klassenbeschriftungen berücksichtigt werden, sondern lediglich der Feature-Space transformiert wird. Das Clustering erzeugt einen latenten Merkmalsraum, an dem die Klassifizierungsgrenze gelernt wird, und dies hängt nur von beschrifteten Daten ab.

Ich glaube, Algorithmen, die keinerlei Clustering durchführen, können ihr Optimum basierend auf dem unbeschrifteten Datensatz nicht ändern.

Übrigens, das Bild, das Sie verlinkt haben, macht einen fairen Job. Ich denke daran zu erklären, was hier vor sich geht. Eine Entscheidungsgrenze wird ausschließlich basierend auf dem Clustering-Algorithmus gelernt. Sie haben keine Ahnung, welche Klassen hier richtig sind - es kann sein, dass sie alle zufällig sind - wir wissen es nicht. Jetzt können wir nur noch eine gewisse Struktur im Feature-Space und eine gewisse Zuordnung vom Feature-Space zu den Klassenbeschriftungen vornehmen.

Ich habe nicht wirklich Referenzen, aber in diesem Reddit-Beitrag gibt es , wie ich es verstehe, eine Diskussion über eine GAN, die halbüberwachtes Lernen durchführt. Es ist eine Vermutung von mir, dass es implizit ein Clustering durchführt, gefolgt von einer Klassifizierung.

InfProbSciX
quelle