Jak wejść w branżę machine learningu. Devdebata
Devdebata, którą przeprowadziliśmy z ekspertami machine learningu, może posłużyć za pewnego rodzaju poradnik dotyczący tego, jak wejść w tę branżę. Naszych rozmówców zapytaliśmy o to, jakie języki i frameworki warto poznać na początku oraz o to, jak poradzili sobie z największym wyzwaniem z jakim się spotkali. Dowiecie się z niej także, jak może wyglądać przyszłość machine learningu.
Pytania do poniższej devdebaty ułożyli Adam Gonczarek oraz Michał Kosiński — dziękujemy za nie!
Aleksandra Możejko. Machine Learning Engineer w firmie Sigmoidal i współorganizatorka konferencji PL in ML poświęconej Uczeniu Maszynowemu. Posiada dwa lata komercyjnego doświadczenia w Uczeniu Maszynowym. Jej główny obszar zainteresowań stanowi przetwarzanie języka naturalnego.
Rafał Prońko. Data Scientist od ponad 5 lat. Swoją przygodę z ML zaczął od pracy nad zagadnieniami związanymi z NLP. Obecnie pracuje w YND consult nad zagadnieniami związanymi z rozpoznawaniem i lokalizacją przedmiotów w obrazach. Jest także zaangażowany w rozwój tak zwanych zdecentralizowanych aplikacji opartych na blockchain.
Kacper Łodzikowski. Prowadzi zespół badawczo-rozwojowy w poznańskim oddziale firmy Pearson. Zespół jest częścią jednostki AI Products and Solutions, która pomaga tworzyć skuteczne produkty edukacyjne w oparciu o sztuczną inteligencję.
Spis treści
1. Jak ocenisz próg wejścia w machine learning?
Odpowiada Aleksandra Możejko, Machine Learning Engineer w Sigmoidal: To zależy dla kogo. Według mnie, żeby zacząć zajmować się machine learningiem potrzebne są: umiejętność programowania, a także znajomość podstaw algebry liniowej, analizy matematycznej, statystyki i rachunku prawdopodobieństwa. Zatem dla matematyka, bądź fizyka, który potrafi programować ten próg nie będzie wysoki. Podobnie dla programisty, który zna podstawy matematyki. Dla osób, które tych umiejętności nie posiadają próg jest znacznie wyższy.
Odpowiada Rafał Prońko, Data Scientist od ponad 5 lat: To wszystko zależy co ktoś chce osiągnąć w ML. Jeśli zależy Tobie na tworzeniu prostych modeli związanych z ML, tworzenie PoC bez konieczności poznania algorytmów, to próg wejścia jest niewielki (zwłaszcza jeśli dana osoba potrafi programować). Jeśli natomiast chce się być dobrym inżynierem ML to próg wejścia jest już znacznie wyższy i wymaga wielu miesięcy ciężkiej pracy.
Odpowiada Kacper Łodzikowski, Pearson AI Products & Solutions: Tak samo jak w jakikolwiek inny obszar IT. Jeżeli posiadasz wytrwałość i nastawienie na rozwój, to zapewne Ci się uda. Obserwuję to co roku podczas naszego programu praktyk. Każdej wiosny przechodzimy przez rygorystyczny proces ewaluacji dziesiątek kandydatur. Wybieramy 3-6 najlepszych osób, z których większość studiuje na kierunkach matematyczno-informatycznych. Zawsze jednak znajdzie się wśród nich jedna osoba o mniej technicznym profilu. Nawet jeśli na wstępie posiada ona tylko podstawowe umiejętności, to po około pół roku wytrwałej nauki i ciężkiej pracy zwykle dogania (a czasem i przegania) osoby z przygotowaniem matematyczno-informatycznym.
2. Jakie języki programowania, frameworki i technologie poleciłbyś opanować osobie początkującej?
Odpowiada Aleksandra Możejko, Machine Learning Engineer w Sigmoidal: Jeżeli chodzi o języki programowania to przede wszystkim Python. Polecam też zapoznać się z bibliotekami do nauki klasycznego ML, np. scikit-learn. Co do deep learningu to polecałabym Kerasa, jest bardzo przyjazny dla osób początkujących. Ostatnio popularny jest też PyTorch. Python jest też często używany np. przy budowie aplikacji webowych, zatem przejście od stworzenia modelu Machine Learningowego do wdrożenia go na produkcję jest łatwiejsze niż np. w przypadku języka R.
Odpowiada Rafał Prońko, Data Scientist od ponad 5 lat: Jeśli chodzi o języki programowania, frameworki i technologie to tak naprawdę wybór jest dość spory — począwszy od Matlaba / Octave poprzez SASa a skończywszy na R/Python/Scala. Używam w pracy Pythona, ponieważ jest jednym z najpopularniejszych obecnie języków do pisania programów związanych z ML. Jeśli chodzi o biblioteki to polecam sklearn (podstawowe algorytmy ML), Pandas/Dask (biblioteki do wczytywania i manipulacji na danych), Matplotlib (biblioteka do wizualizacji danych), Pytorch / Tensorflow (Deep Learning), MLflow (do zarządzania eksperymentami z różnymi modelami), TPOT (biblioteka do automatycznego znajdowania parametrów w modelach ML).
Odpowiada Kacper Łodzikowski, Pearson AI Products & Solutions: Pomyśl o branży w której chcesz pracować (np. motoryzacyjna lub edukacyjna), i jednej czy dwóch firmach z tej branży. Przejrzyj ich oferty pracy pod kątem poszukiwanych umiejętności i właśnie tego się naucz. Zapewne będą szukać tych samych umiejętności jeszcze przez najbliższych 6-12 miesięcy, więc zdążysz aplikować. Jeśli nie masz jeszcze upatrzonej firmy, to sporo z nich wymaga poniższych umiejętności twardych:
- Programowanie: Przetwarzanie danych w Pythonie, w szczególności przy użyciu Anaconda, pandas, numpy, scikit-learn, NLTK, spaCy.
- Frameworki: Możesz zacząć od Kerasa, czyli intuicyjnej, wysokopoziomowej biblioteki, która da Ci dobre wyniki bez względu na język (Python lub R) czy backend (TensorFlow, Theano, Microsoft Cognitive Toolkit) używany przez Twój zespół. Gdy opanujesz Kerasa, zejdź poziom niżej i popracuj bezpośrednio z TensorFlowem.
- Technologie przetwarzania danych: Niezbędna będzie znajomość SQL oraz mechanizmów działania relacyjnych baz danych. Coraz więcej firm wymaga też umiejętności przetwarzania danych w chmurze, więc naucz się tworzyć procesy przetwarzania danych, np. przy użyciu AWS S3 i EC2 i Apache Airflow.
Warto również rozwijać umiejętności miękkie, w szczególności komunikacyjne. Musisz umieć wytłumaczyć swoje rozwiązanie zespołowi i klientom, aby mogli je zrozumieć i chcieli z niego skorzystać. Szczególnie Ci ostatni coraz częściej chcą rozumieć jak działają tworzone dla nich systemy sztucznej inteligencji (AI). To zrozumiałe, bo w końcu na tych systemach opiera się coraz więcej funkcjonalności ich produktów.
3. Czym praca nad projektem ML różni się od zwykłych projektów deweloperskich?
Odpowiada Aleksandra Możejko, Machine Learning Engineer w Sigmoidal: Trudniej jest zaplanować pracę i wyestymować czas potrzebny na dostarczenie rozwiązania odpowiedniej jakości. Sporo czasu trzeba poświęcić na research i eksperymenty — tego komponentu nie ma w tak dużym stopniu projektach developerskich. Dochodzi też niepewność, wiele w projekcie zależy od danych. Postępy w pracach są mniej mierzalne, a wyniki często trudno zinterpretować w kontekście biznesowym. Jeżeli chodzi o zarządzanie projektem to spotkałam się z podejściem agile’owym. Natomiast mam wrażenie, że przy projektach Machine Learningowych są z tym podejściem różne problemy — np. z wyceną tasków researchowych czy eksperymentów. Z czasem może udać się to podejście lepiej zaadaptować do tego typu projektów. Wydaje mi się, że mogą powstać metodologie dostosowane specjalnie do potrzeb projektów Machine Learningowych.
Odpowiada Rafał Prońko, Data Scientist od ponad 5 lat: Jeśli chodzi o metodologię pracy to tak naprawdę niczym. W zespołach developerskich jak w zespołach DS, w których do tej pory pracowałem stosowano tę samą metodykę zwinnego zarządzania projektami. Jeśli chodzi natomiast o sam sposób pracy to moim zdaniem najważniejsza różnica polega na tym, że dużo czasu poświęca się na wyszukiwanie materiałów na temat podobnych problemów już rozwiązanych i na tym głównie buduje się pierwszy szybki PoC. Oprócz samego researchu nad metodami jest jeszcze bardzo dużo pracy z danymi — to jest około 70-80% czasu jaki poświęca się na projekt. Czyli jeśli miałbym to zamknąć w fazy to:
- Dane — wyszukiwanie / wyciąganie, przygotowanie danych, przygotowanie sensownych pipelinów dla obróbki danych, przygotowanie odpowiedniej miary biznesowej do mierzenia jakości modelu.
- Research nad metodami wykorzystywanymi w podobnych projektach.
- Implementacja modelu.
- Testowanie modelu.
- Jeśli wyniki nie są zadowalające to szukamy nowego rozwiązania — na początek na danych jakie już posiadamy, jeśli jednak dojdziemy do wniosku, że dane nie są wystarczające należy dodać danych i cofnąć się do punktu 1.
Odpowiada Kacper Łodzikowski, Pearson AI Products & Solutions: Projekt z zakresu uczenia maszynowego (ML) będzie łączył w sobie elementy zwinnego procesu wytwarzania oprogramowania oraz mniej ustrukturyzowanej pracy badawczej. Wiele firm zajmujących się ML to firmy badawczo-rozwojowe (R&D), które często mają pomysł na innowacyjny produkt, jednak jeszcze nie wiedzą czy jest on wykonalny.
W tego typu zespołach często rozróżnia się pomiędzy osobami, które prototypują rozwiązania (tzw. data scientists), a tymi które pomagają owe prototypy wdrażać i skalować (tzw. machine learning engineers). W tej drugiej roli zwykle dobrze sprawdzają się doświadczone osoby przekwalifikowujące się z pokrewnych obszarów IT, np. osoby posiadające wieloletnie doświadczenie w programowaniu (np. w Pythonie, Javie, C++).
Muszą one jednak pamiętać o tym, że praca inżynierska w takim zespole zapewne będzie mniej przewidywalna niż w typowym projekcie programistycznym. Nie wszyscy dobrze się z tym czują.
4. Jak oceniasz stosowalność w praktyce klasycznych metod machine learningowych, a jak deep learningu?
Odpowiada Aleksandra Możejko, Machine Learning Engineer w Sigmoidal: W rozwiązaniach biznesowych często klasyczne metody Machine Learningowe sprawdzają się lepiej niż Deep Learning ze względu na ich większą interpretowalność, czego klienci zazwyczaj oczekują. W mojej pracy jeżeli widzimy gdzieś możliwość zastosowania Deep Learningu to często z niej korzystamy, niektórych problemów nie da się zamodelować odpowiednio dobrze wyłącznie przy pomocy klasycznego ML. Zawsze jednak zaczynamy od najprostszych metod, choćby po to, żeby mieć baseline/benchmark. Deep Learning najlepiej się sprawdza przy budowaniu rozwiązań z zakresu wizji komputerowej, zaawansowanych zagadnieniach z przetwarzania języka naturalnego czy mowy. Klasyczny Machine Learning jest natomiast często lepszy dla danych tabularycznych.
Odpowiada Rafał Prońko, Data Scientist od ponad 5 lat: Jeśli chodzi o stosowalność klasycznych metod w ML to jestem zdecydowanym ich zwolennikiem — okazuje się, że przy rozwiązywaniu wielu problemów są one co najmniej tak dobre jak metody DL. Zawsze gdy zaczynam pracę nad nowym projektem to modele zaczynam od najmniej skomplikowanych. Dopiero z czasem staram się zwiększać skomplikowaność modelu — oczywiście o ile jest to niezbędne. Zawsze staram się podążać za cytatem: Wszystko powinno być tak proste jak to tylko możliwe ale nie prostsze.
Odpowiada Kacper Łodzikowski, Pearson AI Products & Solutions: Świat AI jest dopiero na początku drogi ku lepszemu zrozumieniu i wykorzystaniu metod uczenia głębokiego (DL). Póki co, w moim zespole jesteśmy optymistycznie nastawieni do stosowania metod DL w wybranych sytuacjach. Po pierwsze, gdy metody te dają lepsze wyniki przy określonym nakładzie zasobów. Po drugie, gdy możemy względnie łatwo przenieść obiecującą metodę pomiędzy domenami, np. metoda, która trafnie prognozuje wyniki sprzedaży może równie trafnie prognozować wyniki egzaminów.
Z drugiej strony, metody ML nadal wystarczają do rozwiązywania prostych problemów lub problemów wymagających większej wyjaśnialności modeli. Zawsze więc będziemy starać się wybrać metodę najlepiej wpisującą się w biznesowe i matematyczne wymogi narzucane przez dany projekt.
Niezależnie od metody, stworzenie udanego prototypu to dopiero początek wyzwań związanych ze stosowalnością szerokopojętej AI. Wdrożenie skalowalnego rozwiązania ML/DL stawia przed zespołem dalsze wyzwania. Dlatego w wielu firmach powstają dedykowane jednostki MLOps wzorowane na DevOps.
5. Jaki jest Twój ulubiony aspekt pracy nad rozwiązaniami ML?
Odpowiada Aleksandra Możejko, Machine Learning Engineer w Sigmoidal: Każdy projekt jest nieco inny ze względu choćby na inne dane. Jest sporo wyzwań. Mam okazję czytać artykuły naukowe i wdrażać opisane tam metody. Dużo się uczę i mam poczucie, że szybko się rozwijam.
Odpowiada Rafał Prońko, Data Scientist od ponad 5 lat: W pracy z rozwiązaniami ML najbardziej lubię to, że cały czas mogę się uczyć nowych rzeczy, cały czas coś mnie zaskakuje — nie ma typowej nudy. Każdy projekt nawet jeśli wygląda podobnie to jednak jest różny.
Odpowiada Kacper Łodzikowski, Pearson AI Products & Solutions: Dużo się uczę, aby móc zrozumieć coraz to nowsze rozwiązania opracowywane przez mój zespół.
6. Jaki był twój najtrudniejszy projekt, który trafił na produkcję? Dlaczego był trudny, jak sobie poradziłeś ile to trwało i czego się nauczyłeś?
Odpowiada Aleksandra Możejko, Machine Learning Engineer w Sigmoidal: Najtrudniejszy był dla mnie pierwszy projekt, który realizowałam dla klienta. Był to projekt z zakresu przetwarzania języka naturalnego. Największą trudnością było przekazanie klientowi szczegółów technicznych w zrozumiały dla niego sposób i pokazanie jakie korzyści biznesowe osiągnie. Do budowy rozwiązania wykorzystałam 1-wymiarowe konwolucyjne sieci neuronowe. Metryki, których użyliśmy do oceny modeli na zbiorze testowym wyglądały bardzo dobrze, natomiast gdy zasymulowaliśmy działanie modelu na produkcji (chodziło o artykuły pobierane w czasie rzeczywistym z internetu) model zwracał inne wyniki, niż oczekiwaliśmy. Okazało się, że oznaczone dane, które dostaliśmy od klienta miały zupełnie inny rozkład niż dane produkcyjne. Udało nam się ten problem rozwiązać, ale było to dosyć wymagające.
Odpowiada Rafał Prońko, Data Scientist od ponad 5 lat: Ciężko jest mówić o najtrudniejszym projekcie jaki wykonywałem czy też najłatwiejszym — każdy projekt jest inny, każdy wymaga takiego samego zaangażowania. Na przykład stworzyłem trzy odrębne projekty do przewidywania odejść klienta — każdy z nich był tak samo wymagający, w każdym z nich klient tak naprawdę chciał czegoś innego, co powodowało, że te projekty były tak naprawdę różne. Jeśli ciężko jest mi zróżnicować modele pod względem trudności to zdecydowanie łatwiej jest to zrobić pod względem frajdy z tworzenia projektu. W moim przypadku projektem, który sprawił mi najwięcej frajdy był projekt stworzenia szafki rozpoznającej produkty w niej zchowane, potrafi je dodać do koszyka klienta (wie kiedy zostały pobrane/odłożone), zna klienta (potrafi go rozpoznać). Projekt zakończył się sukcesem — obecnie jest prezentowany na wielu konferencjach.
Odpowiada Kacper Łodzikowski, Pearson AI Products & Solutions: Znaczna część naszych projektów polega na tworzeniu systemów wspomagania decyzji. Najtrudniejszym aspektem takich projektów często jest to samo: stworzenie takiego rozwiązania, którego ludzie będą chcieli używać.
Po pierwsze, w pewnych branżach coraz częściej wymaga się wyjaśnialności modeli. Jeśli algorytm w serwisie muzyki cyfrowej trafnie zarekomenduje Ci piosenkę, to zapewne nie będziesz się zastanawiać jak to zrobił. Wyobraź sobie jednak, że pracujesz w sektorze edukacji. Pewnego dnia algorytm wskazuje Ci kilka osób w Twojej klasie, które według niego nie zdadzą nadchodzącego egzaminu. Zapewne chciał(a)byś zrozumieć jego działanie, aby spróbować tym osobom pomóc.
Po drugie, nieustannie uczymy się jak ważne jest testowanie użyteczności interfejsów takich systemów. Osoby początkujące często popełniają ten sam błąd. Tworzą interfejs w oparciu o własne przeczucie i udostępniają go bez uprzedniego przetestowania go chociażby na kilku użytkownikach. Taki interfejs może wydawać się przydatny według osoby, która go stworzyła. Często jednak nie będzie on używany przez grupę docelową, bo nie spełnia jej potrzeb lub jest zbyt trudny w użyciu.
7. Opowiedz o swojej największej porażce i czego się z niej nauczyłeś/-aś?
Odpowiada Aleksandra Możejko, Machine Learning Engineer w Sigmoidal: Nie mam jakiejś jednej, spektakularnej porażki. Może kiedyś się przytrafi i wtedy będę miała o czym opowiadać, ale póki co największe są dla mnie małe porażki — np. kiedy nie zakomunikuję czegoś odpowiednio jasno w zespole albo przesadnie skoncentruję się na jakimś pomyśle — zdarza się. Jest to dla mnie sygnał do tego, co jeszcze powinnam w swoim działaniu usprawnić.
Odpowiada Rafał Prońko, Data Scientist od ponad 5 lat: Może to zabrzmi trochę arogancko, ale nie mam na swoim koncie porażki (jeszcze). Wszystkie moje projekty kończą się sukcesem — głównie dzięki dobrej analizie wymagań klienta oraz znajomości rozwiązań. Nigdy nie obiecuję komuś czegoś, czego nie jestem w stanie dokończyć / zrobić.
Odpowiada Kacper Łodzikowski, Pearson AI Products & Solutions: Dopiero niedawno zdałem sobie sprawę z jednej rzeczy, która powstrzymywała mnie od bycia lepszym liderem zespołu R&D. Przez ostatnie lata popełniałem ten sam błąd, mianowicie: gdy coś nam nie wychodziło, to obwiniałem wszystko wokół, np. problemy z jakością danych, brak odpowiednich zasobów, dysfunkcje organizacyjne, itd. Potem przeczytałem książkę “Extreme Ownership” (Jocko Willink i Leif Babin), dzięki której zrozumiałem tytułową zasadę “zawłaszczania odpowiedzialności” (według polskiego tłumaczenia). Zasada ta mówi o tym, że gdy napotkasz problem, to musisz opanować swoje ego i nie szukać wymówek. Zamiast tego musisz zaakceptować pełną odpowiedzialność za problem i znaleźć jego rozwiązanie. Dotyczy to również sytuacji, w których problem nie powstał z Twojej winy (wtedy właśnie “zawłaszczasz” sobie odpowiedzialność za problem). Polecam tę książkę. Nawet jeśli formalnie nie prowadzisz ludzi, nauczysz się lepiej pracować w zespole.
8. Jakie są ograniczenia dzisiejszych technologii i jak oceniasz ich rozwój w przyszłości?
Odpowiada Aleksandra Możejko, Machine Learning Engineer w Sigmoidal: Za największe ograniczenie współczesnych technologii, szczególnie deep learningu uważam brak matematycznego wytłumaczenia dla świetnych wyników uzyskiwanych empirycznie. Prowadzi to do sytuacji, w której ciężko jest określić sufit dokładności istniejących rozwiązań oraz dostarczyć rozsądne wytłumaczenie dla przypadków, które nie działają. Mam nadzieję, że w przyszłości powstanie matematyczny opis dla istniejących technologii, który zwiększy ich interpretowalność.
Odpowiada Rafał Prońko, Data Scientist od ponad 5 lat: Hmm ciężko chyba dziś mówić o jakiś szczególnych ograniczeniach technologii — raczej wszystko co byśmy chcieli da się już zrobić: przetwarzać duże zbiory danych niemal w mgnieniu oka, budować coraz to lepsze modele ML — często lepsze już nawet od ludzi. Problemem chyba teraz nie jest już technologia ale myślenie ludzi — taki trochę strach przed maszynami i tym, że mogą być lepsze od ludzi — strach przed powierzaniem maszynom naszej przyszłości / naszego życia? To jest chyba coś z czym dziś należy się zmierzyć.
Odpowiada Kacper Łodzikowski, Pearson AI Products & Solutions: Nieustannie poszukujemy usprawnień, które umożliwiają nam spędzanie większej ilości czasu na prototypowaniu rozwiązań niż na przetwarzaniu danych oraz rozwiązywaniu problemów z technologiami niedziałającymi zgodnie z obietnicami. Szczególnie śledzimy rozwój wysokopoziomowych bibliotek takich jak Keras czy Gluon ułatwiających eksperymentowanie z metodami AI; oraz platform takich jak AWS SageMaker ułatwiających wdrożenie prototypowego rozwiązania AI bez potrzeby przerabiania go w innej technologii.
Do przygotowania grafiki głównej wykorzystano grafikę ze strony digitalocean.com.