DATAWORKSHOP
Uczenie maszynowe -
od czego zacząć
Moja historia podróży po świecie ML
Edukowanie innych to wspaniała rzecz, ponieważ napędza także własny rozwój. Ponadto poczucie, że można skrócić czyjąś drogę poszukiwań znacząco jest także bardzo przyjemne. Błądzenie ma większy sens po uliczkach miast, natrafiamy wtedy na ciekawe miejsca, ale jeśli chodzi o uczenie maszynowe, to mamy tak ogromne pole rozważań na ten temat i dostępnych materiałów, że można czuć się zagubionym i nie wiedzieć, od czego zacząć.

Często dostaję pytania: ale jak zacząć, od czego? Dlatego pojawił się pomysł, aby podzielić się przemyśleniami w tym zakresie i pomóc Ci odnaleźć się w tym gąszczu informacji o Machine Learning, które aktualnie nas otaczają. Być może kilka lat mego praktycznego doświadczenia pomoże Ci wejść na właściwą dla Ciebie ścieżkę i zachęci Cię do rozpoczęcia przygody z ML. Przygoda jest wielka i póki co nie widać jej końca ;)
Uczenie maszynowe od czego zacząć
Pierwsze pytanie, które należy zadać samemu sobie, to dlaczego chcę zająć się tym tematem. Przygotowałam kilka inspiracji / podpowiedzi, które mogą być dla ciebie interesujące. W zasadzie to pytanie nie jest związane stricte z ML, warto zadawać je zawsze, kiedy chcesz coś zmienić.
Chcę więcej zarabiać.
No i faktycznie, jeżeli poczytamy najnowsze informacje, to możemy się dowiedzieć, że są osoby, które potrafią zarabiać milion dolarów rocznie. Jest pokusa, żeby się przebranżowić. Oczywiście chodzi o Stany Zjednoczone, w Polsce zarabianie takich pieniędzy jest pewnie trudniejsze, ale ewidentnie czuć, że jest tu potencjał – zwłaszcza jeżeli masz pewne umiejętności, wiedzę techniczną, potrafisz budować modele, ale również potrafisz to umiejętnie sprzedać biznesowo albo połączyć kropki pomiędzy tymi światami. Wtedy Twoja pensja może być większa niż zwykłego programisty.

Z drugiej strony chciałem opowiedzieć historię z moich studiów. Miałem na studiach kolegę, który bardzo się męczył na kierunku informatycznym i kiedyś zapytałem go, czemu zaczął studiować na tym kierunku, bo dla mnie niezrozumiałe było, jak można się męczyć z komputerami, wydawał mi się to być najlepszy sposób spędzania życia. I on odpowiedział, że przyszedł na ten kierunek, bo mama mu kazała i po nim można zarabiać więcej pieniędzy. Dobrze, że jednak na drugim roku podjął decyzję o zmianie kierunku, która okazała się później bardzo trafna.

Dlatego spróbuj się zastanowić, czy też nie jesteś w podobnej sytuacji, jeżeli ML nie jest dla Ciebie, to nie pchaj się w niego na siłę. Z drugiej strony ML ma bardzo wiele różnych obszarów – to nie są wyłącznie techniczne obszary, są również jak najbardziej humanistyczne. Mało tego, podejrzewam, że w najbliższej przyszłości te obszary humanistyczne będą mieć znaczny wpływ na naszą przyszłość, bo techniczne będą już opracowane.
Chcę być sławny dzięki wynalazkowi.
To może wydawać się trochę dziwne, ale jak rozmawiam z ludźmi, to często oni nie zdają sobie z tego sprawy, że jest to dla nich bardzo ważne. Jeżeli i ty też masz taką potrzebę, to oznacza, że w powinieneś trochę inaczej myśleć i trochę inaczej się rozwijać, żeby to osiągnąć. To jest zupełnie inne wyzwanie niż poprzednie.
Chcę pomóc ludzkości
Ten argument należy prawdopodobnie do mniej licznej grupy i mam nadzieję, że postaram się załapać do tej grupy i próbuję to robić wszystkimi siłami. Żeby rozwijać się w tym kierunku, to znów trzeba inaczej patrzeć na sytuację, inne obszary, inne umiejętności trzeba rozwijać.
Chcę zbudować karierę w środowisku akademickim.
W tym przypadku znów trzeba inaczej podejść do sprawy i inaczej się rozwijać.

