Maszyny przetwarzają większe ilości danych niż ludzie. Historia Piotra Kubicy
Machine learning jest na topie wśród rozwijających się technologii, a specjaliści w tej dziedzinie to prawdziwy skarb na rynku pracy. Czy każdy może zostać machine learning developerem? Czym różni się programowanie machine learning od tradycyjnego programowania? Czy da się rozpocząć karierę bez znajomości matematyki i statystyki i jakie predyspozycje powinien mieć dobry specjalista ML? O wyzwaniach i możliwościach w tym zawodzie rozmawiamy z Piotrem Kubicą z JCommerce.
Spis treści
Machine learning to młoda dziedzina, o której jednak dużo mówi się w kontekście sztucznej inteligencji, automatyzacji. Jak zostałeś specjalistą w tej dziedzinie?
Zawsze lubiłem dane i statystyki, z których często można wysnuć ciekawe informacje. Przygodę z programowaniem zaczynałem kilka, może nawet kilkanaście lat temu. Wtedy to nie było dla mnie zbyt ciekawe. Programowanie daje ogromne możliwości, natomiast wtedy mnie trochę nudziło, może dlatego, że wymagało dużych nakładów pracy. Do programowania wróciłem na studiach, duży wpływ miała na to moja dziewczyna, której chciałbym podziękować za wsparcie. Przede wszystkim swój wolny czas poświęcaliśmy na naukę matematyki i programowania.
Po kilkunastu miesiącach udało się nam dojść do takiego poziomu, by rozwiązywać ciekawe problemy ze świata realnego już z użyciem machine learningu. Dalszy rozwój, nauka i tworzenie własnych projektów pozwoliło rozpocząć komercyjną przygodę.
W jaki sposób uczyłeś się, podnosiłeś swoje umiejętności?
Głównie w domu, przerabiając książki, tutoriale i kursy internetowe. Mnie osobiście najłatwiej przyswaja się wiedzę poprzez oglądanie filmów. Na początku w przypadku pokazywanych implementacji równolegle w oknie obok pisałem kod i starałem się go zrozumieć. Oprócz tego na pewno dzięki części zajęć ze studiów mogłem podnieść swoje umiejętności. Chodziłem, dalej chodzę na meetupy, szkolenia i konferencje.
Polecasz jakieś kursy?
Mogę polecić kanały:
- Pasja Informatyki Mirosława Zelenta – dobry wstęp do programowania.
- Sentdex – kanał założyciela pythonprogramming.net dobry do nauki Pythona.
- Etrapez – powtórzenie podstaw matematyki i statystyki jest przydatne.
- Deeplearning.ai – dobre źródło wiedzy o sieciach neuronowych.
Możesz podać przykład ciekawego problemu, który udało Ci się rozwiązać po roku nauki?
To było scrapowanie danych ze stron internetowych agregujących dane i wskaźniki makroekonomiczne. Po połączeniu ich z danymi notowaniami i analizą sentymentu mogłem tworzyć modele do handlu kontraktami.
Co z perspektywy czasu przyspieszyłoby wzrost Twoich umiejętności?
Nie umiem znaleźć takiej rzeczy. Nauka wymaga czasu, więc gdybym miał go więcej lub gdybym zaczął wcześniej, to może obecnie byłbym dalej, ale to tylko gdybanie.
Co Ciebie w pracy machine learning engineera najbardziej interesuje? Co jest najciekawsze w tej technologii?
Myślę, że to właśnie obszar różniący machine learning i tradycyjne programowanie jest najciekawszy. Machine learning zainteresował mnie dużo bardziej, ponieważ nie musimy wszystkiego programować „na sztywno” sami. Przy tradycyjnym tworzeniu oprogramowania musimy zebrać wymagania i oprogramować możliwe sytuacje. Każdy warunek trzeba odpowiednio przemyśleć, a program będzie tak dobry, jak wiedza dziedzinowa człowieka go tworzącego.
Obecnie, gdy mamy tak dużo danych i machine learning w ostatnich -nastu latach mocno się rozwija, mamy możliwość uczenia maszyn na podstawie danych. Wykorzystując algorytmy machine learning, jesteśmy więc w stanie stworzyć program, który będzie budował lepsze rozwiązania, niż jesteśmy w stanie stworzyć w trakcie tradycyjnego tworzenia oprogramowania.
Wykorzystanie machine learningu to nadal wizja przyszłości czy już dzisiaj każdy z nas w jakimś stopniu korzysta z machine learningu?
Myślę, że wiele osób jest nieświadomych tego, z ilu metod sztucznej inteligencji korzysta na co dzień. Na przykładzie smartfona, najpierw odblokowujemy telefon dzięki rozpoznawaniu naszej twarzy, do czego są wykorzystywane konwolucyjne sieci neuronowe. Potem wpisujemy coś za pomocą klawiatury, która podpowiada kolejne słowa z pomocą rekurencyjnych sieci neuronowych. Następnie przeglądarka zwraca nam wyniki na podstawie około 200 modeli, z których część opiera się na różnych algorytmach uczenia maszynowego.
Więcej o zastosowaniu machine learningu mówię na jcommerce.pl/jpro.
Czy ogrom danych, z jakim mamy obecnie do czynienia, sprawia, że tradycyjne programowanie nie wystarcza, a przyszłość to algorytmy?
Tradycyjne programowanie jest i będzie potrzebne, natomiast obecnie dostępną ilość danych możemy wykorzystać, tworząc nowe rozwiązania, których nie bylibyśmy w stanie w sposób tradycyjny zaprogramować. Przykładem może być rozwiązanie problemów związanych z rozpoznawaniem obrazów, np. odróżnienie psa od kota na obrazku ze skutecznością minimum 80%. Za pomocą tradycyjnego oprogramowania byłoby to jeśli nie niewykonalne, to niesamowicie czasochłonne. Natomiast ten problem jest, można powiedzieć, takim „hello worldem” w deep learningu, czyli dziedzinie machine learningu wykorzystującej sieci neuronowe. Dzięki algorytmom jesteśmy w stanie uczyć maszyny, a następnie implementować rozwiązania bazujące na algorytmach w różnych procesach. Maszyny są w stanie wykorzystać i przetworzyć większe ilości danych niż ludzie.
Źródło: knowyourmeme.com
Czy to oznacza potencjalne zagrożenia dla stanowisk pracy dla ludzi? A może jest odwrotnie? Może machine learning stwarza możliwości tworzenia nowych miejsc pracy?
Wydaje mi się, że gdy miała miejsce rewolucja przemysłowa, wszyscy się obawiali, że nie będzie pracy. W tym przypadku też będzie tak, że będą powstawały inne, nowe miejsca pracy wykorzystujące potencjał machine learning. Podobnie jak wcześniej rewolucja przemysłowa pozwalała zwiększyć produkcję i zautomatyzować pewne monotonne czynności, tak samo jest i będzie z machine learningiem i ewentualnie kolejnymi jeszcze nieznanymi rewolucjami.
Czyli ludzie nie staną się zbędni?
Ludzie będą nadal potrzebni do sprawdzania algorytmów, tworzenia ich i do zajmowania się tymi przypadkami, które nie były przewidziane i których nie było w zbiorze uczącym, a są w jakiś sposób nowe dla modeli machine learning. Przede wszystkim machine learning wymaga danych do działania, więc trudno go wprowadzić tam, gdzie jest ich mało albo są słabej jakości.
W tego typu pracy pewnie jest potrzebna duża elastyczność i umiejętność reagowania na to, co się dzieje. Jakie jeszcze umiejętności są istotne?
Myślę, że umiejętność logicznego myślenia jest tutaj ważna. Pojęć machine learning engineer czy też data scientist używa się naprzemiennie, chociaż troszkę się różnią. Według różnych definicji data scientist posiada większą wiedzę dziedzinową, a machine learning engineer bardziej skupia się na programowaniu i algorytmach machine learning. W każdym razie mówi się, że data scientist jest lepszy w programowaniu niż statystyk i jest lepszym statystykiem niż programista. Myślę, że to całkiem trafne podsumowanie. Takie połączenie matematyki czy statystyki właśnie z umiejętnością programowania jest bardzo ciekawym zestawem umiejętności, żeby rozwijać się w tym kierunku.
Opracowanie własne w nawiązaniu do materiałów przygotowanych przez Sama Nelsona
Jakie są Twoim zdaniem największe wyzwania w obszarze machine learning? Jeśli chodzi na przykład o wykorzystanie języka polskiego w procesach sztucznej inteligencji, jest chyba jeszcze dużo do zrobienia…?
Dokładnie. Też jestem zdania, że obecnie z tego powodu, że baza [języka polskiego] jest tak mała, jest dużo pracy, którą trzeba wykonać ręcznie. W przypadku języka angielskiego jest dużo łatwiej, ponieważ jest prostszy, używa go więcej osób i jest wdrożony w zdecydowanie większej ilości rozwiązań. W naszym języku, by stworzyć jakieś rozwiązanie, musimy poświęcić bardzo dużo czasu na sprawdzanie różnych przypadków i tego, jak one działają. Należy m.in. sprawdzić, kiedy i które słowa trzeba usunąć ze zbioru, jakie są odmiany tych słów, co stanowi rdzeń tych słów, które słowa mogą być stosowane zamiennie itd.
To taki machine learning kontrolowany. Przypomina mi to ciekawy przypadek bota Twittera [Tay – przyp.], który nauczył się obrażać ludzi.
Został dezaktywowany z tego powodu, że ludzie uczyli go – delikatnie mówiąc – brzydkich rzeczy. Był to też przykład modelu uczonego online. W takiej sytuacji istnieje więc dodatkowe zagrożenie, które może wynikać z tego, że jakiś model, uczony online, przeuczy się. Łatwiejszym rozwiązaniem jest zatem stworzenie modelu offline i wykorzystywanie go, bez dodatkowego douczania. Wtedy nie powinno dojść do sytuacji, że model nauczy się czegoś, czego byśmy nie chcieli.
Czym jest model offline?
Różnica pomiędzy modelem online i offline polega na wykorzystaniu procesu uczenia w różnych momentach cyklu życia modelu. W przypadku modelu offline na produkcji umieszczamy nauczony model, bez możliwości uczenia go w czasie rzeczywistym. W przypadku chęci zmiany czy poprawy modelu możemy tworzyć kolejny model offline i podmienić go później na produkcji. To najczęstsze podejście. Ale coraz częściej podchodzi się do tego tematu, pozwalając się uczyć modelowi w trakcie jego pracy. Jest on wystawiony na produkcję, dostaje nowe informacje, dodatkowo się doucza.
Widzę, że pracy dla specjalistów machine learning nie będzie brakowało. Uogólniając: Twoim głównym zajęciem i obszarem zainteresowań jest tworzenie jak najlepszego modelu?
Tak, myślę, że to jest dobre zgeneralizowanie. Natomiast tego czasu, który faktycznie się poświęca na tworzenie modelu, jest w mojej pracy może 10-20 procent. Mówi się też, że sam algorytm nie ma tak dużego znaczenia jak jakość i ilość danych, którymi model jest uczony. Więc tutaj dużo czasu właśnie, pracy, poświęca się na tworzenie, rozpoznawanie tych danych i tworzenie różnych pipeline’ów.
Czym jeszcze zajmuje się specjalista machine learning?
W tej pracy poświęca się też czas na feature engineering – tworzenie dodatkowych zmiennych na podstawie istniejących danych i wiedzy dziedzinowej. Przykładem może być stworzenie zmiennej, która jest wynikiem dzielenia stopnia użycia procesora poprzez stopień użycia pamięci operacyjnej. Taka dodatkowa zmienna potrafi wspomóc modele wykrywające anomalie w systemach monitorujących. Pracy z samymi danymi jest sporo. A tą najciekawszą częścią jest już sam proces modelowania, gdzie już mamy dane i w dalszym ciągu możemy je zmieniać, starając się uzyskać jak najlepszy model w zależności od potrzeby, zastosowania i wybranych miar skuteczności. Mamy różne rodzaje pomyłek.
Możesz podać przykład?
Jadąc samochodem, widzimy możliwość zderzenia się z pieszym (true positive) oraz kontynuowania jazdy (true negative). A możemy pomylić się na dwa sposoby, zatrzymać się na prostej drodze, gdy nikogo nie ma w pobliżu (false positive) lub kontynuować jazdę mimo możliwości kolizji (false negative). Jest to być może skrajny przypadek, ale myślę, że to w jakiś sposób obrazuje różne możliwości pomyłki. W takich przypadkach wolimy częściej założyć, że dany przypadek jest pozytywny, nawet fałszywie (błąd pierwszego typu / Type I Error), niż ryzykować możliwość przejechania kogoś (błąd drugiego typu / Type II Error).
Wspominasz, że Twoja praca polega na ciągłym modelowaniu. Czy taka praca może kiedykolwiek być skończona? Czy jest to takie nieustanne przemodelowywanie danych?
Dużo zależy od przypadku użycia. Bo część danych, część zastosowań machine learning, może być w miarę stała. Podam kolejny przykład: wykrywanie wolnych miejsc parkingowych przez kamery. Na przestrzeni kilku lat, gdy samochody będą wyglądały inaczej, a nasz model nie będzie nauczony je rozpoznawać, może to działać gorzej. Zatem trzeba te wszystkie istniejące modele nadzorować, sprawdzać okresowo, walidować. Tak żeby radziły sobie tak dobrze jak na początku. Pewnie niektóre pomyłki wystąpią rzadziej bądź w ogóle, natomiast często, jak sądzę, żeby mieć rozwiązanie dobre i mieć co do niego pewność – należy je walidować i w miarę potrzeb przyuczać. Nie szukając daleko, Cybertruck od Tesli na pewno jest czymś, co znacząco różni się od obecnych samochodów i różne modele machine learning początkowo nie radzą sobie z rozpoznawaniem tego pojazdu.
Źródło: analyticsindiamag.com
Na koniec pytanie, które pewnie zadaje sobie niejeden programista marzący o karierze w tej dziedzinie. Jakie predyspozycje czy cechy powinien mieć dobry specjalista machine learning?
Myślę, że tutaj predyspozycji może nie ma na tyle, bo najważniejsza jest chyba w przypadku pracy programisty czy machine learning engineera chęć rozwoju i poznawania nowych rzeczy. Predyspozycją jest chęć i umiejętność uczenia się – to jest jedyna rzecz, którą trzeba posiadać, bo wszystkiego, wydaje mi się, jesteśmy w stanie się nauczyć.
Czy można pracować jako specjalista machine learning bez solidnych podstaw matematyki?
Mówi się, że można się zajmować machine learningiem bez znajomości matematyki… Cóż… można, natomiast łatwiej jest ze znajomością matematyki i statystyki. Później też jest się w stanie tworzyć lepsze rozwiązania, które są mniej podatne na błędy. Natomiast, tak jak mówiłem, to nie jest konieczne. Można też w razie konieczności, w trakcie nauki, w trakcie pracy, poza nią, poświęcać swój wolny czas na dokształcanie się.
Tych wszystkich, no prawie wszystkich rzeczy potrzebnych do bycia specjalistą machine learning, można się nauczyć. Wydaje mi się, że ta praca, podobnie jak praca programisty, polega na rozwiązywaniu problemów. Tylko oprócz standardowych problemów związanych z tworzeniem oprogramowania dochodzi cała masa wyzwań związanych z danymi, ich zależnościami oraz algorytmami uczenia maszynowego. Tak jak wspominałem – logiczne myślenie, często nieszablonowe, które pozwala znajdować zależności, wykrywać problemy dużo wcześniej, jest tu bardzo ważne.
Piotr Kubica. Machine Learning Engineer w JCommerce. Lubi rozwiązywać problemy, tworząc wartość dodaną dla klienta. Współtworzy innowacyjne rozwiązania oparte na uczeniu maszynowym dla firm z sektora FinTech. W wolnym czasie lubi napić się dobrej kawy i pograć w gry komputerowe (głównie RTS-y). Amator windsurfingu i jazdy na nartach.