Czy można stopniowo trenować sieć neuronową?


23

Chciałbym trenować sieć neuronową, w której klasy wyjściowe nie są (wszystkie) zdefiniowane od samego początku. Coraz więcej klas będzie wprowadzanych później w oparciu o przychodzące dane. Oznacza to, że za każdym razem, gdy wprowadzam nową klasę, muszę przekwalifikować NN.

Jak mogę trenować NN przyrostowo, to znaczy, nie zapominając o wcześniej zdobytych informacjach podczas poprzednich faz szkolenia?

Odpowiedzi:


10

Chciałbym dodać do tego, co już powiedziano, że twoje pytanie dotyczy ważnego pojęcia o nazwie uczenie maszynowe uczeniem się przez transfer . W praktyce bardzo niewiele osób trenuje całą sieć splotową od zera (z losową inicjalizacją), ponieważ zestaw danych o wystarczającej wielkości jest czasochłonny i stosunkowo rzadki.

Nowoczesne sieci ConvNets trenują na wielu procesorach graficznych w ImageNet w ciągu 2-3 tygodni. Dlatego często zdarza się, że ludzie zwalniają swoje końcowe punkty kontrolne ConvNet z korzyścią dla innych, którzy mogą używać sieci do dostrajania. Na przykład biblioteka Caffe ma zoo modelowe, w którym ludzie dzielą się swoimi wagami sieci.

Jeśli potrzebujesz ConvNet do rozpoznawania obrazów, bez względu na domenę aplikacji, powinieneś rozważyć na przykład istniejącą sieć VGGNet to powszechny wybór.

Przeprowadzając naukę transferu, należy pamiętać o kilku kwestiach :

  • Ograniczenia z wstępnie przeszkolonych modeli. Pamiętaj, że jeśli chcesz użyć wstępnie przeszkolonej sieci, możesz być nieco ograniczony pod względem architektury, której możesz użyć dla nowego zestawu danych. Na przykład nie można arbitralnie wyciągać warstw Conv z wstępnie przeszkolonej sieci. Jednak niektóre zmiany są proste: dzięki współużytkowaniu parametrów można łatwo uruchomić wstępnie przeszkoloną sieć na obrazach o różnych rozmiarach przestrzennych. Jest to wyraźnie widoczne w przypadku warstw konw / basen, ponieważ ich funkcja przewijania jest niezależna od wielkości przestrzennej objętości wejściowej (o ile kroki „pasują”).

  • Wskaźniki uczenia się. Często stosuje się mniejszą szybkość uczenia się dla dostosowywanych wag ConvNet, w porównaniu do (losowo inicjowanych) wag dla nowego liniowego klasyfikatora, który oblicza wyniki klas nowego zestawu danych. Wynika to z tego, że oczekujemy, że wagi ConvNet są względnie dobre, więc nie chcemy ich zniekształcać zbyt szybko i za dużo (zwłaszcza, gdy nowy liniowy klasyfikator nad nimi jest szkolony z przypadkowej inicjalizacji).

Dodatkowe informacje, jeśli interesuje Cię ten temat: Jak można przenosić funkcje w głębokich sieciach neuronowych?


Uczenie się przez przeniesienie nie jest jedynym sposobem wykonywania uczenia się przyrostowego.
nbro

7

Oto jeden ze sposobów, w jaki możesz to zrobić.

Po przeszkoleniu sieci możesz zapisać jej ciężary na dysku. Pozwala to załadować te ciężary, gdy pojawią się nowe dane, i kontynuować trening od miejsca, w którym zakończył się ostatni trening. Ponieważ jednak te nowe dane mogą zawierać dodatkowe klasy, teraz przeprowadzasz wstępne szkolenie lub dostrajanie w sieci z wcześniej zapisanymi wagami. W tym momencie jedyne, co musisz zrobić, to sprawić, by ostatnia warstwa zawierała nowe klasy, które zostały wprowadzone wraz z pojawieniem się nowego zestawu danych, co najważniejsze, obejmują dodatkowe klasy (np. Jeśli ostatnia warstwa początkowo miał 10 klas, a teraz znalazłeś 2 kolejne klasy, w ramach wstępnego treningu / dostrajania zamieniasz je na 12 klas). Krótko mówiąc, powtórz ten krąg:

Powtarzać


jeśli umieścisz tylko nowe klasy w ostatniej warstwie (klasy treningowe + nowe klasy), model nie będzie mógł być dopasowany, ponieważ chcemy trenować z nowymi klasami (tylko), a model oczekuje tablicy o kształcie (trening + nowa zajęcia).
Joel Carneiro
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.