ML Atlas

07 · Architektury · 4 min czytania · aktualizacja

Czym jest transfer learning i czemu start z gotowych wag jest szybszy?

W skrócie

Transfer learning to start treningu z wag modelu wytrenowanego wcześniej, a nie z losowych. Wagi leżą blisko dobrego rozwiązania, więc trzeba mniej danych.

Co to jest

Uczenie transferowe (transfer learning) to wykorzystanie wag modelu wytrenowanego na jednym zadaniu lub zbiorze jako punktu startowego dla innego. Gdy zadanie jest to samo, a zmieniają się tylko dane, mówi się o warm starcie; gdy zadanie jest inne, lecz pokrewne — o dostrajaniu (fine-tuning).

To standard w widzeniu komputerowym (sieci pretrenowane na ImageNet) i w modelach językowych, gdzie każdy model „na instrukcje” jest dostrojonym modelem bazowym. Przenoszone warstwy muszą mieć ten sam kształt co w modelu źródłowym; warstwę wyjściową zwykle wymienia się na nową, dopasowaną do nowych klas.

Mechanizm — dlaczego tak działa

Trening od losowych wag to zejście z przypadkowego punktu krajobrazu straty do doliny — długa droga, w czasie której sieć musi od zera nauczyć się cech niskiego poziomu (krawędzie, tekstury, składnia). Wagi wytrenowane na pokrewnym zadaniu leżą już w pobliżu dobrej doliny, bo pokrewne zadania korzystają z podobnych cech. Dostrajanie to krótkie zejście z dobrego punktu.

Yosinski i in. (2014) pokazali, że wczesne warstwy sieci są ogólne i przenoszą się między zadaniami niemal bez strat, a późne są specyficzne; im bliżej wyjścia, tym więcej trzeba douczyć. Stąd dwie korzyści. Mniej danych: sieć nie musi na nowo odkrywać cech ogólnych, więc kilkaset przykładów wystarcza tam, gdzie od zera potrzeba dziesiątek tysięcy. Mniej kroków: krótsza droga to krótszy trening, zwykle z mniejszym learning rate, by nie zniszczyć tego, co już jest.

Dwa zastrzeżenia. Transfer ujemny: gdy zadania są niepodobne, start z cudzych wag lub cudzych cech bywa gorszy niż od zera — wagi leżą w złej dolinie. Katastrofalne zapominanie: dostrajanie na wąskim zadaniu psuje zdolności ogólne modelu źródłowego, jeśli nie trzyma się go blisko (mały learning rate, zamrożenie warstw, replay, kara KL).

Warm start na nowych danych tego samego zadania bywa też nieco gorszy niż trening od zera przy pełnym budżecie (Ash i Adams 2020). Zysk transferu jest przede wszystkim w czasie i w danych, nie zawsze w końcowym wyniku.

Na przykładzie

Zbiór Digits (cyfry 8×8, piksele przeskalowane do 0–1) podzieliliśmy na źródło (628 czystych obrazów) i cel: te same cyfry z dodanym szumem gaussowskim o odchyleniu 0,3. Sieć MLPClassifier z 64 neuronami (random_state=0) wytrenowana na czystych obrazach miała 97% na czystym teście i 84% na zaszumionym — zanim zobaczyła choć jeden zaszumiony przykład. Następnie douczaliśmy ją na kilku zaszumionych obrazach z etykietami i porównywaliśmy z tą samą siecią trenowaną od zera (średnie z 10 losowań próbki, 50 epok). Przy 30 etykietach: 81% z transferem wobec 53% od zera; przy 100: 84% wobec 74%; przy 300: 86% wobec 82%. Przewaga maleje, gdy danych przybywa — dokładnie tak, jak przewiduje mechanizm.

Przypadek ujemny: cechy z warstwy ukrytej sieci uczonej na cyfrach 0–4 użyte do rozpoznawania cyfr 5–9 (regresja logistyczna, 50 przykładów) dały 86%, a regresja logistyczna na surowych pikselach — 94%. Cechy wyspecjalizowane w innych klasach zgubiły informację potrzebną nowemu zadaniu.

Dane: Digits (ręcznie pisane cyfry 8×8)

W praktyce

  • Wizja: torchvision.models.resnet50(weights="IMAGENET1K_V2"), wymiana ostatniej warstwy, na początek zamrożenie reszty, potem odmrożenie z małym learning rate.
  • LLM: dostrajanie pełne albo oszczędne parametrycznie (LoRA — trenuje się małe macierze dodatkowe, wagi bazowe zostają), learning rate 10⁻⁵–10⁻⁴, 1–3 epoki.
  • scikit-learn: warm_start=True w MLPClassifier, GradientBoostingClassifier, LogisticRegression — kontynuacja treningu z obecnych wag.
  • Zawsze porównaj z treningiem od zera na tej samej walidacji, jeśli budżet pozwala — transfer ujemny zdarza się częściej, niż się wydaje.
  • Typowy błąd: dostrajanie z learning rate jak od zera (10⁻³ i więcej) — pierwsze kroki niszczą pretrenowane cechy.

Najczęstsze pytania

Czym różni się transfer learning od fine-tuningu?
Transfer learning to ogólna idea przenoszenia wiedzy między zadaniami; fine-tuning to jej najczęstsza realizacja — dalszy trening pretrenowanych wag na nowym zadaniu. Inne warianty to zamrożenie sieci i trening tylko nowej głowy (ekstrakcja cech) oraz adaptery typu LoRA.
Kiedy transfer learning nie działa?
Gdy zadania są zbyt różne (transfer ujemny), gdy architektury nie pasują albo gdy dostrajanie jest zbyt agresywne i niszczy pretrenowane cechy. Przykład z cyframi pokazuje, że nawet zadania z tego samego zbioru mogą nie dzielić użytecznych cech.
Jaki learning rate przy dostrajaniu?
O rząd lub dwa mniejszy niż przy treningu od zera: zwykle 10⁻⁵–10⁻⁴ dla transformerów, 10⁻⁴–10⁻³ dla nowej głowy sieci wizyjnej. Często stosuje się mniejszy learning rate dla wczesnych warstw i krótką rozgrzewkę.

Źródła

  • Yosinski, J., Clune, J., Bengio, Y., Lipson, H. (2014). "How transferable are features in deep neural networks?". NeurIPS. arXiv:1411.1792
  • Pan, S. J., Yang, Q. (2010). "A survey on transfer learning". IEEE Transactions on Knowledge and Data Engineering 22(10), 1345–1359.
  • Goodfellow, I., Bengio, Y., Courville, A. (2016). Deep Learning, MIT Press, rozdz. 15.2 "Transfer learning and domain adaptation". https://www.deeplearningbook.org/
  • Ash, J., Adams, R. (2020). "On warm-starting neural network training". NeurIPS. arXiv:1910.08475
  • Hu, E. i in. (2022). "LoRA: low-rank adaptation of large language models". ICLR. arXiv:2106.09685

Zobacz też