Regresja
a Klasyfikacja
Dotychczasowe sieci (takie jak perceptron) służyły do rozwiązywania problemu Klasyfikacji (np. chory/zdrowy, rodzaj gatunku kwiata). Regresja natomiast polega na przewidywaniu ciągłej wartości liczbowej (np. ceny domu, poziomu lepkości substancji w laboratorium, temperatury).
W regresji, ostatnia warstwa sieci nie decyduje do którego "worka" wrzucić dane. Jej zdaniem jest zwrócenie konkretnej, oszacowanej liczby w wyjściu układu wprost ze wskaźnika.
💡 Po ludzku: Klasyfikacja to odpowiadanie na pytanie wyboru (np. "Czy to kot czy pies?"). Regresja to zgadywanie surowej kwoty ("Ile litrów farby trzeba kupić?"). Nie ma tu prawdopodobieństw. Zamiast ograniczać wyjście suwakiem od zera do jedynki, wyrzucamy taką liczbę, jaka po prostu wyszła komputerowi z równania.
Klasyfikacja (np. Gatunek)
Regresja (np. Temperatura)
W klasyfikacji ograniczamy wektor opadania wyniku do jednego konkretnego "worka". W regresji miarka jest płynną linią zmiennoprzecinkową i nieskończoną szalą przewidywań.
Przygotowanie danych
(Pandas)
Przed wykonaniem predykcji, zbiory z aparatury laboratoryjnej (lub plików Excel) zazwyczaj wymagają solidnej interwencji transformacyjnej.
Częstym problemem zestawów (szczególnie polskich programów badawczych) jest stosowanie po formatowaniu CSV przecinków jako separatora dziesiętnego wyplutego tekstu. Ponieważ Python wymusza składnię amerykańską, używamy biblioteki Pandas żeby pozamieniać rzędami ułamki i następnie rzucać stringi jako oficjalne klasy liczbowe float.
💡 Po ludzku: Python dostaje białej gorączki, jeśli próbujesz dodawać wyrazy tekstowe z przecinkami zamiast cyfr. Metoda `str.replace` działa tu jak narzędzie "Znajdź i zamień" w Wordzie, przygotowując plik żeby nie wybuchł kalkulator matematyczny uczenia maszynowego.
Architektura sieci
do regresji
Aby przystosować uklad MLP obecny w bibliotece TensorFlow Keras, zmieniamy konstrukcję ostatniej warstwy układu (tzw. Top Headu).
Dla problemu regresyjnego na ogół oczekuje się tylko jednego, nieograniczonego oszacowania. W odróżnieniu od klasyfikacji gatunków (z funkcją 'Softmax') nie deklarujemy polecenia
activation lub jawnie wskazujemy
activation=None zapewniając surowy przepływ prądu ("Linear Activation").
💡 Po ludzku: Wyrzucamy filtr z ostatniej bramki. Jeśli matematyka w środku po wymnożeniu wypuści liczbę 421.5, to dokładnie taką liczbę chcemy zobaczyć na samym końcu przewodu bez odkształceń. Gdybyśmy użyli tutaj filtru Softmax lub step, obciąłby on ten wysiłek procesora do nielogicznej jedynki!
Funkcje Strat
i Metryki Regresyjne
Jako model pozbawiony dystrybucji prawdopodobieństw, metryka oceniająca (np. Accuracy) musiałaby idealnie ustrzelić nieskończony ciąg liczb zmiennoprzecinkowych by uznać trafienie. Rezygnuje się więc z procentów trafień badając marginesy odchyłu oszacowań za pomocą dedykowanych rozwiązań.
MSE liczy kwadraty błędów, bardzo mocno karząc sieć za ogromne pomyłki wychyleniowe modelu. MAE bada po prostu średnią bezwzględnych strat od osi (czyli średnie pudło wyrażone w punktach naturalnych wprost z tabeli wartości np. litrach czy stopniach Celsjusza po usunięciu stref na minusie).
💡 Po ludzku: Skoro musisz zgadnąć odległość, nie wskażemy czy przegrałeś w 100%. Mówimy Ci raczej: "twoja zgadywanka średnio pomyliła się o 2 metry od celu" (MAE). Oraz: "jeden strzał kompletnie pojechał poza tarcze, polecimy mocno karą wymiarową na siatkę kwadratową" (MSE).
Huber to rewolucyjny kompromis funkcji straty. Łączy zalety układu upewniającego się co do odległości kwadratowych mniejszych luk z precyzją wyciągania liniowego. Główną zaletą jej strukturalizacji wewnątrz Keras jest olbrzymia redukcja wpływu anomalii środowiskowych ("Outliers") ze stopniem granicznym "delta".
💡 Po ludzku: Huber to sprytny nauczyciel. Normalnym błędowym chybieniom daje łagodne pole kwadratowe dla szukającego algorytmu by płynnie osiadł w zagłębieniu. Jednak dostrzegając kompletnie odklejoną wartość w zbiorze laboratoryjnym, obcina straty do prostych składowych - program nie wpada w wariację od odchylenia błędu sprzętowego czujnika.
Miara statystyczna R-kwadrat. Wyznacza jakość w jakiej rozłożenie proporcji zmiennych wariacyjnych modelu tłumaczą powiązanie bazy danych z modelem. Wartość wynosząca idealną (1.0) oznaczałaby doskonałość modelu w odgadującą przewidywalność zaleceń regresyjnych bez naruszeń odchyleń.
Wyjście pomyłki dla ogromnego błędu ze zbioru (Outlier)
MSE wariuje (rośnie kwadratowo wymierząjąc gigantyczną karę skryptowi). W przeciwieństwie do powyższych, Huber Loss inteligentnie amortyzuje wpadki w bazie, minimalnie skracając potknięcia by sieć zachowała balans!
Optymalizacja wprowadzania danych
(tf.data.Dataset)
Przy olbrzymich plikach system nie może zaczytywać całej kompilacji do procesora ze względu na pojemność pamięci. Aby osiągnąć maksymalną skalowalność, wdraża się oficjalny ekosystem pipelinenu Tensorflow dla zbiorów surowych w obiektowej definicji Dataset.
System operacyjny "kuje na zimno". Odbiera macierze par X i y odpalając ciągi modyfikatorów na pętlach: miesza próbki by algorytm nie oszukiwał na zapamiętaniu układu, paczkuje je w batche i na ułamek ucisku przed odpaleniem asynchronicznie przesyła (prefetchuje) proces roboczy do wirtualnej pamięci graficznej skracając "Idle czas" silnika ML na procesorze na optymalnym priorytecie systemu Autotune.
💡 Po ludzku: Wyobraź sobie pracownika (kartę graficzną) układającego cegły. Zawsze musiał czekać na taczkę po ułożeniu ściany. Konfiguracją "Prefetch" angażujesz tło do automatycznego przygotowywania kolejnej taczki cegieł w tle, w momencie zrzuconego zapasu. Karta nie ma przestojów, skrypt ćwiczący sztuczną inteligencję przy potężnych obrazkach po prostu frunie po zasobach.
Zestaw narzędzi z optymalizatorem 'autotune' dba stale o ciągłość prądu kart (GPU) z asynchronicznym wstrzykiwaniem paczek by wgrać je przed usunięciem starych!
Architektura Obiektowa Modelu
(OOP Keras Subclassing)
Nauce zawdzięczamy nie tylko sekwencje łączone krok po kroku za pomocą list (Sequential). Pełny obwód możemy samodzielnie zabudować klasowo.
Kod konstruktora klasy pochodnej narzuca w pamięci strukturę węzłów i warstw dla sztucznych synaps po dziedziczeniu zasobności
keras.Model. Użytkownik przydziela je do wczytanego podzespołu w ramach atrybutów
self.xyz bez konkretnego okablowywania układów z prądem.
💡 Po ludzku: To kompletny plac budowy z planem projektu. Tylko kupujemy tu kable, żarówki i stacyjki do układu nie montując ich na razie. Składujemy je cichaczem do pudełka z imieniem konkretnej instancji modułu do wczytania sztucznej inteligencji by nie zaśmiecić obszaru roboczego platformie.
Metoda wyliczeniowa call(x) definiuje oficjalny "Forward Pass" (Przejście Wprzód). System przepuszcza sygnał przez warstwę i wydziela strumień wyjścia. Konstruktor ten daje wielokrotnie lepszą modularność układów operacyjnych przy eksperymentach dynamicznych, sieciach z rozwidleniami, skip connections lub hybrydach.
📉 Interaktywna Liniowa Predykcja
Dopasuj suwakami oszacowaną regresję. Obejrzyj, jak metryka MSE rośnie bardzo agresywnie, gdy czerwona linia znacznie odjeżdża od chmury realnych obserwacji badawczych, w porównaniu z MAE.
Średni Błąd Kwadratowy (MSE): 0.00
Średni Błąd Bezwzględny (MAE): 0.00