Dlatego zastanów się na spokojnie, spędź godzinę czy kilka na przemyśleniach. Bardzo fajnie takie rzeczy przemyśleć idąc sobie na spacer, zostawiając komórkę w domu, idealnie, gdyby to były góry czy las, tam gdzie jest cisza, gdzie możesz zostać sam ze sobą chociażby na godzinkę. Bardzo paradoksalne jest to, jak często nie potrafimy zostać na godzinkę sami, żeby porozmawiać sami ze sobą albo zastanowić się dlaczego chciałbym coś zrobić.

Gdy już wiesz, co Tobą kieruje. Zadaj sobie pytanie:

Co chcesz osiągnąć?

To „coś" podzieliłem na dwa wymiary.
Pierwszy wymiar:
  • założyć własny start-up
Być może będziesz współzałożycielem, partnerem. Prawdopodobnie nie zarobisz na tym dużych pieniędzy, bo start-upy najczęściej upadają, więc są inne lepsze ścieżki, by zarobić więcej pieniędzy. W start-upach często powstają wynalazki – to już jest dobry kierunek myślenia. Jeśli chodzi o pomaganie ludziom taki start-up może być korzystny.

  • praca na etat w korporacji
Możesz zarabiać duże pieniądze, ale statystycznie na wynalazek nie ma większych szans. Etat niekoniecznie daje możliwości pomagania ludziom.

  • pracować z najlepszymi DeepMind/Google Brain/FB AIR Research
Może też brzmi trochę dziwnie, ale takie firmy przyciągają „mózgi" i bardzo je doceniają. Ten punkt bardzo się łączy ze światem akademickim, bo te trzy instytucje bardzo doceniają osoby z doktoratem, głęboką wiedzą teoretyczną i próbują to łączyć z biznesem.
Drugi wymiar - jaką rolę będziesz wykonywać, gdy założysz start-up albo pójdziesz na etat:
Tych ról jest naprawdę wiele, a rynek jest bardzo niedojrzały i przez to każda firma trochę inaczej traktuje to, kim jest na przykład data engine albo machine learning engineer. Jeśli zapytasz w 5,10 różnych firmach, co oni myślą na ten temat, to z dużym prawdopodobieństwem usłyszysz różne odpowiedzi. Ale spróbuję to trochę poukładać. Niektóre z tych ról to:

  • data engineer
  • machine learning engineer
  • machine learning researcher
  • data science/ml manager
  • data scientist
  • PhD/professor
  • hobby
Skupmy się na kilku najbardziej popularnych.

Data engineer musi być bardzo dobry w backendzie, musi znać przynajmniej jeden z języków: Python, Java, C++, SQL, ale dobrze by znał co najmniej 2 z nich. Dość często frontendy i backendy są napisane w Pythonie, ale pewne kawałki kodu trzeba zoptymalizować w Javie czy C++. Dodatkowo z dużym prawdopodobieństwem będziesz potrzebować SQL-a, bo dane trzeba pobrać i wrzucić. Również potrzebna będzie znajomość takich narzędzi jak Hadoop, EML, Spark, Kafka, związanych z big data.

