Sztuczne sieci neuronowe: jak trenować?

Autor Autor:
Zespół Innokrea
Data publikacji: 2024-05-02
Kategorie: Innowacja

Poprzednim artykułem rozpoczęliśmy bliższe przyglądanie się temu czym są sztuczne sieci neuronowe (ang. fully connected neural networks) – przybliżyliśmy nieco działanie wytrenowanego już modelu w zadaniach klasyfikacyjnych. Dziś pochylimy się nad zagadnieniem samego treningu – co to właściwie jest, jakie ma etapy i z czego każdy z nich się składa. Zapraszamy!

 

Zacznij od danych

Klasyfikacja przy zastosowaniu sieci neuronowych jest przykładem uczenia nadzorowanego (a co to?  Zachęcamy do zapoznania się z drugim artykułem cyklu ML, jeżeli jeszcze tego nie zrobiliście!). Zanim zatem podejdziemy w ogóle do treningu odpowiedniego modelu pod wybrane zadanie, konieczne jest posiadanie obszernego zbioru oznaczonych już danych: przykładowo, kontynuując zaproponowany w poprzedniej części artykułu problem rozpoznawania rodziny zwierząt ssak – gad – płaz, aby wytrenować odpowiedni model dla zadania, powinniśmy mieć np. po 5000 oznaczonych próbek reprezentujących każdą z rodzin.

Jeżeli uda nam się już zgromadzić taki zbiór danych, możemy go odpowiednio podzielić na 3 części:

  • część treningowa (zazwyczaj 70% zbioru lub więcej)
  • część walidacyjna (10-20%)
  • część testowa (podobnie, jak w przypadku części walidacyjnej 10-20%)

 i przystąpić do właściwej procedury treningu. 

 

Sztuczne sieci neuronowe – czas na trening!

Rys. 1: Przykładowy schemat uczenia sztucznej sieci neuronowej. Źródło: Kurs ML 2023, Natalia Potrykus

 

Procedura treningu składa się z kilku kroków, wykonywanych w pętli:

  1. Zaprezentuj trenowanemu modelowi wszystkie próbki ze zbioru treningowego i dokonaj drobnych korekt wag i biasów sieci na podstawie tego, jak daleko od poprawnego, znanego nam rozwiązania była sieć
  2. Zaprezentuj trenowanemu modelowi próbki z części walidacyjnej (których nie używa się w kroku 1, więc dla modelu są to zupełnie “nowe” dane, których nie używał do dostosowywania swoich wag) – zobacz i zapisz, jak dobrze radzi sobie model z ich rozpoznawaniem
  3. Wróć do kroku 1. Powtarzaj procedurę do osiągnięcia jednego z poniższych warunków: 
  • dopóki wyniki jakości działania modelu na części walidacyjnej (w kroku 2) się poprawiają
  • określoną, maksymalną liczbę razy.

Jedno powtórzenie kroków 1-2 nazywamy epoką (ang. epoch).

Po zakończeniu powyżej opisanego algorytmu przychodzi pora na użycie trzeciej części zbioru – części testowej. Używamy jej dokładnie tak samo, jak używaliśmy części walidacyjnej podczas każdej epoki – różnica jedynie jest w celu tego zastosowania. Zadaniem walidacji modelu (czyli kroku 2 z powyższej listy) jest sprawdzenie, jak model radzi sobie z “nieznanymi” danymi – czyli takimi, które nie brały udziału w samym dostosowywaniu wag. Tylko… po co?

 

Overfitting, czyli nadmierne dopasowanie

Wyobraźmy sobie, że dysponujemy 1000 próbkami treningowymi, a liczbę epok treningu ustalamy z góry na wysoką jak na taką porcję danych – na przykład 500. Dodatkowo, mamy 150 próbek jako zbiór testowy – procedurę walidacji natomiast postanawiamy zupełnie pominąć.

I tak oto, obserwujemy wykresy z przebiegu treningu – widzimy wyraźnie, że z każdą epoką model jest coraz dokładniejszy w rozpoznawaniu klas próbek treningowych – pod koniec treningu uzyskujemy na tej części treningowej dokładność 99.99% – niemalże idealną! 

Z zadowoleniem uruchamiamy więc test modelu… I tu następuje gorzkie rozczarowanie. Na naszych 150 próbkach testowych, które nie brały udziału w treningu, model uzyskuje dokładność rzędu 75%! Co się stało? Czy 500 epok to nadal było za mało?

Choć jest minimalna szansa, że to może być prawdą – cóż, raczej nie. To, co obserwujemy, to efekt tzw. przetrenowania modelu, czyli najzwyczajniej – nadmiernego dopasowania do danych treningowych. W rezultacie, model będzie bezbłędnie niemalże rozpoznawał dane użyte do treningu, jednak jego możliwości generalizacji będą słabe. Proces walidacji służy właśnie do tego, by rozpoznać moment, w którym model na nowych danych zaczyna sobie radzić coraz gorzej – i w tym miejscu przerwać trenowanie.

Dla powyższego przykładu – jeżeli jednak uruchomilibyśmy walidację, a wyniki zestawili na wykresie, to mogłoby to wyglądać następująco:


Rys. 2: Na niebiesko oznaczono dokładność (accuracy) modelu na zbiorze treningowym, natomiast na pomarańczowo – na zbiorze walidacyjnym. Z wykresu wyczytać można, że choć dokładność treningowa wydaje się niemal doskonała, to jednak po pewnym czasie model zaczyna mieć problemy z generalizacją.

 

Z tego zestawienia wyraźnie rozpoznać można, że około 100 epoki model zaczyna wykazywać oznaki przetrenowania – to byłby odpowiedni moment, by przerwać proces treningu!

Warto pamiętać, że choć rzadko uzyskamy na zbiorze testowym czy walidacyjnym tak dobrą dokładność jak na części treningowej, to odpowiednie monitorowanie przebiegu dostosowywania modelu może pozwolić nam wyciągnąć z niego jak najwięcej!

Tab. 1: Porównanie dokładności modelu na części treningowej, walidacyjnej oraz testowej dla 500 i 100 epok treningu

 

Morał z dzisiejszych rozważań jest prosty – w treningu, tak jak w życiu – niezbędny jest umiar! Na dzisiaj to wszystko od nas, słyszymy się za tydzień, kiedy to zejdziemy jeszcze głębiej i przyjrzymy się, jakie operacje zachodzą w samej strukturze sieci neuronowej podczas jednej epoki treningu. Do zobaczenia!

Zobacz więcej na naszym blogu:

Wzorce projektowe – część 2

Wzorce projektowe – część 2

Hej, hej... Programisto, to kolejny artykuł dla Ciebie! Druga część artykułu na temat wzorców projektowych. Poznaj Adapter oraz Memento.

Programowanie

Wzorce projektowe – część 1

Wzorce projektowe – część 1

Programisto, to artykuł dla Ciebie! Łap garść przydatnych informacji na temat wzorców projektowych.

Programowanie

Blockchain – płatności w świecie kryptowalut

Blockchain – płatności w świecie kryptowalut

Blockchainie - poznaj świat transakcji, kryptowalut i elektronicznych płatności.

BezpieczeństwoFinanse