05 · Bez nadzoru · 4 min czytania · aktualizacja
Czym jest uczenie półnadzorowane i kiedy nieopisane dane pomagają?
W skrócie
Uczenie półnadzorowane łączy kilka opisanych przykładów z mnóstwem nieopisanych. Działa, gdy granice klas biegną przez rzadkie obszary danych.
Co to jest
Uczenie półnadzorowane (semi-supervised learning) to trenowanie modelu na danych, z których tylko niewielka część ma etykiety, a reszta — często zdecydowana większość — jest nieopisana. Nieopisane przykłady nie mówią, jaka jest odpowiedź, ale pokazują, jak dane są rozłożone, a to pomaga poprowadzić granicę między klasami we właściwym miejscu.
Typowa sytuacja: masz 100 tysięcy zdjęć rentgenowskich, ale radiolog opisał tylko 500. Albo milion e-maili, z których 2 tysiące oznaczono jako spam lub nie. Etykietowanie jest drogie, surowe dane — tanie. Pytanie brzmi, czy da się wycisnąć coś z tej taniej reszty.
Mechanizm — dlaczego tak działa
Nieopisane dane pomagają tylko wtedy, gdy ich rozkład niesie informację o etykietach. Formalizują to trzy założenia. Gładkość: punkty bliskie sobie mają zwykle tę samą etykietę. Klastrowość: punkty z jednego skupiska należą zwykle do jednej klasy, więc granica powinna biec przez obszary rzadkie, a nie przecinać gęste chmury. Rozmaitość: dane leżą na niskowymiarowej powierzchni, a odległość liczy się wzdłuż niej. Gdy te założenia nie zachodzą — np. dwie klasy całkowicie się przenikają — nieopisane dane mogą nawet zaszkodzić.
Główne rodziny metod:
Propagacja etykiet. Buduje się graf łączący każdy punkt z najbliższymi sąsiadami. Znane etykiety „rozlewają się” po krawędziach grafu jak barwnik, aż wszystkie punkty dostaną rozkład prawdopodobieństwa klas. Etykieta przechodzi łatwo przez gęsto połączony obszar, trudno przez rzadki — to dokładnie założenie klastrowości.
Samouczenie (self-training, pseudoetykiety). Model uczony na opisanych danych przewiduje etykiety nieopisanych; te, co do których jest najbardziej pewny, dołącza się do treningu i proces powtarza. Ryzyko: błędna, ale pewna pseudoetykieta wzmacnia sama siebie (potwierdzanie własnych błędów).
Regularyzacja spójności. Model ma dawać te same przewidywania dla różnych przeróbek tego samego nieopisanego przykładu (szum, augmentacja). FixMatch łączy to z pseudoetykietami i jest punktem odniesienia w uczeniu głębokim.
Pretrening + dostrajanie. Najpierw uczenie samonadzorowane na wszystkich danych, potem dostrojenie na opisanych. Dziś to najczęstsza praktyczna droga.
Ważne zastrzeżenie z literatury: wiele metod półnadzorowanych wypada gorzej, gdy porówna się je uczciwie z dobrze nastrojonym modelem nadzorowanym albo transferem z pretrenowanej sieci — i gdy zbiór walidacyjny ma realistyczny, mały rozmiar.
Na przykładzie
Zbiór Digits: 1797 cyfr 8×8, z czego 1257 treningowych i 540 testowych. Etykiety zostawiamy tylko dla 50 obrazów treningowych (po 5 na cyfrę); pozostałych 1207 jest nieopisanych. Wyniki uśredniamy po 5 losowaniach opisanych przykładów. Regresja logistyczna na samych 50 opisanych obrazach: 84,4% trafności na zbiorze testowym. Propagacja etykiet (LabelSpreading, graf 7 najbliższych sąsiadów) korzystająca ze wszystkich 1257 obrazów: 93,0% — błąd spada z 15,6% do 7,0%, czyli o ponad połowę, bez ani jednej dodatkowej etykiety.
Samouczenie z maszyną wektorów nośnych (próg pewności 0,9) daje skromniejsze 85,6%. Górną granicę wyznacza model z kompletem 1257 etykiet: 97,0%. Cyfry to niemal idealny przypadek dla propagacji: obrazy tej samej cyfry tworzą zwarte skupiska, a sąsiedztwo w przestrzeni pikseli dobrze odzwierciedla podobieństwo klas.
Dane: Digits (ręcznie pisane cyfry 8×8)
W praktyce
- W scikit-learn nieopisane przykłady oznacza się etykietą
-1; dostępne sąLabelPropagation,LabelSpreadingiSelfTrainingClassifier(opakowuje dowolny klasyfikator zpredict_proba). LabelSpreading(kernel="knn", n_neighbors=7)jest odporniejszy na szum niż wersja z jądrem RBF; skaluj cechy przed budową grafu.- W samouczeniu ustaw wysoki próg pewności (
threshold) i obserwuj, jak zmienia się wynik walidacyjny z każdą iteracją. - Zbiór walidacyjny musi mieć prawdziwe etykiety i nie może przeciekać do treningu — inaczej strojenie zjada całą korzyść.
- Zawsze porównaj z dwiema kontrolami: model nadzorowany na samych etykietach i transfer z pretrenowanego modelu.
- Często tańsze od algorytmicznych sztuczek jest dołożenie kilkuset etykiet, wybranych np. metodą aktywnego uczenia.
Najczęstsze pytania
- Czym różni się uczenie półnadzorowane od samonadzorowanego?
- Półnadzorowane ma od początku cel nadzorowany i trochę etykiet; nieopisane dane pomagają lepiej poprowadzić granicę. Samonadzorowane w ogóle nie potrzebuje ludzkich etykiet — tworzy zadanie pomocnicze z samych danych, a etykiety pojawiają się dopiero przy dostrajaniu. W praktyce oba podejścia często się łączy.
- Kiedy uczenie półnadzorowane nie pomaga?
- Gdy klasy nie tworzą oddzielnych skupisk, gdy nieopisane dane pochodzą z innego rozkładu niż opisane (np. inne urządzenie, inny okres) albo gdy model przyjmuje własne błędne pseudoetykiety za prawdę. Wtedy wynik może być gorszy niż przy samych etykietach.
- Ile etykiet potrzeba?
- Nie ma stałej liczby — zależy od tego, jak wyraźne są skupiska. W przykładzie z cyframi wystarczyło 5 opisanych obrazów na klasę, by propagacja etykiet osiągnęła 93%. Na danych, gdzie klasy się przenikają, nawet setki etykiet na klasę mogą nie wystarczyć.
Źródła
- Chapelle O., Schölkopf B., Zien A. (red.), „Semi-Supervised Learning”, MIT Press 2006.
- Zhou D., Bousquet O., Lal T. N., Weston J., Schölkopf B., „Learning with Local and Global Consistency”, Advances in Neural Information Processing Systems 16 (NIPS 2003).
- Sohn K. i in., „FixMatch: Simplifying Semi-Supervised Learning with Consistency and Confidence”, NeurIPS 2020.
- Oliver A., Odena A., Raffel C., Cubuk E. D., Goodfellow I., „Realistic Evaluation of Deep Semi-Supervised Learning Algorithms”, NeurIPS 2018.
- Dokumentacja scikit-learn, „Semi-supervised learning”: https://scikit-learn.org/stable/modules/semi_supervised.html