Machine Learning Engineer – kariera, wyzwania, możliwości
Gościem już 104 odcinka podcastu Biznes Myśli był Kamil Krzyk – Machine Learning Engineer, absolwent kursu „Praktyczne uczenie maszynowe„. Kamil wziął udział w pierwszej edycji kursu i jestem bardzo dumny z tego, jak bardzo rozwinął się w obszarze uczenia maszynowego. Kamil jest zdolnym chłopakiem, który na pewno by sobie sam poradził, ale bardzo się cieszę, że tak się złożyło, że miałem możliwość mu podpowiedzieć pewne rzeczy. Niekoniecznie chodzi tu o samo uczenie maszynowe, bo już wcześniej miał okazję przejść kilka kursów, a planował i kolejne. Po zakończeniu trochę rozmawialiśmy, wierzę, że zwróciłem uwagę na pewne istotne kwestie i zaczęło się dziać. Kamil sam sobie stworzył pozycję w firmie, w której pracował, gdzie nie było żadnych Data Scientistów i on stał się pierwszym. To ciekawe jak różne spotkania we właściwym czasie, z właściwymi ludźmi mogą wiele zmienić.
Kamil pracuje w tej chwili w Cosmose, firmie, która funkcjonuje głównie na rynku chińskim, ale też szerzej azjatyckim (Japonia, Malezja) i zajmuje się offline trafic. Czym to jest? Dla porównania online traffic to cały ruch użytkowników w sieci, czyli e-maile, smsy, powiadomienia push. Może być jednak tak, że jest strumień użytkowników, z którymi nigdy nie wchodziliśmy w żadną interakcję, ale chcielibyśmy, aby oni naszą reklamę zobaczyli np. ludzie w galeriach, którym chcielibyśmy wyświetlić naszą reklamę. W jaki sposób to działa? Chodząc po galerii handlowej odwiedzamy różne sklepy.
Wszędzie jest dostępne wi-fi i w zależności od tego, z którym routerem się łączymy, to można z pewnym przybliżeniem stwierdzić, gdzie jesteśmy i jakie odwiedziliśmy sklepy. Na podstawie tej informacji można budować różne profile cyfrowe.
Mówiąc o Cosmose, warto wspomnieć o ich strumieniu danych. W momencie naszej rozmowy firma dysponowała już ponad miliardem danych. Ten apetyt stale rośnie – na tyle, że w przyszłym roku ma ich być już ponad 2 miliardy. Zespół Kamila bardzo się rozrósł o niezwykłe talenty, które dołączyły opuszczając liderów rynku. Widać, że powstała już solidna infrastruktura.
Historia z Kamilem jest inspirująca pod wieloma względami. Z jednej strony jest aspekt mojego udziału w późniejszych losach Kamila, taka pomoc w odkryciu swojego potencjału. Czuję, że moją misją jest otwierać potencjał w ludziach i maksymalnie go rozpędzać, mimo tego że zajmuję się uczeniem maszynowym. Z drugiej strony pojawia się kwestia tego, że w obecnym świecie nie jest ważne, gdzie się aktualnie znajdujesz, ponieważ tak naprawdę możesz pracować z całym światem i to zależy tylko od Ciebie czy chcesz to robić, czy nie.
Kamil ma dla każdego słuchacza i czytelnika Biznesu Myśli prezent. Jeśli chcesz go dostać, to upewnij się, że jesteś zapisany/a do naszego newslettera.
Cześć Kamil. Przedstaw się: kim jesteś, czym się zajmujesz i gdzie mieszkasz?
Nazywam się Kamil Krzyk. Od 8 lat pracuję w branży IT. Pochodzę spod Krakowa, a 3 lata temu przeprowadziłem się do Warszawy w związku ze zmianą pracy. Aktualnie pracuję jako Machine Learning Engineer w firmie Cosmose. Jest to branża retailowa. Jednocześnie jako posiadacz jednoosobowej działalności gospodarczej współpracuję od 10 miesięcy z małą firmą ze Stanów, która zajmuje się tematami fitness.
Jaką ciekawą książkę ostatnio przeczytałeś? Może jesteś w stanie przytoczyć z niej jedno najważniejsze zdanie?
Pamiętam, jak ostatnim razem byłem gościem Biznesu Myśli i wiem, że zawsze zadajesz to pytanie. Wtedy wspomniałem, że nie czytam innych książek niż techniczne i tak się składa, że jeszcze mi się to utrzymuje. Także książka, którą będę chciał polecić, będzie techniczna, ale wiem, że wielu z Twoich czytelników chce się rozwijać, uczy się, podąża za Tobą właśnie dzięki kursom, więc wydaje mi się, że ta książka będzie świetnym tytułem do polecenia.
Chodzi o Hands-On Machine Learning with Scikit-Learn, Keras and TensorFlow, a autorem jest Aurélien Géron. Miała ona drugą edycję pod koniec roku 2019. Jest to dosyć pokażna pozycja – w sumie 800 stron, taka cegła. Na początku bałem się jej czytać nie wybiórczo, na początku traktowałem ją bardziej jako encyklopedię, ale da się ją czytać od początku do końca. Jest napisana mega prostym językiem i zawiera ogromną ilość informacji, której nigdy nie byłem w stanie nagromadzić na żadnych kursach czy z Internetu. Po prostu zbiór wszystkiego.
Dodatkowo ma też dużo kodu, ma idealnie tyle matematyki, ile potrzebujemy – w tym wypadku jest to minimum, żeby tak po prostu zrozumieć wszystkie opisane koncepty dość niskopoziomowo. Dlatego polecam tę książkę każdemu, kto chce się nauczyć machine learningu i poznać więcej algorytmów i praktyki. Ta książka jest naprawdę świetna do nauki i przez ostatnie lata nie widziałem chyba niczego lepszego, jeżeli chodzi o literaturę. Żałuję, że kiedy sam wchodziłem w machine learning, nie znalazłem takiej książki wcześniej. Jest naprawdę super tytułem, polecam.
Zgadzam się, to świetna lektura. Zresztą nawet na ostatnim kursie ta książka była jako prezent. Ona przeraża w kontekście liczby stron, ale jeżeli chodzi o zawartość i przyjemność czytania, to naprawdę warto.
Tak i nie trzeba jej też czytać w całości, prawda? Można wybiórczo, można się przygotować przed rozmową o pracę, można odświeżyć jakąś wiedzę przed prowadzeniem warsztatu. Jest naprawdę mega przydatna.
Nie będziemy dzisiaj tylko o książkach mówić, chociaż polecenie jest bardzo dobre. Przypomnijmy Twoją ścieżkę kariery: jak się poznaliśmy, pracowałeś jako Android Developer, później trochę się w Twoim życiu podziało, więc opowiedz, jak to się stało, że od programisty ruszyłeś w kierunku uczenia maszynowego.
Studiowałem mechatronikę czyli kierunek bez związku z programowaniem, ale jednym z moich przedmiotów były systemy wizyjne i miałem tam taki projekt, żeby nauczyć sieci neuronowe przewidywania prędkości dla robota na bazie jakości podłoża. Ten projekt pokazał mi, że programowanie jest bardzo interesujące. Musiałem nad tym więcej czasu spędzić. Od tego czasu samodzielnie zacząłem się rozwijać jako programista, początkowo czytając książki. Potem moi znajomi, gdzieś na 4 roku, wciągnęli mnie bardziej w tematy Androida i udało mi się dostać pierwszą pracę jako Junior Android Developer. Tu chciałbym zaznaczyć, że ten Android w moim życiu to nie było coś, co ja wybrałem, ja po prostu chciałem programować, nie bardzo się na tym wszystkim znałem i wziąłem to, co było dostępne. Pracowałem, bo taka była możliwość.
W tzw. międzyczasie miałem okazję trafić na kurs internetowy Machine Learning od Andrew Ng na Coursera. Stwierdziłem, że można spróbować czegoś nowego, tym bardziej że moją specjalizacją potem na studiach były systemy inteligentne, więc jakoś to się wiązało. Rozpocząłem ten kurs i byłem pod gigantycznym wrażeniem tego, że w ogóle taka forma edukacji istnieje. Zakochałem się ogólnie w kursach internetowych. Przedstawiane tematy pokrywały się z tym, co miałem na studiach, ale zaczynałem je wtedy dopiero rozumieć.
Nikt o machine learningu dookoła mnie za bardzo jeszcze w tych czasach nie rozmawiał – nikt z moich rówieśników, nikt w pracy. Nie czytałem za bardzo nic o tym w Internecie. To była dla mnie pewna nisza, złoty temat. Bardzo się tym zafascynowałem i to była taka chyba pierwsza rzecz, faktycznie w moim życiu zawodowo, która mnie zafascynowała i której postanowiłem się poświęcić, żeby się jej nauczyć. Początkowo to były faktycznie kursy internetowe. Kolejnym kursem to było Deep Learning Nanodegree na Udacity, ale to wszystko działo się gdzieś tam w Internecie, po angielsku i nie miałem w ogóle pojęcia, co się dzieje w Polsce.
Praktyczne Uczenie Maszynowe po polsku
Potem poznałem Ciebie i dzięki temu dowiedziałem się, że istnieje kurs „Praktyczne uczenie maszynowe dla programistów”, na który postanowiłem się zapisać. Tym bardziej, że ciekawiło mnie to, jak ten machine learning wygląda w Polsce. Pierwszy raz było coś po polsku, więc zapisałem się, chciałem spróbować. Ten kurs „Praktyczne uczenie maszynowe” zmotywował mnie do tego, żeby ustawić sobie jakiś deadline na to, do jakiego momentu chcę zmienić moją karierę zawodową.
Wcześniej się nie odważyłem, uczyłem się tego machine learningu bardzo dużo w domu, samodzielnie, ale nie miałem pomysłu na zmianę kariery i też nie miałem motywacji. Wtedy sobie uświadomiłem, że jeżeli nie zacznę działać ku temu, żeby coś zmienić, to nic się nie wydarzy samo.
Działałem bardzo aktywnie w tym okresie też poza wspomnianymi wcześniej aktywnościami. Prowadziłem grupę uczenia maszynowego, próbowałem pisać blog posty, występowałem publicznie, nawet zorganizowałem własne warsztaty. Też dzięki temu udało mi się w Azimo (w firmie, w której ówcześnie pracowałem, która zajmowała się przelewami międzynarodowymi) przekonać szefostwo, aby powierzyli mi jeden data science’owy projekt i też w taki sposób zostałem mianowany Data Scientist.
Zajmowałem się predykcją czasu, jak długo będą szły przelewy z potencjalnym wykrywaniem anomalii, kiedy coś może się opóźnić. Pomimo tego, firma jeszcze w tych czasach nie była zbyt chętna do tego typu rozwiązań, a ja też byłem niedoświadczony i bardzo chciałem ten machine learning robić. Jak się robi te wszystkie kursy i czyta o jakiś gunach, AlphaGo, to nie chce się robić KNN, k-means, jakichś prostych algorytmów. Gdy człowiek jest jeszcze świeży w temacie, to ma wrażenie, że może gdzieś istnieje ten świat cudowny, w którym wszystko będzie używane.
Pewnego dnia udałem się na Hackathon Kaggle Days, który odbywał się w Warszawie. Tam poznałem osobę, która zaproponowała mi pracę, zachęciła mnie do tego, żebym zaaplikował do firmy Cosmose, w której aktualnie pracuję. Ta firma faktycznie była już tak silnie nastawiona na to, żeby swoje produkty opierać na rozwiązaniach machine learningowych, AI. To było dla mnie bardzo atrakcyjne i udało się. Zmieniłem pracę i jestem w tym miejscu do dzisiaj.
Rzeczywistość też zweryfikowała jak świat uczenia maszynowego wygląda i czy to faktycznie jest zawsze rocket science. Ogólnie uważam, że jest to bardzo ciekawy zawód i nie żałuję, także jestem zadowolony z tego, gdzie jestem.
Machine Learning Engineer vs. Programista
Jak to wygląda, jeżeli chodzi o zmianę perspektywy? Byłeś po obu stronach, z jednej jako programista, z drugiej teraz jesteś po tej stronie Data Science czyli praca z projektami tzw. R&D, gdzie mamy większe ryzyko, większe obawy i coraz częściej się zdarza sytuacja, że coś nie działa. Na ile Twoje myślenie się zmieniło, jak sobie z radziłeś z tą zmianą? Który świat Ci bardziej odpowiada?
Tak, różnice są dramatyczne, jeżeli chodzi o samo programowanie i software engineering, w którym też wykorzystujemy uczenie maszynowe. Jest dużo więcej niewiadomych. W samym programowaniu gdy pracowałem w Scrumie czy jako Android Developer, po prostu wpadały jakieś zadania, kończył się sprint, coś się udało zrobić, czegoś się nie udało zrobić. Jedynym zagrożeniem w tym wszystkim było to, żeby nie przeszacować albo niedoszacować jakiegoś zadania. Wtedy sprint się opóźniał i to było nasze jedyne zmartwienie.
Wyzwania
W uczeniu maszynowym te zadania miały dużo więcej niewiadomych. Ciężko było powiedzieć, ile czasu nam dane zadanie zajmie. Czy ten model będzie działał, czy nie, czy dane są poprawne – masa rzeczy może wpłynąć na to, czy osiągniemy poziom wyniku, który satysfakcjonuje naszego klienta. Ta praca na pewno była dużo cięższa niż w Scrumie pod tym względem i też troszkę bardziej stresująca. Tutaj mogę przytoczyć słowa Cassie Kozyrkov, która powiedziała, że:
„Data Science, Machine Learning nie jest dla perfekcjonistów”.
Ja z natury jestem troszkę perfekcjonistą i mocno czuję na co dzień, że chciałbym, żeby wszystko działało idealnie i żeby wszystko dało się oszacować, a kiedy to się nie dzieje, to wzbudza to we mnie pewien stres. Także trzeba się z tym liczyć, że będzie dużo większy chaos.
Druga sprawa to to, że w tym uczeniu maszynowym nie jest też tak, że tylko tworzymy modele i analizujemy dane, bo jest to też dużo więcej dookoła machine learningowych zadań. Pozycja machine learning engineer, data scientist dzisiaj ma wiele definicji i każda firma potrzebuje zupełnie innych umiejętności. W dużej firmie pewnie będzie łatwiej dobrać osobę do zadania, ale małe firmy same czasami nie wiedzą jeszcze, jakie rzeczy trzeba wykonać, a produkt musi się rozwijać.
Musimy ogarnąć dane i czasami napisać jakąś ITIL, żeby te dane przetworzyć, musimy zbudować model, przejść przez całe stadium R&D i w ogóle powiedzieć, czy to działa, czy nie. To trochę łączy świat programowania ze światem matematyki, statystyki, analizy danych. Jest to miks ogólnie wielu technologii. To też jest fajne, bo jest bardziej rozwijające. Jednocześnie ciężko jest tak naprawdę o dobre zdefiniowanie juniora, bo jeżeli mamy wiele technologii, to ciężko jest, żeby ten junior rozumiał wszystko. Na pewno próg wejścia może być troszkę wyższy.
Kolejnym aspektem jest to, że trzeba mieć większą świadomość, wielką wiedzę na temat tego, w jaki sposób funkcjonuje i działa biznes. Nie polecam ogólnie takiego podejścia, ale da się pracować na Scrumie na takiej zasadzie, że wpada nam zadanie i po prostu je wykonujemy, klikamy in testing, in review, done, koniec, idziemy dalej. W przypadku machine learningu tworzone rozwiązania powinny w jakiś sposób wpływać na biznes.
Nasze predykcje bezpośrednio będą oddziaływać na działanie naszego produktu, na to jaki będzie user experience. Trzeba rozumieć, jakie konsekwencje nasza praca za sobą niesie w tej kwestii. Co więcej dużo więcej będzie rozmowy z zespołami biznesowymi. Trzeba będzie pewnie nauczyć się w sensowny sposób przedstawiać swoje pomysły. To znaczy taki, który przekona ludzi do naszych pomysłów. Ogromne znaczenie ma tutaj taka umiejętność prezentacji.
Mam taki przykład, który lubię przytaczać – zaznaczam, że jest nieco brutalny. Ogólnie praca data scientista, machine learning engineera może być momentami dość niewdzięczna. Jeżeli idziemy do firmy, która jeszcze nie do końca wie, na czym machine learning polega, możemy dostać zadanie konkretnego zbudowania modelu, bo firma potrzebuje rozwiązać jakiś problem. Przychodzimy, bierzemy dane, analizujemy je i to oczywiście będzie trwało pewien okres czasu czyli już pojawia się jakaś inwestycja pieniędzy w nas.
Może w ogóle zmieniliśmy pracę po to, żeby przyjść do tej firmy i tam pracować. Zbudowaliśmy jakiś prototyp, on wstępnie działa i ciągniemy ten projekt dalej. Analizujemy wszystko dokładnie i w pewnym momencie dochodzimy do sufitu – np. technologia, z którą pracujemy, ma jakiś limit dotyczący dokładności albo dane klienta są niewystarczająco dobre, żeby zbudować taki model, jakiego on sobie życzy, albo jego oczekiwania są za wysokie. Nie jesteśmy w stanie zoptymalizować KPI biznesowych, a włożyliśmy bardzo dużo czasu, pracy w to, żeby zbudować ten model i to rozwiązanie. Teraz musimy pójść do pracodawcy i powiedzieć mu, że to nie wyjdzie.
W teorii wykonaliśmy naszą pracę poprawnie, bo zbudowaliśmy model najlepszy, jaki się dało, analizowaliśmy te dane i wnioskiem było, że się nie da, a zostaliśmy zatrudnieni, żeby coś zrobić. W programowaniu zwykle nie ma rzeczy niemożliwych i stosunkowo prosto jest oszacować, na ile pewne rzeczy są możliwe.
W tym wypadku mogą być sytuacje, że coś jednak nie zadziała albo nawet jeżeli zadziała, to nie wystarczająco dobrze. Jeżeli nie ma odpowiedniej świadomości w firmie, to w tym momencie pracodawca może negatywnie odebrać odpowiedź, że się nie da, gdzie tak naprawdę w teorii za poprawnie wykonanie pracy należałaby się pochwała. Może to być momentami niewdzięczne. To jest taka chyba główna różnica, którą widzę.
Machine Learning w praktyce – przykład z Chin
Porozmawiajmy teraz o Cosmose, firmie, w której obecnie pracujesz. Wiem, że wielu ciekawych rzeczy nie możemy powiedzieć, ale opowiedz kilka słów o tym, czym się zajmuje, jakie problemy próbuje rozwiązać.
Zacznijmy od w ogóle branży, w której Cosmose działa. Jest to retail, czyli jak sama nazwa wskazuje, będzie to targetowanie reklam. My dostarczamy dane, które nazywamy traffic online. Czym by były dane online? Firmy posiadające sklepy w centrach handlowych np. Fendi, Zara, chcą dostać się do potencjalnych klientów. Zachęcają do zapisania się przykładowo do newslettera, założenia karty członkowskiej, podania swojego numeru telefonu i w ten sposób pozyskują dane klientów poprzez pozyskiwanie tych informacji online. To, co robi Cosmose, to próbuje dostarczyć takim firmom informacje na temat ludzi, którzy nawet nigdy nie weszli w żaden sposób w interakcję z daną marką. To jest to, co się nazywa traffic offline.
W jaki sposób to się dzieje? W dzisiejszych czasach każdy posiada smartfona. Na tym smartfonie ma zainstalowaną masę aplikacji. Nawet jeśli sam nic nie instalował, to od razu po kupieniu telefonu już coś jest tam wgrane. Jak kupimy Samsunga, to można sobie samemu sprawdzić, że jest tam Samsung Location Services i nie da się tego ubić. Tym sposobem informacje z naszych telefonów komórkowych są zbierane przez wiele aplikacji. To chyba też nie jest jakaś tajemnica, że Facebook przykładowo zbiera nasze dane, ale robi to też dużo więcej aplikacji. Te dane potem lądują u różnych data vendorów i można je normalnie kupować.
Cosmose pozyskuje właśnie tego typu dane, oczywiście zanonimizowane. To nie są dane personalne, po prostu logi z telefonów, przykładowo jakie sieci wi-fi widzieliśmy albo jaki GPS gdzieś się tam wyświetlał czy jak działał żyroskop. Chodzi o te popularne dane w Androidzie ogólnie dostępne, która można wyczytać na stronie internetowej, że się zapisują. Cosmose na swojej stronie internetowej ma napisane, że ma pozyskane dane z ponad 500 tys. sklepów. Mamy wiele metod służących do tego, żeby dowiedzieć się, jak wygląda stan sygnału chociażby wi-fi w takich sklepach. Potem skupując dane od różnych data vendorów, dokonujemy matchingu tych danych przy użyciu uczenia maszynowego po to, aby móc przypisać labelkę, zlokalizować każdy taki odczyt z telefonu w jednym z tych sklepów z galerii. Tak w sumie pokrótce działa Cosmose AI – lokalizujemy ludzi w sklepach.
Jak to może być wykorzystane? Jeżeli wiemy, że ktoś odwiedził jakieś miejsce, to możemy tworzyć profil takiego użytkownika. Przykładowo jest osoba odwiedzająca sklepy marki luksusowej. Dla takiej marki luksusowej emitującej kampanię reklamową pozyskującą nowych klientów, taka informacja może być atrakcyjna. Być może jednak interesuje tę markę dotarcie do innej grupy odbiorców. My jesteśmy w stanie takie dane dostarczyć.
Jak to się dzieje, że reklamy faktycznie docierają do tych ludzi? Są różne serwisy zewnętrzne, chociażby Facebook, które także posiadają bardzo dużo informacji na temat różnych ludzi. Jeżeli my wyślemy im skrawek danych, to oni są w stanie dopasować ten skrawek danych do swoich danych i z uwagi na większą wiedzę o użytkownikach dotrzeć do tych ludzi i np. wyświetlić im reklamę na Facebooku, tak samo w przeglądarkach itd. Na tej zasadzie nasi klienci są w stanie docierać do ludzi, którzy nigdy z nimi nie weszli w interakcję. Po prostu odwiedzają jakieś sklepy i ich dane lądują w ogólnodostępnej bazie danych.
Taki fajny przykład – bierzemy sobie Galerię Krakowską (czy jakąkolwiek inną galerię). Każdy sklep ma konkretną lokalizację. Wchodząc do sklepu człowiek jest “łapany” a dane o jego obecności w konkretnych miejscach są odnotowywane. Wy chcecie prognozować, które sklepy dana osoba odwiedziła.
Dokładnie tak. Czy przeszła obok, to wtedy może być jakiś outside potential czyli osoba, która widziała sklep, ale przeszła obok drzwi. Albo osoba, która weszła do sklepu lub zrobiła jeszcze jakąś inną akcję.
A jak sobie radzicie z piętrami?
Dzięki temu, że korzystamy z różnych danych, akurat wi-fi do tego się nadaje, to na piętrach te modele świetnie działają. To jest coś, z czego akurat nasi klienci się bardzo cieszą, że z piętrami te modele dają radę.
Wiem, że niewiele możesz mówić, ale spróbuję podrążyć kolejny temat. Zbadaliście pół miliona sklepów, na blogu było też napisane, że ponad miliard smartfonów. Ta liczba robi wrażenie. Przy takiej ilości smartfonów ile tam jest rekordów, historii itd.? Jak sobie z tym radzicie na poziomie infrastruktury, na ile to jest w ogóle duże wyzwanie? Czy w tej chwili wszystko jest możliwe? Po prostu wciskasz jeden guzik i już to działa, czy jednak trzeba troszkę się namęczyć?
Tak, muszę przyznać się, że praca z taką ilością danych jest dużym wyzwaniem. Dodatkowo chcę zwrócić uwagę, że Cosmose początkowo działał głównie w Chinach, a tam mamy Wielki Chiński Mur i Chiny chcą klon całego stacka technologicznego w środku, więc musimy mieć serwery zarówno na Chiny jak i regiony zewnętrzne. W Cosmose w pewnym momencie osiągnęliśmy stadium, w którym ciężko było dalej pracować nad rozwojem modeli uczenia maszynowego, bo pierw trzeba było rozprawić się z infrastrukturą. Danych było bardzo dużo, ich ilość rosła i rośnie nadal, dlatego musieliśmy ściągnąć wielu inżynierów, którzy pracowali nad tym wszystkim.
A co trzeba zrobić, żeby te dane okiełznać? Przede wszystkim narzędzia i rozwiązania, które tworzymy do obsługi tych danych, muszą być jak najbardziej wygodne. Nie możemy się z tym wszystkim mordować, nie ma uniwersalnego klucza mówiącego, jak to powinno wyglądać, bo to zależy od typu danych. Chcemy mieć możliwość przeglądania tak dużej ilości danych (a wiadomo im więcej, tym ciężej) po to, żeby móc te dane w jakiś sposób czyścić, żeby móc zrozumieć, co jest w środku, wyliczać statystyki.
Pojawia się masa mikroserwisów ITIL, które przetwarzają te dane i wypluwają w innych postaciach, bo w zależności od tego ile mamy usług i jakie potrzeby są, nie chcemy za każdym razem przetwarzać danych od zera, tylko chcemy mieć punkty, od których możemy startować, żeby przyspieszyć cały proces.
Warto na pewno się zastanowić nad granulacją danych. Jeżeli przykładowo to są logi z aplikacji z telefonu komórkowego, to one mogą przychodzić w dużej częstotliwości i dane jednego usera mogą być rozbite na paręnaście plików. W zależności od tego, jakie potrzeby ma nasza firma, musimy się zastanowić, jakie ustrukturyzowanie danych jest dla nas najważniejsze, czyli jaka granulacja, czy chcemy je mieć podzielone po dacie i żeby każdy shard zawierał wszystkie rekordy danego użytkownika, żeby nie trzeba było potem tego agregować, ściągać z wielu plików, wielu folderów itd.
Takie zapisywanie wniosków pośrednich. Możemy mieć informacje zapisane w bazach danych po to, żeby nie każdy musiał przetwarzać te dane od zera, tylko zaczynał od wybranego punktu.
Warto korzystać z takich narzędzi jak np. Spark, rage, czyli coś co jedno zadanie rozbije na wiele maszyn i potem złoży nam wynik w całość. Bez tego takie obliczenia trwają bardzo długo, ale też można sobie jakoś z tym radzić przykładowo poprzez aproksymację. Można ściągnąć jakiś fragment danych np. 5% i drugie 5% danych, sprawdzić, czy te dwa podzbiory są do siebie podobne i wyciągnąć z nich wnioski, ekstrapolować.
Trzeba utrzymywać porządek w tym wszystkim, czyli mieć określony jeden format nazewnictwa, żeby dana kolumna miała ten sam typ danych, tę samą nazwę w różnych częściach całego systemu. Polecam też korzystanie z binarnego formatu danych, a nie tekstowego, czyli zastąpić csv pakietami danych, bo są bardzo szybkie w odczycie, zapisie. Przechowują typy danych, kolumn, dzięki temu coś, co wystarczy, że jest określone int=8, nie musi być zawsze wczytywane jako int=64. Taki plik mniej zajmuje, a co za tym idzie, są to też mniejsze koszty. To minimalna optymalizacja. Te dane potem dodają się do siebie i to wszystko wpływa na ogólną jakość pracy. Do tego oczywiście duża ilość monitoringu, Grafana – to już tradycyjne rzeczy.
Warto zwrócić uwagę na rolę data engineeringu. To mocno wybrzmiało w Twojej wypowiedzi – cała infrastruktura danymi jest ogromnie ważna. To jest samo w sobie wyzwaniem, żeby stworzyć dobrą infrastrukturę, bo nie zawsze wiadomo, co tak naprawdę jest potrzebne. Często są stawiane hipotezy, w szczególności w startupach, które dopiero się rozwijają i różnie to może być. Dzisiaj biznes jest taki, jutro może być zupełnie inny. Wyzwań tu jest dość dużo, ale faktycznie ustabilizowanie infrastruktury umożliwia szybszy wzrost. Mówiliśmy o miliardach smartfonów i ambicjach na 2 miliardy smartfonów oraz ponad 10 mln sklepów (rok 2022). Mamy połowę 2021 roku, więc już nie tak dużo czasu zostało. Widać, że apetyt jest duży, więc ta infrastruktura musi być też skalowalna.
To prawda. Mierzymy wysoko i to jest prawda, że jak zaczynałem pracę w Cosmose, to były obawy dotyczące tego, jak my to wszystko wyskalujemy. Potrzeba było ludzi z dużym doświadczeniem, żeby to wszystko ugryźć całkowicie inaczej.
Cosmose mi się kojarzy przede wszystkim z Chinami, bo tam zaczynaliście. Teraz poszerzyliście obszar działalności, do czego jeszcze wrócimy. Ale zacznijmy od Chin. W Polsce, w Europie mało się wie o Chinach i to nie jest przypadek, bo Chiny działają w taki sposób, jeżeli chodzi o infrastrukturę, że chętnie przejmują wszystkie dane, ale żadnych nie wypuszczają na zewnątrz. Masz może jakieś ciekawostki dotyczące współpracy w Chinach. Co Cię najbardziej zaskakuje? Jak to jest zorganizowane?
Pierwszą rzeczą jest to, że Chiny chcą wszystkie dane mieć u siebie. Jeżeli chcemy robić jakiś biznes w Chinach, to nasze serwery czy Google Cloudowe czy AWS’owe muszą leżeć w Chinach i dane faktycznie muszą być w Chinach. Ponadto niektórzy data vendorzy nie dają czasami bezpośredniego dostępu do danych w ten sposób, że po prostu wysyłają plik, który leci zza Wielkiego Muru, ale logujesz się na jakiś remote komputer i wykonujesz pracę na komputerze, który fizycznie jest w Chinach. Takie rzeczy też mogą być uciążliwe.
Ciekawy jestem skali. Te miliardy smartfonów to są w większości z Chin czy przez to, że są zanonimizowane, to tego nie wiecie?
To nie są tylko smartfony z Chin, bo Cosmose nie działa tylko w Chinach, ale też aktywnie teraz działamy w Japonii i Malezji, co można przeczytać na naszych blogach. Dane telefonów to są często turyści, którzy wjeżdżają, przejeżdżają przez dany teren, więc to nie są tylko dane chińskie.
Nie chodziło mi o to, że to są Chińczycy, tylko bardziej skala ludzi. Ciężko w Europie znaleźć informacje o miliardach smartfonów w samej Europie, bo tutaj maksymalnie się mierzy w milionach. Mniej ludzi tu mieszka, a w krajach azjatyckich jest większa populacja i z definicji wszystko jest o zauważalnie większe.
Zaczęliście w Chinach, ale już pojawiły się kolejne rynki. Jak wyglądał proces wchodzenia do nowych krajów i co jest w planach?
Nasza technologia początkowo miała zastosowanie tylko w Chinach, ale im więksi się stawaliśmy, im więcej dużych firm zaczęło chcieć z nami rozmawiać, tym łatwiej było też zwrócić uwagę innych graczy zagranicznych. Żeby do tego doszło, musieliśmy udowodnić, że nasza technologia działa. Odbywały się międzynarodowe dema dla innych, potencjalnych partnerów, klientów za granicą i to się wszystko nadal dzieje. Więcej nie mogę zdradzić. Na chwilę obecną Japonia i Malezja to są miejsca, w których świadczymy także usługi.
Specjalista uczenia maszynowego musi posiadać przede wszystkim umiejętności techniczne, żeby umieć rozwiązywać problemy, zakodować, ale na koniec dnia też powinien umieć sprzedać ten model. Sprzedać w sensie umieć obronić swoje pomysły, odpowiednio je zaprezentować, ewentualnie skonfrontować, pokazać najmocniejsze strony itd. Tutaj jest wiele różnych trudności, wyzwań.
Brałeś udział już w różnych spotkaniach. Jak najlepiej się przygotowywać do takich spotkań albo jak nastawić swoje myślenie, aby odnosić większe sukcesy przy uczeniu maszynowym?
Umiejętność prezentacji własnej pracy jest bardzo ważna. Nie tylko też przed inwestorami, ale także na co dzień w pracy, kiedy komunikujemy wyniki naszej pracy albo mamy jakiś pomysł i chcemy, żeby on się przebił.
Trzeba sobie wpierw zadać pytanie: jakiego rozwiązania chce klient? Jaki jest problem i co chce rozwiązać? Wychodzić z tej perspektywy właśnie, żeby nie po prostu pokazać mu: mamy model i on działa tak i tak, tutaj są wykresy i liczba jego dokładności jest taka, bo to jest coś negatywnego, tylko chcielibyśmy mówić to, co ta osoba chce usłyszeć. Konkretnie co my przy pomocy danego modelu jesteśmy w stanie zrobić, jaki jego problem jesteśmy w stanie rozwiązać. Musimy koniecznie zmuszać go, żeby sobie wyobrażał, co przy pomocy tego modelu będzie mógł osiągnąć. Możemy mu to po prostu wprost przedstawić na tacy i to jest chyba bardzo efektywna rada moim zdaniem.
Druga rzecz to, żeby pokazując model, nie mówić za bardzo, na ile on jest dokładny, pokazywać wykresy, a bardziej zrobić to w sposób interaktywny, może trochę zabawowo. To też dobrze działa na co dzień w pracy w firmie, kiedy zamiast powiedzieć: zbudowałem model i on ma takie i takie takie właściwości, to np. zakodujemy do tego jakiś prosty front-end, który pozwala osobie wejść w interakcję i samemu sprawdzić, jak ten model się zachowuje i czy wrażenia z pracy z nim są dobre czy nie.
Polecałbym, żeby mieć interaktywne demo, które klient może sam dotknąć. Żeby nie był za ścianą prezentacji, tylko mógł też mieć wpływ na to, co chcemy mu pokazać, żeby mógł powiedzieć: „zróbcie teraz to” i zobaczyć, jak ten model się zachowuje.
W naszym przypadku to dobrze zadziałało. Podczas jednego spotkania klient zapytał, czy jesteśmy w stanie zbudować na miejscu, podczas dema nowy model z danych z jakiegoś miejsca. My po prostu zebraliśmy dane na żywo, on poszedł sobie do Starbucksa na kawę, my za paręnaście minut zbudowaliśmy model i on wrócił do zupełnie nowego sklepu i był w stanie zobaczyć logi na telefonie komórkowym, jak ten model się zachowuje, co trackuje i że to działa dokładnie tak, jak to, co mu pokazywaliśmy na demo.
To buduje duże zaufanie. Interaktywność tego demo, forma może zabawowa… niech klient nie będzie tylko osobą słuchającą, lecz biorącą aktywny udział w demo. Druga rzecz to zrozumienie potrzeb i powiedzenie ich na głos.
Interaktywność jest faktycznie bardzo pomocna w wielu obszarach. Powiedziałeś o zrozumieniu potrzeb klienta i przypomniała mi się historia, jak kiedyś pracowałem w korporacji, to było zrozumiałe, że trzeba zrozumieć, co chce klient, jego potrzeby. W sumie każdy to rozumie, ale de facto jak sobie analizowałem, co się działo później, to każdy i tak robił swoje. Trzeba faktycznie zrozumieć, co boli danego klienta, bo dopiero wtedy on będzie chciał słuchać. Wtedy przykujemy realnie jego uwagę.
Co powinno się stać, że uznajemy, że zrozumieliśmy problem klienta? W jaki sposób rozpoznawać, że to zrozumieliśmy? To pytanie zwykle pobudza wyobraźnię. Czy możemy wprowadzić jakieś kryteria, żeby zmierzyć czy rzeczywiście już to zrozumieliśmy?
Wracając do Japonii, jest tu ciekawa historia. Opowiedz, co się za nią kryje.
W moim wypadku to zadziałało tak, że interesuję się Japonią holistycznie. Uczę się też języka japońskiego i kiedy poszedłem na studia, na pierwszym roku przeczytałem na stronie głównej Akademii Górniczo-Hutniczej, że jest organizowany coroczny wyjazd, taka aplikacja na program Vulcanus in Japan.
To jest program kooperacji Unii Europejskiej i Japonii, który wysyła co roku od 20 do 50 inżynierów po to, żeby nauczyli się pracować po japońsku. W ramach takiego programu mamy 4 miesiące szkoły językowej codziennie po około 6 godzin, a potem 8 miesięcy praktyk w jednej z firm, która zdecydowała się wziąć udział w programie i wystawić jakiś projekt. Ja dopiero od 3 roku studiów miałem możliwość starać o to. Za trzecim razem mi się udało. Na 5 roku pojechałem. Dostałem pozycję w firmie NTT i to był cały dział, cały budynek, który zajmował się machine learningiem, którym dzisiaj się zajmuję, ale wtedy mnie to aż tak nie interesowało.
Zajmowałem się tam inteligentnym pokojem, który miał analizować emocje rozmówców. Ja dodawałem do tego obsługę dźwięku. Programowałem wtedy w języku C, a był taki problem, że stało paręnaście mikrofonów obok siebie i miałem na zadanie wdrożyć algorytm, który rozpoznaje, która osoba w danej chwili mówi, z którego mikrofonu (dźwięk się rozchodzi po wszystkich mikrofonach), która osoba jest tą główną mówiącą.
Spędziłem tam cały rok i to jest prawdopodobnie jeden z najciekawszych okresów mojego życia. Jak wspominałeś, potem tak się złożyło, że Cosmose zaczął też współpracować z jedną z firm z Japonii i trzeba było pokazać, udowodnić, że nasze rozwiązania działają. Miałem okazję pojechać i użyć w praktyce tego wszystkiego, czego się nauczyłem 6 lat wcześniej.
Dlatego warto rozwijać swoje zainteresowania, bo nigdy nie wiemy, kiedy i jak może nam się to przydać.
Machine Learning – od czego zaczać?
Masz może wskazówki dla osób początkujących? Odsyłam oczywiście do prezentacji, którą prowadziłeś na DataWorkshop, gdzie dzieliłeś się doświadczeniami z rekrutacji od strony osoby rekrutującej. Na co powinna zwrócić uwagę osoba początkująca, aby zacząć w praktyce działać w tym obszarze?
Po tej prezentacji parę osób się jeszcze do mnie prywatnie zgłosiło i faktycznie dostały pracę, więc jestem zadowolony, że mogłem komuś pomóc. Jeżeli chodzi o wejście do machine learningu, to tutaj z mojej perspektywy wszystko się cały czas zmienia. W zależności od firmy będziemy potrzebować zupełnie innego skill setu. Coraz częściej np. popularna jest pozycja ML Opsa, gdzie szuka się osób hybrydowych, które umieją trochę programować, trochę robić machine learning. To, do jakiej firmy będzie dana osoba aplikować, może wpłynąć na to, jakich umiejętności będzie ta firma wymagać.
Z ogólnych rzeczy trzeba mieć pewne fundamenty ze statystyki i matematyki. Takie dość podstawowe tematy, bo jak uczyć się tych wszystkich algorytmów albo analizować dane, jeżeli nie znamy skrajnie podstawowych pojęć. Na pewno chcemy mieć możliwość używania jednego języka programowania czy to R, czy Python, skryptowego.
Coś do pracy z danymi czyli SQL. Jeżeli chodzi o umiejętność Clouda czyli korzystanie z AWS, to jest bardzo mile widziane, bo większość danych jest przechowywanych gdzieś na Google Drive, na S3. Jeżeli chodzi o sam machine learning, to ja jak zaczynałem, bardzo byłem skupiony na tym, żeby doskonale wiedzieć, jak algorytmy działają, ale to w tym wszystkim jednak nie jest chyba najważniejsze, bo jeżeli ma się głowę na karku, to algorytmów można się w dowolnej chwili douczyć, a pracodawca nieważne na jaką pozycję, zawsze będzie szukał osób, które umieją łączyć kropki, kombinować i myśleć, więc takie soft skille są też ważne.
W uczeniu maszynowym ważniejsze niż znajomość wszystkich algorytmów jest zrozumienie jak one działają, bo często się zdarza tak, że musimy wyedytować algorytm, coś zmienić, inną funkcję dystansu mu wrzucić. Warto wiedzieć, jak takie ogólne koncepty działają, jak algorytmy się uczą, spadek gradientu albo czym jest boosting, może podstawy sieci neuronowych – tego typu rzeczy.
Po co to wszystko robimy? Po co jest machine learning? To jest chyba najważniejsze, bo łatwo jest wrzucić dane w model i potem nic z tym więcej nie zrobić albo jeszcze gorzej – dać sprzeczną informację, że czegoś się nie da zrobić, a tak naprawdę mieliśmy do tego złe podejście albo zrobić coś bez wiedzy. Czyli umieć określić, jak metryki mierzące efektywność modelu spinają się z biznesem?
Czy to, że model ma AUC 0,9, to czy faktycznie jest to spięte z tym, że firma będzie miała z tego zysk, czy może jest odwrotnie? Mój model ma 0,9, a my nie mamy jak tego użyć. Tego typu połączenia są niesamowicie istotne do zrozumienia.
Ja jak zaczynałem, to wpadłem w bardzo dużą pułapkę. Taką, że chciałem niesamowicie ten machine learning robić. Chciałem go robić za wszelką cenę. Wyobrażałem sobie, że machine learning engineer to jest taka osoba, która po prostu rozwiązuje rzeczy uczeniem maszynowym i tyle. Dzisiaj, po tych 3 latach, mam zupełnie odwrotną definicję – machine learning engineer to jest ta osoba, która ma dostarczyć wartość firmie, a wartością czasami jest usunięcie całego uczenia maszynowego. Jeżeli jesteśmy w stanie coś rozwiązać bez machine learningu, to czemu tego nie zrobić zamiast komplikować nasze systemy?
To są złote słowa, bo właśnie o to chodzi, że w dojrzałym podejściu rozumiesz, że czym prościej coś zrobisz, to tym lepiej będzie i wszyscy na tym zyskają.
Przyszłość Machine Learning
Popatrzmy teraz nieco w przyszłość. Jak myślisz, jakie kamienie milowe przekroczymy za 5, 10 lat w uczeniu maszynowym i co wtedy już osiągniemy?
Ciężko mi powiedzieć, gdzie machine learning dotrze za parę lat. Kiedy ja zaczynałem się uczyć uczenia maszynowego, to dużo osób przychodziło i mówiło, że w roku 2039 będziemy mieli General AI, ale jak zacząłem się tego wszystkiego uczyć, to dzisiaj widzę, że te wszystkie algorytmy mają jeszcze dużo wad, niedoskonałości.
Tempo, w jakim to wszystko posuwa się do przodu, wcale nie zachęca do myślenia, że będzie jakiś gigantyczny boom. Nie zmienia to faktu, że wiele rzeczy może się w przyszłości zmienić. Łatwiej mi przewidzieć to, jak branża będzie się zmieniała. Na chwilę obecną bardzo brakuje pozycji ML Opsa, która się niedawno wytworzyła czyli osób, które łączą software engineering z machine learningiem, czyli żeby ten machine learning nie zostawał tylko po stronie R&D. Uważam, że coraz więcej takich zawodów będzie w przyszłości.
Jeżeli chodzi o ciekawostki, wzmianki, to tutaj mam takie spostrzeżenie, że ostatnio mieliśmy boom na tzw. wirtualnych youtuberów. Powstały tzw. Face Rig czyli awatary 3D, które są mapowane na ludzi i bardzo dużo osób teraz streamuje, nie pokazując siebie, tylko pokazując swój awatar.
Wiadomo, że takie systemy wizyjne są bardzo często oparte na deep learningu i tu jeszcze jest dużo miejsca na poprawę, a to się bardzo wszystko dobrze rozwija. Widzę to tak, że np. za parę lat ludzie będą w stanie wybrać swój wizerunek w Internecie oraz swój głos i tak naprawdę sami będą mogli zdecydować o tym, jak inni ich postrzegają. To może jest przyszłościowa, rewolucyjna zmiana, ale nie jest to game changer w naszym świecie.
Z innych rzeczy to przykładowo mamy pair programming. Ostatnio chyba GitHub wypuścił program, który rozumie nazwę funkcji, metodę i próbuje nam zaproponować kod. Coraz więcej może się pojawiać takich rozwiązań, gdzie człowiek będzie miał okazję wejść w interakcję, współpracować z uczeniem maszynowym i usprawniać swoją pracę.
Z bardziej niepokojących rzeczy myślę, że na pewno będzie postępował problem fejków, cyberataków, ogólnie bezpieczeństwa. Chyba Rosja zaimplementowała już jakiś AI do rakiet. Kiedyś był taki film o dronach, które były używane do zabijania polityków, oczywiście to była fikcja, ale takie scenariusze mogą coraz bardziej być realne, bo kraje będą też musiały odpowiadać na to, że jeżeli ktoś będzie wdrażał uczenie maszynowe w wojsku, to też tutaj na pewno coś się będzie działo.
Koniecznie pojawi się także coraz więcej regulacji dotyczących uczenia maszynowego. Ludzie coraz bardziej są świadomi, że takie algorytmy istnieją i że mają mniej możliwości decydowania o samym sobie, że są może troszkę inwigilowani, że to, co robią na co dzień, jest analizowane. Nawet ostatnio kolega powiedział, że się nie wyspał, chwilę potem dostał reklamę materaców zdrowotnych do spania.
Myślę, że coraz więcej będziemy natrafiać na niezadowolenie społeczne, które będzie prowadzić do wprowadzania reform, zasad chroniących nas przed tym wszystkim, jakieś data privacy. To taki mój skromny pogląd.
Widziałem też, że zamiast zwykłych awatarów będziemy też mieć teraz głos, a być może jakieś postacie 3D. Ciekawy świat.
Syntezatory głosu, które świetnie udają osobę, już są tak naprawdę. Zresztą mieliśmy nieraz jakieś papiery naukowe, publikacje, które dobrze oddawały głos rozmówcy. Rozpowszechnienie tego jest jak najbardziej realne w przyszłości.
Dzięki, Kamil, za dzisiejszą rozmowę. Życzę Ci dalszych sukcesów na polu uczenia maszynowego, rozwijaj się. Myślę, że jeszcze wiele osiągniesz w tym obszarze. Dzięki. Do zobaczenia.
Dzięki wielkie i do usłyszenia.