Machine learning

User avatar Wojciech Charkiewicz

Machine learning oznacza dosłownym tłumaczeniu uczenie maszynowe. Jest to dziedzina wchodząca w skład nauk o SI (Sztucznej inteligencji). Uczenie maszynowe polega na wykorzystaniu praktycznym wiedzy matematyków, którzy stoją za SI. Formalna definicja:

"A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P if its performance at tasks in T, as measured by P, improves with experience E."

"Mówimy" programowi, że ma się uczyć z otrzymanych danych, a przy pomocy ustalonej miary mierzymy jego skuteczność w kolejnych iteracjach. Wraz z ilością przetwarzanych danych, ta skuteczność powinna rosnąć - wtedy mówimy o uczeniu. Czyli jeśli mówimy o uczeniu maszynowym, mówimy o algorytmach, które przetwarzają i analizują dostarczone im dane oraz uczą się na ich podstawie.

Dostajemy zadanie, w którym nasz program musi zidentyfikować czy napój jest piwem czy winem. Sieć neuronową, którą zazwyczaj projektujemy do wykonania zadania nazywamy modelem. Projektowanie sieci wiąże się z przemyśleniem i ustaleniem wielu czynników, m.in. ile musi mieć warstw i neuronów, ile połączeń między neuronami, jakiej funkcji aktywacji powinniśmy użyć, w jaki sposób będziemy mierzyć błąd sieci. Trenowaniem nazywamy proces, w którym przez sieć przepuszczamy kolejne jednostki danych, na podstawie których sieć się aktualizuje i finalnie daje nam wytrenowany model. Przykład działania przedstawię w 7 krokach.

Neuron network
Wizualizacja sieci neuronowej.

Zbieranie Danych

Aby to się jednak stało musimy zebrać dane, które będą posiadały specyficzne cechy dla poszczególnych napojów. Dla naszych przykładów będzie to kolor oraz zawartość alkoholu.

Pierwszym krokiem będzie zdobycie różnych rodzajów napojów, aby zrobić pomiary. Im więcej zebranych danych, tym lepiej.

Kiedy zdobyliśmy dane, pora na przeniesienie ich do programu. W zależności od jakości i ilości podawanych danych, końcowy model będzie bardziej dokładny lub mniej. Na koniec powinno to dać nam tabelę z kolorem, zawartością alkoholu i czym to jest.

Wine and beer

Przygotowanie danych

Jest to przygotowanie danych w celu treningu programu. Zazwyczaj wiąże się to z różnego rodzaju przekształceniami, obróbką i wybieraniem reprezentatywnych danych. W naszym przypadku po prostu użyjemy dostosowanego pod nasz przykład zestawu danych.

Kolor (nm) Zawartość % Piwo czy wino?
610 5 Piwo
750 13 Wino
693 14 Wino
596 7 Wino
610 5 Piwo
597 3 Piwo
603 6 Piwo
769 12 Wino

Najpierw wsadzamy wszystkie dane razem, potem mieszamy ich kolejność. Nie chcemy, aby kolejność ich wprowadzenia miała wpływ na wyniki. Innymi słowy ustalamy czym jest napój, niezależnie od tego, jaki napój pojawił się przed nim lub po nim. Tutaj jest również dobry moment, aby stworzyć wizualizację, która pomoże przedstawić czy są jakieś widoczne podobieństwa pomiędzy napojami oraz pokaże nam to, czy nie ma niezbalansowanych informacji. Na przykład - jeżeli będziemy mieli więcej danych na temat wina - program będzie dobrze cechował wina, z piwami będzie miał problem.

Powinniśmy podzielić naszę dane na dwa zbiory:

  • Zbiór treningowy - będzie odpowiadał za nauczenie naszego modelu cech odpowiedniego produktu.
  • Zbiór testowy odpowiadający za sprawdzenie jak został nauczony nasz model.


Wybieranie modelu

Przez wiele lat naukowcy stworzyli modele, które dostosowane są do konkretnych zadań: przetwarzania obrazów, przetwarzania tekstu, przetwarzania danych liczbowych i wielu innych. U nas zastosujemy mały model liniowy, który jest dość prosty i powinien wykonać zadanie.

