ML Atlas

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, LabelSpreading i SelfTrainingClassifier (opakowuje dowolny klasyfikator z predict_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

Zobacz też