Jak pokazuje doświadczenie, przydałaby się znajomość frontendu – nie musisz być ekspertem, ale potrzebna bywa podstawowa znajomość, żeby czasem coś zmienić, dodać przycisk, szczególnie jeśli chodzi o JavaScript. Zacząłem pracować z JavaScriptem ponad 10 lat i to co się działo wtedy, a to co się dzieje teraz, to są zupełnie różne światy. Teraz ten JavaScript trochę wariuje, jeżeli chodzi o ilość bibliotek, którą musisz wciągnąć, żeby zrobić Hello World, a z drugiej strony podają pełne wyjaśnienia dlaczego akurat tak się dzieje i warto być z tym na bieżąco.

Data engineer jest odpowiedzialny za to, żeby zbudowany model dostarczyć na produkcję i żeby on był dostępny, skalowalny. Jest również odpowiedzialny za to, żeby reagować na pojawiające się błędy. Jeżeli chodzi o obszary, które warto znać, ale niekoniecznie trzeba być w nich ekspertem, to z pewnością jest to uczenie maszynowe. Prawdopodobnie przydałoby się mu, żeby kojarzył, co to jest ML, być może fajnie by było, żeby zbudował chociażby jeden czy dwa modele i wtedy ta wiedza będzie lepiej zintegrowana.

Zwykle data engineerami zostają ludzie, którzy programują i później przechodzą na ML, bo to jest większe wyzwanie niż robienie stron www. Gdy pracujesz 5-10 lat, to w pewnym momencie zaczyna Cię to nudzić, bo nic nowego się nie pojawia i wiesz, co trzeba robić. Ja starałem się wtedy na przykład słuchać jakąś książkę, by mój umysł był bardziej pochłonięty nową wiedzą, z ta żmudna praca działa się jakby automatycznie. I to jest dobry moment, by przejść do roli data engineera, bo jest bardziej ambitna.


Kolejną rolą, którą omówię jest ML engineer. Od tej osoby spodziewamy się, że będzie dość mocno ukierunkowana na to, w jaki sposób rozwiąże problem czy dostarczy rozwiązania. Również bardzo ważna jest komunikacja na odpowiednim poziomie. Komunikacja w ogóle jest bardzo trudnym aspektem dla osób technicznych i na tym osobiście wiele razy się potknąłem i później pracowałem nad tym, by nauczyć się lepiej wyjaśniać różne tematy. Warto zainteresować się storytellingiem. Komunikacja to sprawa kluczowa, bo może się okazać, że zbudujesz bardzo fajny model, bardzo fajnie będzie to wyglądało na liczbach i będziesz w stanie to zinterpretować, ale nikt poza tobą nie będzie w stanie tego odczytać, a ostateczna decyzja jest podejmowana przez ludzi z biznesu. Jeżeli nie jesteś im w stanie wyjaśnić, to już przegrałeś na starcie. Druga rzecz to uczenie maszynowe, przy czym tutaj nie chodzi o to, że musisz tworzyć własne algorytmy – Twoim zadaniem jako inżyniera jest wziąć wiedzę, który jest dostępna, umieć ją w odpowiedni sposób zastosować, połączyć to wszystko, żeby działało i mniej więcej tyle. Musisz wiedzieć, jakie są modele, w jaki sposób można je zwalidować, sprawdzić, czy działają poprawnie. Jeżeli chodzi o stack techniczny to Python albo R, to są takie dwa wiodące języki. Ja skupiam się na Pythonie, bo wydaje mi się, że to jest takie bardzo pragmatyczne podejście. Mówiąc o Pythonie, wymienię kilka dodatkowych bibliotek: Jupyter, NumPy, Pandas, Scikit-Learn, ewentualnie Matplotlib. Mając taką wiedzę, można powiedzieć, że możesz już pracować jako ML engineer. Tu wymagania są różne niż dla data engineera.