Algorytmy modeli
Wizualne przedstawienie części modeli, przedstawiony został sposób działania.

Trenowanie

Przejdźmy do trenowania modelu, aby mógł dobrze przewidywać jaki to jest napój. Można powiedzieć, że w pewnym sensie jest to jak z nauką jazdy na rowerze - to, co na początku sprawia trudność, np. utrzymanie równowagi, po latach jazdy przychodzi nam bez problemu. Podobnie jest w przypadku trenowania naszego modelu - na początku bardzo często będzie się mylił, będzie zgadywał niemal losowo, ale po pewnym czasie stanie się niemal bezbłędny. Podczas przygotowania danych podzieliliśmy nasze dane na dwa zbiory: treningowy i testowy. Podczas etapu uczenia możemy podawać je pojedynczo (rekord po rekordzie, zdjęcie po zdjęciu) lub w większych ilościach na raz - takie większe ilości nazywamy batchami. Gdy wszystkie dane z tablicy się skończą, kończy się również tzw. epoka. Wtedy również powinna odbyć się pierwsza weryfikacja. Podajemy programowi drugą grupę danych, której nigdy nie widział. Na wynikach możemy określić czy się przetrenował (overfitting), czy niedotrenował (underfitting).

  • Overfitting- polega na przeuczeniue, nadmiernym dopasowaniu danych przez program.
  • Underfitting- polega na niedouczeniu się programu, zbyt słabym dopasowaniu do danych.
Obie sytuację będą się objawiać złymi wynikami końcowymi, co będzie przekładało się na wydajność końcową.

machine training

Weryfikacja

Po nauce naszego programu przez określoną ilość epok dokonujemy końcowej weryfikacji. Przy pomocy drugiego zbioru - testowego, bądź zupełnie nowych danych, których program zupełnie nie widział.


Optymalizacja parametrów

Jak skończyliśmy weryfikację danych, możemy zobaczyć czy jest coś, co może je ulepszyć. Możemy to zrobić poprzez “podkręcenie gałek”.

  • Pierwszą opcją jest zwiększenie ilości obiegów przez zbór treningowy. Ma to na celu pokazanie częściej tych samych danych niż raz. Często prowadzi to do dokładniejszych wyników na końcu.

  • Drugą opcją jest manipulacja wartością tak zwanego współczynnika uczenia. Jest to jeden z wielu parametrów sieci neuronowej, których szczegółowe opisanie wymagałoby oddzielnego artykułu lub nawet serii. W skrócie można powiedzieć, że współczynnik uczenia w naszym przypadku to pewna liczba, która określa jak "drastyczne" kroki będzie podejmować nasza sieć w trakcie treningu (czyli jak mocno będzie się "karać" lub "nagradzać" za złe i dobre decyzje). Mówi się, że im większa wartość tym szybciej się uczy nasza sieć, a im mniejsza tym wolniej. Jest to prawda do momentu, w którym nie przesadzimy z ustawianiem tego czynnika na skrajnie wysokie/niskie wartości - wtedy bowiem, nasza sieć może nigdy nie wytrenować się wystarczająco dobrze.


Przewidywania

Po wytrenowaniu modelu możemy zacząć go używać. Wynikowy model składa się między innymi z wyliczonych optymalnych wartości połączeń między neuronami, zwanych wagami. Testowanie na nowych danych polega po prostu na przepuszczeniu każdej nowej próbki przez nasz wytrenowany model, który korzystając z wag obliczy wynik i nam go poda. W naszym przypadku będzie to predykcja (przewidywanie) na temat rodzaju napoju, który chcemy zidentyfikować. Jest to nasza wisienka na torcie, gdzie otrzymujemy wynik prawidłowy.

machine prediction
O autorze
User avatar

Jestem uczniem technikum informatycznego, interesuję się programowaniem stron, mechaniką samochodową. W wolnym czasie lubię jeździć na rowerze.

Najnowsze artykuły

MDB Youth

MDB Youth to organizacja stworzona przez młodych ludzi, których celem jest wspólna nauka programowania, technologii i przedsiębiorczości.

Dowiedz się więcej i dołącz do nas.

Dołącz do MDB Youth