Machine learning - najważniejsze umiejętności
W poprzednich wpisach poświęconych uczeniu maszynowemu (ML) i sztucznej inteligencji (AI) zastanawialiśmy się nad tym czym właściwie są te dziedziny, jakie są ich zastosowania oraz granice ich możliwości. Dzisiejszy wpis jest przeznaczony dla osób, które chcą spróbować swoich sił z ML i AI. Zbiór umiejętności który tutaj przedstawiam wynika z mojego doświadczenia w pracy nad komercyjnymi projektami związanymi z uczeniem maszynowym, szkoleń prowadzonych dla studentów i młodych inżynierów, rozmów z przedstawicielami różnych firm oraz analizy dostępnych na rynku ofert pracy.
Minimum dla hobbystów
Zanim zaczniemy się zastanawiać nad tym jakich umiejętności potrzebujesz, żeby zawodowo zająć się uczeniem maszynowym to warto zwrócić uwagę na to, że obecnie jest to dziedzina bardzo łatwo dostępna dla hobbystów. Znam np. przykład ucznia szkoły średniej, który był w stanie w ciągu kilku dni zaprogramować całkiem przyzwoity system do automatycznego rozpoznawania twarzy.
Jeżeli chciałbyś realizować hobbystycznie podobne projekty to polecałbym przede wszystkim opanować programowanie w Pythonie. Jest to język stosunkowo prosty do nauki, a dostępność frameworków i bibliotek przeznaczonych do uczenia maszynowego sprawia, że można bardzo szybko osiągnąć spektakularne efekty.
Po poznaniu podstaw Pythona warto poznać jeden z takich frameworków. Ja osobiście preferuję TensorFlow stworzony przez Google.
Obecnie efektowne projekty związane ze sztuczną inteligencją są też w zasięgu hobbystów.
Języki programowania
Praca związana w ML/AI/DS to w dużej mierze praca programistyczna, co wymaga znajomości odpowiedniego języka programowania. Jednym z najpopularniejszych jest wspomniany już przeze mnie Python. Drugi popularny język to R, który jest przeznaczony przede wszystkim do przetwarzania i analizy danych.
Przeglądając oferty pracy często można spotkać też wymagania dotyczące znajomości języków Java, Scala oraz C++.
Frameworki
W większości sytuacji nie ma sensu pisanie od zera programów wykorzystujących modele uczenia maszynowego (a już tym bardziej programów, które te modele trenują). Obecnie dostępne są bardzo dobre, darmowe frameworki, które zwalniają programistę z większości żmudnej i podatnej na błędy pracy.
W przypadku Pythona warto zapoznać się z następującymi bibliotekami:
- TensorFlow,
- PyTorch,
- Scikit-Learn,
- NumPy,
- Pandas.
Pierwsze dwa służą do budowy i uczenia złożonych sztucznych sieci neuronowych. Biblioteka Scikit-Learn zawiera implementację prostszych modeli, które jednak w wielu sytuacjach mogą być rozwiązaniem lepszym niż sieci neuronowe. NumPy to biblioteka do obliczeń numerycznych, na której bazują m.in. te trzy poprzednie. Z kolei Pandas ułatwia przetwarzania i analizę danych.
Modele dla uczenia maszynowego
Jeżeli chcesz na poważnie zajmować się uczeniem maszynowym to niezbędna będzie Ci znajomość stosowanych w tej dziedzinie modeli matematycznych. Obecnie najwięcej szumu słychać wokół sztucznych sieci neuronowych i zdecydowanie warto poznać ich działanie. W szczególności dotyczy to takich zagadnień jak:
- Budowa i zasada działania sztucznych neuronów.
- Algorytmy uczenia i regularyzacji sieci.
- Sieci konwolucyjne (CNN).
- Sieci rekurencyjne (RNN).
Wykorzystanie uczenia maszynowego wymaga poznania najważniejszych modeli matematycznych.
Należy pamiętać, że sieci neuronowe nie są uniwersalnym rozwiązaniem każdego problemu. Wytrenowanie złożonych modeli wymaga dużych ilości danych, które często nie są dostępne. W wielu sytuacjach wystarczą modele dużo prostsze. Dlatego warto zapoznać się z takimi metodami jak:
- regresja liniowa,
- drzewa decyzyjne,
- analiza składowych głównych (PCA),
- maszyny wektorów nośnych (SVM),
- algorytm centroidów (k-means clustering).
Matematyka
Znajomość wyższej matematyki nie jest niezbędna do postawienia pierwszych kroków z uczeniem maszynowym, ale jest bardzo ważna na późniejszym etapie.
Czy do opanowania tych wszystkich modeli potrzebna jest znajomość matematyki? Chociaż do stosowania gotowych rozwiazań (a tych jest dostępnych naprawdę sporo) i ich adaptacji do własnych potrzeb nie ma potrzeby opanowania zasad wyższej matematyki, to na późniejszym etapie pewna jej znajomość bardzo się przydaje.
Zrozumienie działania najważniejszych modeli uczenia maszynowego oraz algorytmów ich trenowania będzie wymagać od Ciebie przede wszystkim trzech rzeczy:
- zrozumienia podstaw rachunku różniczkowego (zwłaszcza dla funkcji wielu zmiennych),
- znajomości algebry macierzy (tutaj konieczne są takie pojęcia jak iloczyn macierzy, transpozycja i obliczanie macierzy odwrotnej),
- podstaw rachunku prawdopodobieństwa (rozkłady prawdopodobieństwa, prawdopodobieństwo warunkowe, wzór Bayesa).
Moim zdaniem bez nabrania pewnej biegłości w tych zagadnieniach ciężko jest wyrobić sobie dobrą intuicję na temat działania różnych modeli uczenia maszynowego, a bez tego czasem trudno dobrać odpowiedni model do konkretnego zastosowania. Mi osobiście taka intuicja pomaga też wyszukiwać błędy w pisanych przeze mnie programach – porównanie ich działania z tym czego należałoby się spodziewać potrafiło mnie nieraz doprowadzić do źródła takiego błędu.
Formalne wykształcenie
Czy potrzebujesz formalnego wykształcenia? Firmy szukające osób na stanowiska związane z uczeniem maszynowym, sztuczną inteligencją czy data science zwykle w wymaganiach podają conajmniej dyplom ukończenia studiów pierwszego stopnia z informatyki lub kierunków pokrewnych. W przypadku większego ukierunkowania na data science jako jedna z możliwości pojawiają się też studia z matematyki.
Jak już pisałem znajomość pewnych elementów wyższej matematyki zdecydowanie się przydaje, a dzięki studiom na wyżej wymienionych kierunkach możesz taką znajomość zdobyć.
Oczywiście sporo firm zatrudnia osoby jeszcze w trakcie studiów. Ja sam w prowadzonych przez siebie projektach pracowałem ze studentami, którzy bardzo dobrze sobie radzili. Generalnie polecam próby zdobywania doświadczenia zawodowego jeszcze przed zdobyciem dyplomu w formie staży czy pracy na część etatu.
Inne umiejętności
Na koniec chciałbym krótko wymienić tylko inne umiejętności, które często pojawiają się w ofertach pracy:
- znajomość systemów baz danych,
- korzystanie z rozwiązań chmurowych (AWS, Azure),
- umiejętność pracy z Big Data,
- znajomość zasad pracy w metodologii Agile.
Podsumowanie
Tak więc jaki powinien być Twój kolejny krok? Jeżeli nie znasz jeszcze Pythona albo R to zacznij od opanowania jednego z tych języków (ja polecałbym raczej Pythona ze względu na jego większą popularność i uniwersalność).
Jeżeli umiesz już programować w Pythonie to spróbuj napisać prosty program wykorzystujący jeden z popularnych frameworków. Bardzo dobre tutoriale (niestety w języku angielskim) możesz znaleźć na stronie frameworka TensorFlow: https://www.tensorflow.org/tutorials/.
No i oczywiście zostań z nami. W najbliższym czasie będziemy publikować materiały przeznaczone dla osób, które chcą spróbować swoich sił z ML i AI.
Do zobaczenia.