Chociaż może wydawać się skomplikowany, jest strukturalnie spójny i opiera się na pewnych fundamentalnych etapach. W tym artykule przyjrzymy się krokom, które prowadzą do stworzenia i wytrenowania efektywnego modelu uczenia maszynowego.
Najpierw potrzebujemy danych podzielonych na dane wejściowe X i dane, które chcemy przewidywać Y. Następnie należy określić z jakich metodyk chcemy korzystać. Jaki typ danych jest na wejściu oraz jaki typ danych ma być na wyjściu. Jeżeli nie wiesz czym są metodyki przeczytaj artykuł o metodykach
Metryki są inne dla każdego typu metodyk AI. Na jedną metodykę często przypada kilka metryk. Wybór głównej metryki jest kluczowym elementem, ponieważ na jej podstawie będziemy mogli śledzić progres modelu. Określać, czy radzi sobie lepiej czy gorzej.
W przypadku danych tabelarycznych, czyli np. dane z excela. Sprawdzamy, czy nie ma wartości pustych. Jeżeli któreś kolumny są puste mamy 2 opcje. Albo uzupełnić je jakąś wartością. Może to być mediana w przypadku liczb lub najczęściej pojawiająca się wartość tekstowa. Jeżeli danych brakujących jest naprawdę niewiele możemy pokusić się o usunięcie całych rekordów, w których mamy brakujące wartości.
Następnie sprawdzamy czy dane nie posiadają tzn. outliner’ów czyli wartości odstające. Jeżeli tak należy je usunać. Dlaczego? Wyobraź sobie, że masz za zadanie estymować ceny mieszkań. Twój zbiór danych posiada tysiące mieszkań. 99% cen mieszkań zawiera się w przedziale 200tys-1mln. Co, jeżeli w tym zbiorze znajdzie się 1 % mieszkań, których ceny wahają się od 3-20mln? Model ucząc się na podstawie tych drogich mieszkań będzie zawyżał ceny dla reszty mieszkań.
Mając zadanie klasyfikacji binarnej np. Przewidywanie choroby. Jeżeli danych
zawierających etykietę braku choroby będzie 90%, a tych zawierających chorobę
tylko 10% to będziemy mieli problem. Dlatego, bo algorytm ucząc się będzie
chciał zdobyć jak największą liczbę punktów, czyli wykazać dużą skuteczność w
odpowiedziach. Najprostszą drogą dla algorytmu będzie zawsze odpowiadanie, że
pacjent nie ma choroby, bo w ten sposób osiągnie 90% skuteczność. Algorytmy
sztucznej inteligencji mając postawiony konkretny cel nie zawsze mogą do niego
dochodzić tak jak my byśmy sobie tego życzyli. Dlatego należy uważać jakie
dane wpuszczamy do zbioru treningowego.
Rozwiązaniem jest redukcja etykiet z brakiem choroby, aby odpowiadała ilości
etykiet z chorobą lub zwiększenie etykiet z chorobą poprzez klonowanie. W ten
czy inny sposób chcemy osiągnąć zbiory, które są zbliżone w ilości.
Dla danych, które zawierają pojedyncze słowa lub długi tekst lub obraz lub dźwięk należy przetworzyć te dane do postaci liczb. Ponieważ tylko taki język rozumie komputer.
Gdy dane mamy już w postaci liczb należy je znormalizować. W skrócie, jeżeli mamy wartości od 1 do 1000. Chcemy je zmapować do liczb między 0-1.
Następnie należy podzielić dane na:
Zbiór treningowy - to z reguły 80% zbioru oryginalnego. Jest to zbiór,
którym trenujemy model AI.
Zbiór testowy – czyli pozostałe 20% zbioru oryginalnego. Gdy model
zostanie już nauczony danymi treningowymi, należy sprawdzić jak model sobie
radzi. Robimy to właśnie na zbiorze testowym.
Przeciek danych – bardzo ważne jest, aby nie zrobić błędu podczas
dzielenia danych. Ponieważ jeżeli tak się stanie i dane, które były w zbiorze
treningowym pojawią się w zbiorze testowym, wówczas przy sprawdzaniu
skuteczności model będzie znał odpowiedzi i sztucznie zawyży swoją
skuteczność.
Gdy wszystkie powyższe czynności wykonamy możemy wreszcie przystąpić do
trenowania modelu.
Problem polega na tym, że nie mamy jednego modelu do wyboru per metodyka. Są
ich setki. Dodatkowo możemy tworzyć własne modele deep learningowe. Każdy
model będzie osiągał inne wyniki. Każdy trening będzie wymagał czasu. W
zależności od typu i ilości danych, jeden trening (iteracja) może trwać od
kilku sekund do kilkunastu godzin.
Ale nie martwmy się tym na razie. Wybierzmy 1 model, który wg nas poradzi
sobie najlepiej. Wytrenujmy ten model na danych, a następnie sprawdzimy wynik
i voila. Mamy coś co nazywamy modelem podstawowym – baseline modelem. Załóżmy, że nasz model osiągnął efektywność na poziomie 65%. W przypadku
klasyfikacji binarnej będzie to 15% powyżej rzutu monetą. Nieźle. Jednak co
dalej? Dalej następuje faza eksperymentów.
W tej fazie chcemy zwiększyć skuteczność modelu. Co możemy w tym celu zrobić?
Modele dzielą się na statystyczne, machine learningowe oraz deep
learningowe.
Jedne są prostsze, a więc trening będzie przebiegał szybciej. Jednak, jeżeli
problem będzie skomplikowany modele te nie będą w stanie uchwycić istoty
problemu i zaproponować nam dobrej skuteczności. Proste modele dobrze nadają
się do problemów, które mają charakterystykę liniową. Inne modele są bardziej
złożone i czas nauki będzie zdecydowanie dłuższy, jednak są one w stanie
rozwiązywać trudniejsze problemy. Szczególnie mówimy tutaj o problemach z
charakterystyką nieliniową oraz dużą ilością cech - X. Przykładowo problem,
który ma tylko 2 cechy np. wiek i waga jest znacznie prostszy do rozwiązania
aniżeli problem, który ma 20 cech np.: waga, wiek, cholesterol, poziom cukru,
ciśnienie, bmi, przebyte choroby, itd. Istotne jest aby wiedzieć jaki model
nadaje się do jakiego problemu, ponieważ w ten sposób możemy sobie zawęzić
listę modeli do przetestowania.
Modele można tunningować. Mają one swoje wewnętrzne parametry nazywane
hiperparametrami, które można zmieniać co wpływa na jakość nauki. Wyobraź
sobie, że dostajesz potrawę w restauracji. Niech będzie to pieczona ryba –
najlepsza jaką w życiu jadłeś/aś. Wracając do domu chcesz odtworzyć tę
potrawę. Widziałeś/aś z jakich składników się składa (masz dane), ale nie
wiesz w jakich temperaturach było pieczone. Idziesz do sklepu i kupujesz 999
dokładnie tych samych ryb. Następnie wrzucasz je po kolei do piekarnika na
temp 160,170, …250 oraz za każdym razem zmieniasz czas pieczenia. Przy
pieczeniu 578 ryby stwierdzasz, że to jest to! Dokładnie takie jak w
restauracji. Zapisujesz parametry: Temperatura 220, czas 45min. To samo dzieje
się gdy tunningujesz hiperparametry modelu.
Proste modele statystyczne jak arima mogą mieć tylko 3-4 parametry, oraz
najczęściej ustawia się je w przedziale od 0-12, więc możliwość kombinacji
jest 12*12*12=1728. Więc teoretycznie jeżeli chcielibyśmy przeprowadzić
wszystkie kombinacje należałoby przeprowadzić 1728 treningów, aby wybrać
najoptymalniejszy zestaw parametrów. W praktyce jednak są metody, aby
zredukować liczbę treningów.
Nieco bardziej złożone klasyczne modele machine learningowe mogą mieć już
hiperparametrów więcej, więc liczba kombinacji może wahać się od kilkuset dla
Linear Regressor, SVM do kilku milionów dla Random forest.
Modele deep learningowe mogą mieć miliony parametrów, które w większości
dostosowuje już sam model w trakcie treningu. Jednak treningi mogą trwać
naprawdę długo. Przykładowo gpt-3 ma 175 miliardów paremtrów, a gpt-4 1,76
biliona parametrów. Aż ciężko sobie wyobrazić te liczby.
Wraz z długością treningu idzie zużycie drogich kart graficznych i energii.
Tworząc małe modele z małą ilością danych trening zazwyczaj zajmuje kilka
minut do kilku godzin. Koszta tego są nie duże – kilka, kilkanaście złotych.
Jednak w przypadku olbrzymich ilości danych, którymi dysponują korporację
jeden trening może oznaczać koszt 2 milionów dolarów.
Dlatego kluczowe dla sukcesu projektu jest posiadanie doświadczonych osób
trenujących modele - data scientist, które na podstawie wiedzy i doświadczenia
potrafią ograniczyć liczbę kombinacji do minimum. Lepiej przeprowadzić 1000
treningów niż zmagać się ze 100 tysiącami.
Im bardziej uprościmy dane wejściowe tym łatwiej i szybciej nasz model
znajdzie zależności i zacznie dobrze działać. W tym celu często usuwa się
kolumny (w przypadku danych tabelarycznych), które nie wnoszą nowych
informacji. Np. jeśli analizujemy dane o sprzedaży produktów w sklepie i mamy
dwie kolumny: "Cena Produktu" i "Cena Produktu z VAT", drugą kolumnę można
usunąć, ponieważ nie wnosi ona dodatkowej wartości do analizy. Znając cenę
produktu i stawkę VAT, można łatwo obliczyć cenę z VAT.
W tym celu korzystamy z takich narzędzi jak redukcja wymiarowości czy macierz
korelacji.
Wspomnieliśmy poprzednio, że problemy liniowe są łatwiejsze od problemów nieliniowych. Są sposoby, aby transformować dane w taki sposób, aby z problemu nieliniowego przejść w problem liniowy. Np. transformacja logarytmiczna, pierwiastkowanie, box cox.
Czasami model nie jest w stanie nauczyć się dobrze rozpoznawać wzorców,
ponieważ danych jest zbyt mało. Wówczas należy zebrać więcej danych, aby
wystartować z treningiem.
Gdy stworzy się już model finalny, dane, na których był uczony najczęściej są
dalej zbierane. Więc warto po jakimś przetrenować model na nowo z dodatkowymi
danymi.
Te 5 elementów składa się na fazę eksperymentów. Po każdej zmianie: modelu/hiperparametru/zmianie w danych trenujemy model na nowo i sprawdzamy jaką ma skuteczność na podstawie wcześniej wybranej metryki.
To czym różni się klasyczny development programu komputerowego od projektu AI
to to, że zaczynając program mamy ustalone krok po kroku jakich
funkcjonalności potrzebujemy, następnie je estymujemy i mamy gotową cenę oraz
spodziewany czas.
W przypadku projektów AI typ danych, ich ilość oraz jakość za każdym razem
jest inna. Nie wiemy od początku, ile czasu zajmie projekt, jaki efekt
osiągniemy oraz jaki będzie jego koszt. W momencie zbudowania baseline modelu
zaczynamy mieć jakieś pojęcie o tym jak trudno/łatwo będzie osiągać kolejne
pułapy skuteczności modelu. Dlatego niemożliwe jest na samym początku
określenie 70% skuteczności – X zł, 80% skuteczności - y zł. Cały proces
tworzenia modelu AI jest iteracyjny i nowych informacji dowiadujemy się na
bieżąco.
Skontaktuj się i zacznij podejmować skuteczniejsze decyzje na podstawie analizy danych