Używając wstępnie przeszkolonego klasyfikatora CNN i zastosuj go do innego zestawu danych obrazu

11

W jaki sposób można zoptymalizować się wstępnie przeszkolony neural network , aby zastosować go do osobnego problemu? Czy po prostu dodasz więcej warstw do wstępnie wyszkolonego modelu i przetestujesz go na swoim zestawie danych?

Na przykład, jeśli zadaniem było użycie CNN do klasyfikacji grup tapet , jestem pewien, że nie zadziałałoby bezpośrednie klasyfikowanie wstępnie wyszkolonej sieci wyszkolonej w zakresie obrazów kotów i psów, mimo że oba są klasyfikatorami obrazów.

Sid
źródło

Odpowiedzi:

15

Czytać - kiedy Transfer Learning jest niekorzystny? (Dzięki @media) (wygląda dla mnie bardzo pouczająco, więc dodano tutaj, aby ta odpowiedź była kompletna ...)

Odpowiedz na pytanie… (zaczyna się tutaj)

Transfer Learning jest tym, czego szukasz ...

  • Gdy powiedziano nam zadanie głębokiego uczenia, powiedzmy, które polega na szkoleniu sieci neuronowej splotowej (Covnet) na zbiorze danych obrazów, naszym pierwszym instynktem byłoby wyszkolenie sieci od zera. Jednak w praktyce głębokie sieci neuronowe, takie jak Covnet, mają ogromną liczbę parametrów, często rzędu milionów. Szkolenie Covnet na małym zbiorze danych (takim, który jest mniejszy niż liczba parametrów) znacznie wpływa na zdolność Covnet do generalizacji, często skutkując nadmiernym dopasowaniem.

  • Dlatego częściej w praktyce można było dostroić istniejące sieci, które są szkolone na dużym zestawie danych, takim jak ImageNet (obrazy oznaczone etykietą 1.2M), kontynuując szkolenie (tj. Uruchamianie wstecznej propagacji) na mniejszym zestawie danych, który mamy. Pod warunkiem, że nasz zestaw danych nie różni się drastycznie w kontekście oryginalnego zestawu danych (np. ImageNet), wstępnie wyszkolony model będzie już posiadał funkcje, które są istotne dla naszego własnego problemu z klasyfikacją.

Kiedy dostroić modele?

  • Ogólnie rzecz biorąc, jeśli nasz zestaw danych nie różni się drastycznie w kontekście od zestawu danych, na którym trenowany jest wstępnie wyszkolony model, powinniśmy się udoskonalić. Wstępnie przeszkolona sieć w dużym i różnorodnym zbiorze danych, takim jak ImageNet, przechwytuje uniwersalne funkcje, takie jak krzywe i krawędzie we wczesnych warstwach, które są istotne i przydatne w przypadku większości problemów z klasyfikacją.

  • Oczywiście, jeśli nasz zestaw danych reprezentuje jakąś bardzo specyficzną domenę, na przykład obrazy medyczne lub chińskie znaki odręczne, i że nie można znaleźć wstępnie przeszkolonych sieci w takiej domenie, powinniśmy rozważyć szkolenie sieci od zera.

  • Innym problemem jest to, że jeśli nasz zestaw danych jest niewielki, dostrojenie wstępnie wyszkolonej sieci do małego zestawu danych może prowadzić do nadmiernego dopasowania, szczególnie jeśli kilka ostatnich warstw sieci jest warstwami w pełni połączonymi, tak jak w przypadku sieci VGG. Mówiąc z mojego doświadczenia, jeśli mamy kilka tysięcy nieprzetworzonych próbek, z wdrożonymi wspólnymi strategiami powiększania danych (tłumaczenie, rotacja, przerzucanie itp.), Precyzyjne dostrojenie zwykle daje nam lepszy wynik.

  • Jeśli nasz zestaw danych jest naprawdę mały, powiedzmy mniej niż tysiąc próbek, lepszym podejściem jest przyjęcie wyniku warstwy pośredniej przed w pełni połączonymi warstwami jako cechami (cechy wąskiego gardła) i wyszkolenie klasyfikatora liniowego (np. SVM) na to. SVM jest szczególnie dobry w rysowaniu granic decyzji w małym zestawie danych.

Techniki dostrajające

Poniżej znajdują się ogólne wytyczne dotyczące implementacji dostrajania:

  • Powszechną praktyką jest obcinanie ostatniej warstwy (warstwy softmax) wstępnie wyszkolonej sieci i zastąpienie jej naszą nową warstwą softmax, która odpowiada naszemu problemowi. Na przykład wstępnie przeszkolona sieć ImageNet ma warstwę softmax z 1000 kategoriami.

  • Jeśli naszym zadaniem jest klasyfikacja na 10 kategorii, nowa warstwa softmax sieci będzie miała 10 kategorii zamiast 1000 kategorii. Następnie uruchamiamy propagację wsteczną w sieci, aby dostroić wstępnie wyszkolone wagi. Upewnij się, że przeprowadzana jest walidacja krzyżowa, aby sieć mogła dobrze uogólniać.

  • Użyj mniejszej prędkości uczenia się, aby wyszkolić sieć. Ponieważ oczekujemy, że wstępnie wyćwiczone ciężary będą już całkiem dobre w porównaniu z losowo zainicjowanymi ciężarkami, nie chcemy zbyt szybko i zbyt mocno zniekształcać ich. Powszechną praktyką jest sprawienie, aby początkowa szybkość uczenia się była 10-krotnie mniejsza niż w przypadku treningu zdrapkowego.

  • Powszechną praktyką jest również zamrażanie ciężarów pierwszych kilku warstw wstępnie wyszkolonej sieci. Wynika to z tego, że kilka pierwszych warstw przechwytuje uniwersalne elementy, takie jak krzywe i krawędzie, które są również istotne w naszym nowym problemie. Chcemy utrzymać te wagi w nienaruszonym stanie. Zamiast tego sprawimy, że sieć skoncentruje się na nauce funkcji specyficznych dla zestawu danych w kolejnych warstwach.

W tym przypadku musisz je ponownie przeszkolić, ponieważ jeśli się nie mylę, tapety nie należą do klasy modeli Image-net. Nie będzie trudno zbudować model od zera (najlepiej płytszy). rób też tutaj ..)

Źródłem mojej odpowiedzi jest tłumaczenie tych niesamowitych kursów.

Do dalszych odczytów

Aditya
źródło
Jeśli wykonujesz tylko ekstrakcję funkcji, ponieważ nie dostrajasz żadnej z warstw. Czy istnieje powód, aby zastąpić ostatnią gęstą warstwę liniowym klasyfikatorem? Dlaczego nie zachować go jako nowej, gęstej warstwy i po prostu ponownie przeszkolić, utrzymując wszystkie dolne warstwy zamrożone? Czy to tylko dlatego, że szkolenie klasyfikatora liniowego będzie szybsze niż szkolenie nowej gęstej warstwy?
CMCDragonkai
1
W celu wyodrębnienia elementu nie trzeba dołączać warstw, ale dołącza się kilka warstw, takich jak Pooling i zmiana rozmiaru kształtu, aby dopasować wymiary i ewentualnie zmniejszyć wartości pośrednie; Na pewno szybciej jest trenować model liniowy niż NN, ale możesz wypróbować oba i zobaczyć, co działa najlepiej w twoim przypadku użycia; Odblokuj ostatnią gęstą warstwę, a ponowne trenowanie z kilkoma dodatkowymi warstwami w celu dopasowania do twojego problemu jest powszechną praktyką
Aditya