Jeżeli chodzi o wiedzę, która byłaby przydatna, ale niekoniecznie musisz być w niej ekspertem, to warto wiedzieć, w jaki sposób zarządzać kodem, jak działa backend, bo rolą ML engineera jest właśnie dostarczanie, budowa prototypów, weryfikacja pomysłów, hipotez. I zwykle taka osoba nie wdraża modelu na produkcję, robi to data engineer, ale dobrze byłoby, aby osoby na obu tych stanowiskach rozumiały te dwa światy – by ML engineer rozumiał, o co chodzi na backendzie i pomagał we wdrożeniu, a data engineer rozumiał, o co chodzi w ML.

Trzecią rolą, która dość mocno się różni od poprzednich, nazwałem ML researcher, może się również nazywać trochę inaczej. Tutaj bardzo ważna jest przede wszystkim twarda wiedza teoretyczna na temat uczenia maszynowego, statystyki, matematyki, fachowa umiejętność czytania i pisania publikacji. Taka osoba musi pochłaniać te publikacje „na śniadanie". Jego celem jest kombinowanie, co by jeszcze można było zrobić, żeby te model działały jeszcze lepiej. Ta osoba niekoniecznie buduje prototypy, ale dość często skupia się na tworzeniu syntetycznych zbiorów danych i na nich pracuje. Ta rola jest dość często spotykana w środowisku akademickim, chociaż w nim jest za bardzo teoretyczna. W DeepMind, Facebooku czy Google Brain próbują łączyć to również z biznesem – nadal jest nacisk na research, badania, ale z drugiej strony te badania ostatecznie będą rozwiązywać problemy biznesowe.

Jaka wiedza przydałaby się takiej osobie? Generalnie takie osoby zwykle nie są zbyt mocne w programowaniu, a przydałoby się, żeby umiały trochę kodować czy hardkodować. Jeśli taka osoba potrafi tylko pisać publikacje językiem matematycznym, to już traci, bo w uczeniu maszynowym, przynajmniej w obecnej fazie, jest wyprzedzany przez matematyków i są konkretne rzeczy, które działają, dlatego że ktoś inny sprawdził, że taka kombinacja faktycznie działa. Dlatego uważam, że taka osoba jednak musi kodować, to może być taki hardkoding, że ciężko go będzie odczytać, nie będzie tam dobrych praktyk, ale na tym poziomie to nie jest aż takie kluczowe.

Wymieniłem trzy role, ale nie jestem w stanie się wypowiedzieć o wszystkich rolach, zwłaszcza o ML research, bo nigdy się tym nie zajmowałem. Jeżeli chodzi o pracę w DeepMind, to nagrałem odcinek Biznes Myśli z Mateuszem, więc jak ktoś rozważa na poważnie, by iść w tym kierunku, to bardzo polecam go posłuchać – bo w nim były bardzo praktyczne porady, między innymi taka, że koniecznie musisz się zaangażować na jednej z dobrych uczelni, najlepiej zagranicznej, chociaż w Polsce czasem trafiają się naprawdę fajni mentorzy, ale to niestety jest rzadkością. Taki mentor musi faktycznie być na tyle zaawansowany, żeby pomóc Ci rozwinąć swój talent, mało tego, musi mieć również odpowiednie kontakty, żebyś nie tylko siedział w tym lokalnym środowisku, ale również miał możliwość wyjechać chociaż na krótkie staże, na przykład do Stanford czy Oxfordu i dzięki temu się rozwinąć.

Więc na temat ML research nie będę teraz mówić za wiele, bardziej skupię się na ML engineer. To jest ten obszar, na którym najbardziej się skupię, jeżeli chodzi o uczenie maszynowe, wspomnę też o data engineer.
Chciałbym, żebyś po tym artykule miał pewną wizję, jak ten świat funkcjonuje, kto z kim i w jaki sposób się komunikuje, co dostarcza. ML research dostarcza przede wszystkim publikacji i teoretycznych rozważań, które inspirują, ale niekoniecznie można dzięki nim poczuć smak działania i rozwiązywania namacalnych problemów. ML engineer nie ma aż tak dużo czasu, żeby pochłaniać fachowe publikacje, natomiast co jakiś czas musi pracować nad swoim rozwojem, żeby nie stać w miejscu. Dość ścisła jest współpraca pomiędzy ML engineerem i biznesem, tutaj pojawia się decyzja, która następuje w momencie współpracy pomiędzy osobą, która dostarcza taki prototyp, pokazuje jego możliwości, wyjaśnia, jakie są problemy i jak możemy je rozwiązać.

