
Co-Training
Eine weitere Technik im Bereich des halbüberwachten Lernens ist das Co-Training. Hierbei werden mehrere Modelle unabhängig voneinander trainiert, auf verschiedenen Teilmengen der Daten. Diese Modelle tauschen dann Informationen aus und lernen voneinander. Diese Methode ist besonders effektiv, wenn verschiedene Modelle unterschiedliche Aspekte der Daten erfassen. Damit ist gemeint, dass jedes Modell spezifische Merkmale oder Informationen der Daten fokussiert, sodass durch den Informationsaustausch zwischen den Modellen ein umfassenderes Verständnis und bessere Vorhersagen erzielt werden können. Im Folgenden sind die einzelnen Schritte des Co-Trainings dargestellt:
Unabhängiges Training auf verschiedenen Teilmengen: Mehrere Modelle werden auf separaten Teilmengen der Daten trainiert, wobei jedes Modell nur einen Teil der verfügbaren Informationen nutzt.
Austausch von Informationen zwischen den Modellen: Nach dem unabhängigen Training tauschen die Modelle Informationen aus, indem sie Vorhersagen oder Wahrscheinlichkeiten für die nicht gelabelten Daten des anderen Modells verwenden.
Konsensbildung oder Gewichtsübertragung: Die ausgetauschten Informationen werden verwendet, um konsistente Vorhersagen zu generieren oder Gewichte zu aktualisieren, um die Modelle zu verbessern.
Iterativer Prozess: Der Informationsaustausch und das Training werden iterativ durchgeführt, um die Leistung der Modelle schrittweise zu verbessern.
Validierung und Evaluierung: Die kombinierten Modelle werden auf ihre Leistungsfähigkeit anhand eines Validierungsdatensatzes evaluiert, um sicherzustellen, dass sie effektiv auf neuen, ungelabelten Daten generalisieren können.
Im Co-Training-Prozess werden Modelle auf verschiedenen Teilmengen trainiert und tauschen anschließend Informationen aus, indem sie Vorhersagen der Daten des jeweils anderen Modells nutzen. Die Vor- und Nachteile des Co-Trainings werden im folgenden Abschnitt beleuchtet:
Vorteile:
Effektive Nutzung von unterschiedlichen Perspektiven: Durch das Training mehrerer Modelle auf verschiedenen Teilmengen der Daten und den anschließenden Austausch von Informationen können verschiedene Aspekte der Daten erfasst und genutzt werden, was zu einem umfassenderen Verständnis führt.
Verbesserte Generalisierungsfähigkeit: Der Informationsaustausch zwischen den Modellen ermöglicht es, konsistente Vorhersagen zu generieren und die Modelle zu verbessern, was letztendlich zu einer besseren Generalisierungsfähigkeit auf neuen, ungelabelten Daten führt.
Robustheit gegenüber Rauschen und Fehlern: Durch die Konsensbildung oder den Informationsaustausch können Fehler und Rauschen in den Vorhersagen reduziert werden, was zu robusteren Modellen führt.
Flexibilität und Anpassungsfähigkeit: Co-Training ist flexibel und kann auf verschiedene Problemstellungen und Datensätzen angewendet werden, da es sich an die spezifischen Merkmale der Daten anpassen kann.
Nachteile:
Notwendigkeit mehrerer Modelle: Co-Training erfordert das Training und die Wartung mehrerer Modelle, was zu einem höheren Rechenaufwand führen kann, insbesondere bei großen Datensätzen.
Komplexität des Informationsaustauschs: Der Informationsaustausch zwischen den Modellen kann komplex sein und erfordert möglicherweise zusätzliche Mechanismen zur Konsensbildung oder Gewichtsübertragung, was die Implementierung und das Verständnis erschweren kann.
Abhängigkeit von der Diversität der Modelle: Die Effektivität von Co-Training hängt davon ab, dass die trainierten Modelle unterschiedliche Aspekte der Daten erfassen. Wenn die Modelle zu ähnlich sind, kann der Informationsaustausch weniger effektiv sein.
Der bereitgestellte Code zeigt die Anwendung des Co-Training-Verfahrens, bei dem zwei Klassifikationsmodelle iterativ sowohl mit gelabelten als auch ungelabelten Daten trainiert werden. Durch die Nutzung der Vorhersagen beider Modelle werden zuverlässige Labels für die ungelabelten Daten generiert, wodurch die Leistung der Modelle im Laufe der Iterationen verbessert wird.
# Aufteilen der Daten in gelabelte und ungelabelte
X_labeled, X_unlabeled, y_labeled, _ = train_test_split(X, y)
# Bilder in obere und untere Hälfte teilen
X_labeled_upper_half, X_labeled_lower_half = ...
X_unlabeled_upper_half, X_unlabeled_lower_half= ...
# Definition eines einfachen Klassifikationsmodells
def create_base_model(input_shape):
model = tf.keras.Sequential([...])
return model
# Erstellen zweier Klassifikationsmodelle
model_1 = create_base_model(...)
model_2 = create_base_model(...)
# Kompilieren der Modelle
model_1.compile(...)
model_2.compile(...)
# Co-training iterations
# Durchführung von 5 Iteratrion des Co-Trainings mit ungelabelten Daten
for co_iter in range(5):
# Training von model_1 mit gelabelten Daten (obere Hälfte)
model_1.fit(X_labeled_upper_half, y_labeled)
# Training von model_2 mit gelabelten Daten (untere Hälfte)
model_2.fit(X_labeled_lower_half, y_labeled)
# Vorhersagen auf ungelabelten Daten für beide Modelle
pseudo_labels_1 = model_1.predict(X_unlabeled_upper_half)
pseudo_labels_2 = model_2.predict(X_unlabeled_lower_half)
# Auswahl der zuverlässigsten Vorhersagen
confident_predictions_1 = np.max(pseudo_labels_1, axis=1) > 0.8
confident_predictions_2 = np.max(pseudo_labels_2, axis=1) > 0.8
# Daten und pseudo label erhalten, wenn beide Modelle zuversichtlich sind
# Daten und pseudo label erhalten, wenn ein Modell zuversichtlich ist
# Kombinieren der zuversichtlichen Vorhersagen
...
# Hinzufügen der zuverlässigen Vorhersagen zu den gelabelten Daten
X_labeled_upper_half = np.concatenate([X_labeled_upper_half, ...])
X_labeled_lower_half = np.concatenate([X_labeled_lower_half, ...])
y_labeled = np.concatenate([y_labeled, ...])
# Entfernen von Daten aus X_unlabeled, die zu X_labeled hinzugefügt werden
X_unlabeled_upper_half = X_unlabeled_upper_half[...]
X_unlabeled_lower_half = X_unlabeled_lower_half[...]
# Evaluierung auf Testdaten
test_accuracy_model_1 = accuracy_score(y_test, np.argmax(model_1.predict(X_test_upper), axis=1))
test_accuracy_model_2 = accuracy_score(y_test, np.argmax(model_2.predict(X_test_lower), axis=1))
Mehr erfahren: YT-The Morpheus Tutorial/Semi Supervised Learning #3 - Co-Training, CMU/Combining Labeled and Unlabeled Data with Co-Training
Last updated