Większość dobrych modeli nazywa się black boxami, a biznes zwykle ich nie toleruje. Jeżeli powiesz biznesowi, że to jest black box i nic z tym nie zrobimy, to jest prawda, ale że nic z tym nie zrobimy, to jest trochę słabe, bo jednak są pewne narzędzia, które dają możliwość interpretowania, co się dzieje w tych black boxach. Jeżeli jesteś właśnie w tym miejscu i potrafisz to pokazać, przekonać biznes, że to jest większa wartość, to oznacza, że znajdujesz się w odpowiednim miejscu i jeżeli Twoim celem jest zarabiać więcej pieniędzy to strzeliłeś w dziesiątkę. Data engineer dostarcza te rzeczy na produkcję, współpracuje z ML engineerem, współpracuje również z biznesem, ale ta rola według mnie jest bardziej schowana. Oczywiście ta osoba też musi myśleć, co robi, po co to robi, ile czasu spędza na różnych rzeczach, ale według mnie ta współpraca z biznesem jest troszkę mniejsza w porównaniu z ML engineerem.

Przejdźmy teraz do roli data scientist. Jest z nim taki problem, że ciężko go zdefiniować. Niekiedy firmy zakładają, że data scientist zawiera te trzy wcześniej wymienione elementy: data engineer, ML engineer i ML researcher, ale wiadomo, że jak ktoś jest od wszystkiego, to średnio to działa. Dość często jest tak, że łączy się role data engineer i ML engineer, ale to też średnio się sprawdza pod tym względem, że jest dużo zdolnych programistów, którzy potrafią bardzo dobrze przygotować tzw. pipeline i dostarczą ten modem na produkcję, a przy tym nie potrafią robić badań, eksperymentów, hipotez z danymi. ML engineerowi zajmuje to powiedzmy dwa tygodnie, a programiście 5 dni – wiadomo, że lepiej, żeby zrobił to programista, bo po co marnować potencjał. Więc jednak korzystniej, jeżeli w firmie jest ten podział. Do stanowiska data scientist można dołożyć taką rolę, jaką jest znalezienie i pobieranie danych.
Data scientist (n.): "Person who is better at statistics than any software engineer and better at software engineering than any statistician"
Jak to osiągnąć?
Najpierw trzeba odpowiedzieć sobie na pytanie: „dlaczego", później „co chcesz osiągnąć".
Teoria
  • Książki
  • MOOC
Networking
  • Meet-upy
  • Konferencje
  • Sieci społecznościowe
Chcesz otrzymać cały artykuł pełen mojego doświadczenia i praktycznych porad za darmo?
Wypełnij formularz poniżej i wyślę Ci poradnik w wersji PDF na maila. Tak, ponad 30 stron praktycznej wiedzy - absolutnie za darmo.

Zobacz, jak to wygląda poniżej.
39 stron praktycznej wiedzy
Ponad 10 lat temu zacząłem programować. Od 2013 roku zacząłem pracować z uczeniem maszynowym (od strony praktycznej). W 2015 założyłem inicjatywę DataWorkshop. Pomagać ludziom zaczać stosować uczenie maszynow w praktyce. W 2017 zacząłem nagrywać podcast BiznesMyśli. Jestem perfekcjonistą w sercu i pragmatykiem z nawyku. Lubię podróżować.

Follow me on Twitter and Facebook
Kontakt
również możesz pisać na:
hello (małpa) dataworkshop.eu
ul. Mogilska 43
31-545 Kraków, Polska