Czy uczenie maszynowe daje programistom nowe możliwości?
Jeśli zajmujesz się programowaniem, to pewnie przynajmniej raz przemknęła Ci przez głowę myśl na temat uczenia maszynowego i tego, jakie nowe możliwości otwierają się przed programistami dzięki ML.
Poprzednie zdanie wymaga korekty, bowiem nie tylko uczenie maszynowe daje programistom nowe możliwości, należałoby tę grupę zdecydowanie rozszerzyć, ale z racji tego, że #90 odcinek jest odcinkiem „odwróconym”, to porozmawiamy dziś także o nieco innym myśleniu o rozwiązywaniu problemów w zderzeniu z klasycznym programistycznym podejściem.
Wspomniane odwrócenie polega na tym, że dziś postawiony pod tablicą został Vladimir i wyjątkowo nie pyta, a odpowiada na pytania, które zadaje mu Jędrzej Paulus podczas rozmowy w ramach podcastu Developer Wannabe Podcast. Pomyśleliśmy, że warto podzielić się tym tematem także z Tobą w ramach naszego podcastu, ponieważ temat dotyka zagadnień omawianych z innej perspektywy niż zwykle. Pojawia się także niespodzianka – pytanie od słuchacza. Warto sprawdzić, jak z odpowiedzią poradził sobie Vladimir 😉
Zanim zaczniemy, garść ogłoszeń 🙂
✅ Dziś startuje kurs „Python dla ML” od DataWorkshop, gdzie poznajesz podstawy tego języka pod kątem analizy danych i projektów Machine Learning & Data Science. Można jeszcze dołączyć. Czytaj więcej…
✅ 28 września startuje kurs NLP, który dotyczy przetwarzania języka naturalnego. To jeden z gorętszych i bardziej potrzebnych tematów obecnie w branży. Dzieje się tak poprzez szereg praktycznych zastosowań, które potrafią bardzo usprawnić funkcjonowanie biznesu. Czytaj więcej…
✅ 5 października rozpoczyna się już 7 edycja kurs „Praktyczne uczenie maszynowe„, który trwa 8 tygodni i jest must have dla Ciebie lub Twoich pracowników, jeśli myślisz na poważnie o wdrażaniu uczenia maszynowego w swojej firmie lub swoim życiu 😉 Czytaj więcej…
✅ Nowość! Jest dostępne demo kursu Praktyczne uczenie maszynowe, gdzie możesz przetestować kilka lekcji zupełnie za darmo. Wystarczy się zapisać i odebrać darmowe lekcje. Pracujesz w gotowym środowisku. Dołącz…
Wszystkie kursy prowadzi Vladimir, jest 100% online i 100% praktyki, jak zawsze. Kursy odbywają się jedynie 2 razy do roku, więc jeśli zastanawiasz się, kiedy jest właściwy moment, aby zająć się uczeniem maszynowym na poważnie, to właśnie nadszedł 🙂
Dzień dobry!
Dzień dobry. Bardzo miło, że mnie zaprosiłeś, więc mam nadzieję, że wspólnie spędzimy tę godzinę w efektywny sposób i podzielimy się wartościowymi informacjami z innymi.
Będzie wartościowa informacja, ponieważ ja Cię śledzę już od dosyć długiego czasu. Jesteś podcasterem Biznes Myśli. Uczysz na dataworkshop.eu. Fajnie, że tutaj jesteś. Będziemy rozmawiać o Pythonie, o tym kolejnym użyciu Pythona i dlaczego to właśnie on jest najlepszy. Zdradzę pewien sekret, że przed naszym wyjściem w eter, próbowałem pociągnąć Vladimira za język i zapytać, dlaczego ten Python? Odpowiedział: najlepszy!
Zadaniem Vladimira będzie po prostu wytłumaczyć nam, dlaczego Python jest najlepszy?
Pytanie było niekoniecznie o sam Python tylko o uczenie maszynowe, a to, że Python w tym przypadku jest używany to też fajnie, ale głównie miałem na myśli to, że machine learning jest najlepszy 😉
Bez Pythona chyba nie byłoby uczenia maszynowego?
To zależy. Tak się gwiazdy poukładały, że Python jest przydatny w tym kontekście.
To może zacznijmy od podstaw. Dlaczego się gwiazdy w ten sposób poukładały, że Python jest używany w data science, machine learning, AI? Dlaczego akurat Python?
Pewnie wiele czynników, jak to zwykle bywa, musiało się zbiec w konkretnym czasie. Uczenie maszynowe jako koncepcja, powstało dość dawno. Właściwie możemy powiedzieć, że w latach 50-tych zeszłego stulecia już były mądre głowy, które o tym rozważały.
Natomiast to podejście było bardzo akademickie, które miało także wiele porażek, tzn. liczba osób, które były tematem zainteresowane była bardzo mała. Później pojawiło się kilka osób, które chciały to robić, potem znów był jakiś entuzjazm.
Te spadki to tzw. zimy. Później w latach 90-tych to już był moment, kiedy faktycznie to się zaczęło przekładać na praktykę. To jest ciekawa rzecz, bo ja przede wszystkim jestem praktykiem i tak się fajnie też zdarzyło, że akurat w takim czasie się urodziłem. Oprócz tego, że Python się narodził, to ja również się urodziłem w odpowiednim czasie.
Python jest językiem prostym i praktycznym, czyli jak potrzebujesz zrobić prostą rzecz, to się ją robi. Piszesz tę jedną czy dwie linijki kodu i już to masz. Porównując np. z Javą albo podobnym językiem, to po prostu znacznie więcej literek musisz wklepać i znacznie bardziej się namęczyć. Później tak się złożyło, że akurat w Pythonie powstały bardzo fajne i użyteczne biblioteki np. Scikit-learn.
Dlaczego akurat Python w tej chwili właściwie jest językiem numer jeden?
Są takie dwa języki: Python i R. Każdy wie, że Python jest lepszy. Te języki w miarę konkurują ze sobą i każdy inny język tutaj w tym przypadku nie do końca wchodzi w grę. Przede wszystkim chodzi o złożoność, która leży pod spodem.
Oczywiście teraz powstają też pewne rozwiązania w Javie, C#, ale żeby rozwiązać konkretny problem to bardziej musisz myśleć o języku niż o rozwiązaniu problemu. Python w tym przypadku staje się nieco bardziej transparentny. Myślisz bardziej jak rozwiązać problem, niż jak użyć języka w ten czy inny sposób i to jest ważne. To jest chyba rzecz numer jeden, którą można byłoby tu wyróżnić, dlaczego Python w tym przypadku stał się tak popularny.
Czyli można by zaryzykować stwierdzeniem, że Python jest na tyle dobrze przemyślany, że się dobrze w nim rozwiązuje złożone rzeczy?
Też można tak powiedzieć, chociaż ja szczerze mówiąc miałem takie okresy, kiedy język był celem i uczyłem się różnych rzeczy i naprawdę dużo przerobiłem na własnej skórze.
Poznałem pewnie kilkadziesiąt języków i z niektórymi pracowałem produkcyjnie przez długi czas. Faktycznie były okresy maksymalizmu, kiedy chciałem bronić się i kłócić na temat tego, że język A jest lepszy niż język B. Teraz po prostu nie ma sensu taka kłótnia, bo każdy wie, że Python jest lepszy ;), więc w tym przypadku, ciężar tej uwagi przenosi się na inną świadomość, że trzeba rozwiązać problem, musisz wziąć jakieś narzędzie i bierzesz to, które jest lepsze w kontekście rozwiązania problemu.
Tutaj wychodzi po prostu taka siła jobs to be done, czyli po prostu masz rozwiązać problem, a to, jak go rozwiążesz, to już tak naprawdę nie jest ważne.
Jeżeli pojawia się coś, co również dobrze usprawnia rozwiązanie problemu, który mamy w biznesie na co dzień do rozwiązania i będzie to język inny niż Python, to będę go używać, ale w tym przypadku akurat tak się składa, że wszystkie konkurencje zostały w tyle i Python w kontekście ML jest numerem jeden pod tym względem.
Chociaż trochę to dziwnie brzmi, bo ja nie chciałem być uważany za osobę, która ewangelizuje Pythona. Chciałem tylko potwierdzić, że przede wszystkim dla mnie to jest narzędzie.
Tak się składa, że wiele otaczających nas problemów, da się rozwiązać przy pomocy Pythona w sposób efektywny, tyle.
Ok, to się w takim razie nie koncentrujmy na tym, że Python jest najlepszy. Jest najlepszy i kropka.
Ty jesteś człowiekiem, który raczej ewangelizuje machine learning, AI. Kiedy zaczynałem się uczyć programowania, to byłem rozdarty – Javascript jest taki fajny, ale Python jednak lepszy, a do tego Java, bo tam są pieniądze.
Przechodziłem takie piekło tutoriali, jak to ma często Developer Wannabe. Pozostała we mnie ogromna sympatia do Pythona, być może dlatego, że jestem z wykształcenia filologiem i Python w pewien sposób jest połączony. Samo narzędzie jest połączone z poznawaniem języka mówionego. Chciałbym, abyśmy po ludzku, łopatologicznie, wytłumaczyli te base words, aby one zostały odczarowane.
Jak dostajesz takie pytanie Vladimir, czym jest data science? O co w tym chodzi? Co odpowiadasz?
Zastanawiam się, z której strony lepiej to ugryźć, bo data science w sumie to jest hasło, które pojawiło się jako ostatnie. Może zaczniemy od AI. Nie chcę zmieniać tematu, ale wydaje mi się, że to będzie bardziej naturalne rozważanie. A do data science za chwilę wrócę.
Cieszy mnie, że będziemy mówić na takie tematy jak sztuczna inteligencja między innymi dlatego, że sam temat inteligencji jest ciekawy. Można powiedzieć, że sztuczna inteligencja pojawiła się 100 lat temu, czasem można powiedzieć, że troszkę mniej, ale już dawno, dawno temu.
Były takie fajne pomysły, żeby zacząć robić rzeczy w sposób sztuczny i inteligentny. Ta fraza „sztuczna inteligencja” zawiera dwa słowa, czyli „sztuczna” i „inteligencja”. Zdefiniować, czym jest inteligencja, jest dość skomplikowanym tematem, więc może bardziej warto rozważać, czym jest „sztuczna”.
„Sztuczna” czyli coś wytworzone przez człowieka. „Inteligencja” jest o tyle trudna, że nie do końca wiemy, jak ją zdefiniować. Właśnie to jest takie ciekawe też zadanie dla wszystkich odbiorców: jak myślisz, czym jest inteligencja tak naprawdę? Jak to zdefiniujesz? To jest taka fajna rozrywka intelektualna przy okazji na wieczór albo nawet na kilka dni czy miesięcy.
Trochę ułatwię tę ścieżkę, przypomnę, jak to robili inni ludzie. Alan Turing (gwiazda w świecie IT) uważał, że skoro nie wiemy, czym jest ta inteligencja, to spróbujmy powiedzieć, że jeżeli ktoś zachowuje się w sposób inteligentny, to oznacza, że tę inteligencję prawdopodobnie posiada. Zaczął obserwować, czy dana osoba zachowuje się inteligentnie lub nie. Wymyślił taką grę – mamy dwa pokoje, w których jest człowiek i bot i rozmawiasz z nimi przez czat.
Wcześniej nie było czatów, bo nie było komputerów, ale powiedzmy, że piszą sobie na kartce papieru, ktoś zanosi ją do pokoju, potem dostajesz odpowiedź i jeżeli jesteś w stanie rozpoznać, która odpowiedź nie jest człowiekiem, to oznacza, że udało się test Turinga przejść.
W tym teście Turinga to akurat nie było takie trywialne, ale jednocześnie ma duże ograniczenia, bo tak naprawdę ludzie są różni. Każdy może rozmawiać na różne tematy i nadal być człowiekiem. W szczególności jak popatrzymy sobie na wizyty u lekarzy.
Przychodzi pacjent, coś mówi, np. że boli go głowa i chat zadaje pytania na podstawie poprzedniego zdania:
– Czy boli Cię głowa?
– No tak boli mnie głowa od wczoraj.
– Czyli od wczoraj Cię boli głowa?
– Tak.
Czyli tak naprawdę to pytanie jest bardzo proste, bo to jest powtórzenie tego samego tylko w roli pytania. Z boku wydaje się, że to jest inteligentna rozmowa, ale wcale nie musi być. Pod tym względem ten test Turinga da się zhakować.
Chciałbym wrócić do data science, o które pytałeś. AI to jest bardziej koncepcja, kiedy pewne rzeczy dzieją się w sposób inteligentny, ale za tym nie stoi człowiek wprost, tylko tam jest jakiś pewien mechanizm w środku, który żyje swoim własnym życiem. Jak to zrealizować?
Pojawia się termin uczenie maszynowe, czyli zbiór algorytmów, który próbuje realizować to zachowanie w sposób inteligentny. ML skupia się przede wszystkim na algorytmach jako tako, a data science to jest coś więcej, bo tam pojawia się jeszcze warstwa związana z danymi, czyli analizujemy dane, przygotowujemy je, bo to jest dość żmudny proces.
Jest taki żart, że 80% przygotowuje dane, a 20% narzeka, że musiało tak długo je przygotowywać.
Można powiedzieć, że data science to jest warstwa dodatkowa nałożona na uczenie maszynowe, która umożliwia łączenie kropek w odpowiedni sposób. Są dane (np. w bazie danych, Excelu), te dane trzeba wyciągnąć, znormalizować, wyczyścić, zrozumieć, czy w ogóle mają sens. Nakłada się też podejście naukowe, zresztą słowo science nie pojawiło się przypadkiem.
Chodzi o to, żeby po prostu te eksperymenty przeprowadzać w sposób bardziej naukowy. Słowo, które tu jest ważne to „powtarzalność”, czyli to jest tak, że rzeczy, które wykonujesz, powinno się dać powtórzyć, najlepiej jeszcze przez inną osobę albo chociażby przez tę samą osobę za dzień, dwa czy miesiąc, co wcale nie jest takie proste. Tak naprawdę większość tych rzeczy ciężko się powtarza.
Jak tutaj się odnaleźć? Jak to jest tak po ludzku: machine learning, data science? Czym to jest tak dla programisty?
Spróbujmy rozłożyć to na czynniki pierwsze.
Programista to jest osoba, która dostaje jakąś specyfikację i próbuje ją przypisać w taki sposób, żeby ją zrozumiał komputer. Innymi słowy jest tłumaczem ze ścisłym sposobem myślenia, bo musi myśleć technicznie. Wynika to ze specyfiki tego, z kim rozmawia – z komputerem. Na przykład w specyfikacji jest napisane: „Jeżeli jest przypadek taki to zrób to, jeżeli taki to zrób tamto” czyli tzw. if-y (warunki). If-y czasem są też zagnieżdżone, np. jak masz pierwszą gałąź, potem w niej masz podgałąź, potem jeszcze podgałąź itd.
Wszystko jest pięknie i tak naprawdę to jest albo rola programisty, żeby te wszystkie gałęzie złapać, albo rola tej osoby, która pisze tę specyfikację, czyli tzw. Business Analyst albo gdzieś na styku takie if-y powstają. To robi programista.
Teraz wyobraźmy sobie, że nie piszemy sobie ręcznie tych if-ów. Tak naprawdę to, co robimy, to przygotowujemy dane na wejściu np. informacje na temat człowieka. Ten człowiek ma jakieś opisowe informacje np. wiek, płeć i kupuje coś w sklepie. Możemy też zobaczyć, ile minęło dni od daty rejestracji tej osoby w sklepie itd.
Następnie nie piszemy w sposób jawny, jeżeli np. data rejestracji jest 5 dni, ma 30 lat i mieszka w Warszawie, to dajemy mu zniżkę taką, tylko bardziej przepuszczamy ten input, który dostaliśmy i dostajemy też output, czyli co my oczekujemy jako wynik, np. oczekujemy, że do tego konkretnego przypadku (będziemy prognozować czy ten człowiek kupi) jest informacja: „tak, kupię” albo „nie, nie kupię”, czyli 1 lub 0 (bądź true, false).
Najważniejsza różnica między programowaniem i uczeniem maszynowym jest taka, że w programowaniu musielibyśmy w sposób jawny zakodować te wszystkie if-y, a w uczeniu maszynowym to wszystko robi maszyna.
Tylko ona robi to w taki sposób, że wie, co jest na wejściu, wie, co jest na wyjściu i musi tak pokombinować w środku, używając algorytmu, który ma pod spodem, żeby te if-y powstały w sposób automatyczny. To jest kluczowe słowo. W sposób automatyczny pojawia się pewna logika, która normalnie była przygotowywana przez programistę. Logika ta pojawia się tylko i wyłącznie na skutek tej historii. Oczywiście teraz robię pewne uproszczenie, ale myślę, że akurat do tego przypadku jest bardzo przydatne.
Tutaj pojawia się trochę filozoficzne pytanie: czy to myśli, czy nie? Czy ten biznes myśli, czy ten biznes przestaje myśleć? W tym momencie to takie dosyć proste, filozoficzne pytanie się nasuwa. Mówisz o tym, że maszyna ma input, output, musi wykombinować coś pośrodku, prawda? Znajdują się tam algorytmy, przecież te algorytmy trzeba zrobić. Musisz je napisać tak naprawdę, czy one się same napiszą? Jak to wygląda w środku?
Tutaj trzeba podzielić: jedna rzecz to algorytmy, które też można nazwać jako takie narzędzie, czyli Python jest narzędziem i to jest najniższy poziom. Kolejny poziom jest taki, że używając Pythona powstają pewne uniwersalne algorytmy. To jest też ważne podejście. Tych algorytmów trochę jest, one są już napisane. To jest dobra wiadomość, bo nie musisz ich pisać od zera.
Te biblioteki są tak przygotowane, że ich użycie jest w tej chwili trywialne, nawet nie proste. Druga sprawa, żeby zrozumieć jak to działa pod spodem, to trzeba trochę więcej czasu spędzić. Tutaj przy okazji zapraszam na mój kurs, gdzie to wszystko tłumaczę: „Praktyczne uczenie maszynowe od podstaw” na DataWorkshop.
Teraz, jeżeli chodzi o algorytmy. Przykład algorytmu, żeby to też nie było bardzo abstrakcyjne, to np. drzewo decyzyjne. To jest jeden ze sposobów, jak możemy rozwiązywać problem. Ten algorytm działa w taki sposób, że mamy poszczególne cechy, które dostaliśmy jako input, np. wiek, płeć, miasto, z którego dany człowiek wszedł na stronę itd. Algorytm przegląda poszczególne cechy i następnie próbuje wybrać taką, na podstawie której będzie w stanie podzielić ten cały zbiór danych (bo wszystkich danych mieliśmy powiedzmy 1 000, 100 000 albo 1 000 000, bo uczenie maszynowe uwielbia dane).
Naszym celem jest zrobić pewne podziały w tych danych, w taki sposób, żeby wszystkie zera oddzielić od jedynek, czyli zrobić tak, żebyśmy ostatecznie mieli tylko same zera albo same jedynki. W jaki sposób będziemy to dzielić? Będziemy zadawać kolejne pytania.
W tym przypadku pytaniem jest wzięcie konkretnej cechy np. wiek i sprawdzić czy przy 25 latach ten wiek tworzy podział w taki sposób, że powstałe podgrupy są spójniejsze, czyli np. zawierają albo więcej zer, albo więcej jedynek. Jeżeli tak to w ten sposób dzielimy i dostajemy taki stan przejściowy. Potem zadajemy kolejne pytania i po raz kolejny dzielimy.
To przypomina trochę takie podejście, że na początek mieliśmy mieszaninę, że były same zera, jedynki, a później dzieląc coraz bardziej te kawałki, dostajemy więcej mniejszych podzbiorów, np. takie grupki po 15, 20, ale te grupki są spójne – albo same zera, albo same jedynki. Jak uda się nam dojść do takiego stanu, że uzyskaliśmy więcej podgrup, które są spójne to w tym momencie, po prostu odkręcając z powrotem, mamy logikę tych if-ów.
Przeprowadźmy sobie taki eksperyment w głowie. Przychodzi jakiś nowy input, na który nie mamy odpowiedzi. Mamy tylko opisowe cechy, czyli np. znamy wiek, płeć, wiemy, z jakiego miasta ten człowiek jest i przechodzimy przez te węzły, które sobie zdefiniowaliśmy automatycznie i mamy jakąś odpowiedź, np.
– czy wiek jest mniejszy niż 15?
– tak/nie
Jeżeli tak to w tę stronę, jeżeli nie to w drugą, czyli w lewo albo w prawo. Ostatecznie to dąży w tym kierunku, że wylądujesz w pewnym miejscu tego drzewa i pojawi się to słynne pytanie, że „powiedz mi o swoim otoczeniu, powiem Ci kim jesteś”, czyli gdzie jestem. Patrzysz, jeżeli jesteś wśród samych jedynek to jesteś jedynką, jeżeli jesteś wśród zer to jesteś zerem. Tak to mniej więcej funkcjonuje.
Trochę to tak słabo brzmi, że jesteś zerem. Strasznie się jakoś tak politycznie to odnosi. Ale dobrze, rozumiem. Teraz dochodzi do mnie kolejne pytanie i to znowu dosyć filozoficzne: czy to jest porządkowanie świata? Próbujesz w ten sposób porządkować świat, żeby wszystkich podzielić na zero i jeden?
Tutaj jeszcze warto się odnieść do kilku ważnych kwestii, bo jak np. powiedziałem, że różnica pomiędzy programowaniem klasycznym jest taka, że nie piszemy tych if-ów jawnie. Ale jest też inna rzecz, bo to trochę wybrzmiało w taki sposób, że czasem możemy pisać jawnie, a czasem automatycznie, ale prawda jest taka, że są takie problemy, których nie da się rozwiązać w sposób klasyczny.
One są tak skomplikowane, że nasz mózg nie jest w stanie pojąć tych wszystkich złożonych zależności, które są pomiędzy. Właśnie to uczenie maszynowe nie rozwiązuje tylko podstawowe problemy, ale przede wszystkim wartość jest tam, gdzie człowiek nie jest w stanie zobaczyć zależności. Tutaj wchodzi w grę to, że bierzemy pod uwagę nie 2 cechy, tylko np. 1 000, 10 000, 100 000. Człowiek nie jest w stanie przeanalizować zależności pomiędzy takimi cechami.
Podam taki przykład z życia, z kategorii nieoczywistości. Realizowaliśmy projekt z firmą Obido (można posłuchać w podcaście Biznes Myśli). Analizowaliśmy potencjalną wartość, którą wygeneruje klient w tej firmie na podstawie różnych cech. Teraz nie chcę wchodzić w szczegóły, też nie o wszystkim mogę powiedzieć, ale taka ciekawostka się wydarzyła, że m.in. wcześniej w tej firmie była taka cecha, jak posiadanie logotypu. Chodziło o to, że pewien logotyp, który jest dodawany na poziomie ponad konkretnym kontem, dodajesz go raz i pojawia się Twój awatar na różnych Twoich kontach.
Czasem, jak piszesz komentarz na nieznajomym blogu i widzisz swój awatar, to wynika to z tego, że Twój mail ma właśnie “przywiązany ten” logotyp. Teraz ciekawostka jest taka, że gdzieś tam w sposób niezależny, ta firma używała takiej cechy wewnętrznie. Chcieli w ogóle to usunąć, bo nie było im to później potrzebne, ale na szczęście nie usunęli. Model wykrył, że jeżeli ktoś posiada ten logotyp, to potencjalna wartość tego klienta jest 50-krotnie wyższa niż jeżeli ktoś tego logotypu nie posiada.
Oczywiście to chodzi o pewne korelacje, bo to pewnie chodzi o to, że ktoś musiał znaleźć czas, żeby ten logotyp postawić albo ten mail jest bardziej zweryfikowany, albo jeszcze coś innego. W każdym razie nie do końca wiadomo, dlaczego tak jest, ale takie zależności udało się w dość ciekawy sposób wyłapać. Chociaż np. zawartość logotypu już nie była taka wartościowa, jeżeli chodzi o korelacje.
Wracając do pytania. Czy porządkuje świat? Uczenie maszynowe albo ML to jest narzędzie innego poziomu, czyli problemy, które możemy teraz rozwiązywać są bardziej złożone i skomplikowane. Oczywiście to nadal nie jest tak, że wszystkie problemy rozwiążemy, przynajmniej na ten moment, ale to jest groźne narzędzie. To prawda, że potęga, którą dostaje ktoś, kto ma to narzędzie i wie, jak go użyć, jest zdecydowanie większa niż kogoś, kto tego narzędzia nie posiada.
Wciąż zaczynam krążyć wokół filozoficznych przemyśleń. Całkiem niedawno słyszałem o tym, że wreszcie filozofowie zaczęli się coraz bardziej przydawać. Nie to, że byli nieprzydatni. Rozwój ML, data science ogólnie tej gałęzi spowodował, że filozofowie zaczęli mieć więcej pracy, bo to już chodzi o wartości etyczne, wartości związane z ludzkością, człowieczeństwem czasami.
Gdzie tutaj mamy już AI, a gdzie mamy maszynę, gdzie mamy myślenie człowieka? Wiem, że jesteśmy jeszcze daleko od tego, żebyśmy bardzo dobrze rozmawiali z maszyną jak z człowiekiem, tylko zacząłem czytać kilka ciekawych rzeczy o tym.
Mówiąc o przemyśleniach – książki. Jakie książki Vladimir poleciłby osobom początkującym, które chciałyby się zająć tą gałęzią, w której Vladimir siedzi od lat?
Warto dodać kontekst i powiedzieć w ogóle, dlaczego warto byłoby w to wejść. Ja zacząłem swoją przygodę od świata programistycznego. Ciężko w sumie stwierdzić, od którego konkretnie roku, ale powiedzmy w 2008 r. już działałem komercyjnie, jeżeli chodzi o programowanie i próbowałem przeróżnych rzeczy, testowałem różne języki. Tych języków liznąłem bardzo dużo.
Przez pewien okres tak się składało, że w sumie dość szybko się nudziłem różnymi rzeczami, bo generalnie rzecz biorąc każdego języka da się nauczyć w miarę szybko i te rzeczy są dość powtarzające się. Jeżeli już nauczyłeś się jednego języka, to później to idzie szybciej.
Natomiast problem był taki, że fajnie jednak próbować znaleźć swoje miejsce, bo tak naprawdę dość często siedzimy, próbujemy różnych rzeczy, ale nie zawsze dajemy sobie szansę, żeby popatrzeć, czy jest jakiś inny kawałek tego świata, który może bardziej nam pasować. Na przykład takie uczenie maszynowe: chciałbym, żeby po tej rozmowie więcej osób się skusiło i spróbować podziałać w tym kierunku. Jeżeli chodzi o książki…
Pozwól, że Ci wejdę w słowo. Czy jesteś w stanie polecić jakąś książkę dotyczącą filozofii tego wszystkiego, czym Ty się zajmujesz? A dopiero potem przejdziemy do tego, od czego zacząć, jeśli bardzo chcę wejść i uczyć się Pythona, próbować zrozumieć machine learning, data science, AI.
Faktycznie w tej chwili świat się podzielił dość mocno. Jedni, a zwłaszcza takie osoby bardziej wkręcone technologicznie wiedzą, że obecny rozwój to nie jest prawdziwa sztuczna inteligencja i tam są bardzo podstawowe ograniczenia.
Można powiedzieć, że na ten moment tam, gdzie jesteśmy, ciężko było stworzyć taką ogólną sztuczną inteligencję albo super poziom, kiedy jest mądrzejsza niż człowiek.
To jest prawda, ale niekoniecznie obejmuje cały świat, bo z drugiej strony ten rozwój jest dość skokowy. Tak naprawdę nie do końca wiadomo, co się wydarzy jutro. Bardziej chodzi o to, że jest duża szansa, że pewne rzeczy zaczną się rozpędzać znacznie szybciej, niż się wydaje. Nawet już te rzeczy, które są obecnie, potrafią zrobić wrażenie, bo chociażby spójrzmy na Chiny.
Został tam wprowadzony pewien score obywateli. Po pierwsze jest duży nacisk zrobiony na to, żeby rozpoznawać twarz, czyli na podstawie twarzy wie się, że dany człowiek porusza się w pewnych obszarach. Druga rzecz – obserwować dokładnie, co ten człowiek robi i to akurat robi się w bardzo łatwy sposób, bo oni mają m.in. tzw. WeChat, w którym można robić przeróżne rzeczy, znacznie więcej niż w Facebooku, również płatności wszystkie, chaty, zamawianie usług i jako wynik jest to, że ten obywatel dostaje tzw. score. Score to jest ocena, na ile temu obywatelowi można zaufać.
Co to znaczy w praktyce? W praktyce to jest tak, że jeżeli ten obywatel jest przeciwko partii, to ma kłopot. Oczywiście to jest przedstawiane zupełnie inaczej, np. jeżeli ktoś przeszedł na czerwonym świetle, to dostaje jakieś punkty karne, czyli ujemne, jeżeli ktoś komuś pomógł, to dostaje punkty dodatnie.
Zwykle tak to jest przedstawiane, ale są też strefy szare albo wręcz czarne, które niejednoznacznie są sprecyzowane. Taki przykład słynny: gdy ktoś idzie do sklepu i kupuje rzeczy dla małego dziecka i jeszcze przy okazji alkohol, to też dostaje punkty ujemne, ponieważ jest np. mniej odpowiedzialnym ojcem.
To jest przerażające, bo to się już dzieje i coraz bardziej się rozpowszechnia. Na szczęście w Unii Europejskiej jest trochę trudniej i to jest jedyne miejsce na ziemi, gdzie jest trochę trudniej, bo jest RODO, ale z drugiej strony to nadal są pewne pomysły, które tu też chce się wdrożyć.
Na przykład jeżeli weźmiemy Stany Zjednoczone, to tam już takich trudności z wdrażaniem systemu jest zdecydowanie mniej. Też nie chciałbym wchodzić w szczegóły, ale jeżeli chodzi o takie sieci społecznościowe jak np. Facebook czy Google, to te systemy już wiedzą znacznie więcej niż każdy człowiek, który z tego systemu korzysta.
Tam w ogóle były takie fajne parametry, że wystarczy stosunkowo krótka historia i już Facebook wie bardzo dobrze co lubisz, co Ci się podoba, jaką religię wyznajesz, jaką politykę itd., chociaż tam występują pewne błędy i to też nie jest idealne rozwiązanie, ale jeżeli mówimy o skali świata, to faktycznie jest takie miejsce, gdzie w sposób bardziej powtarzalny możemy charakteryzować ludzi i to też ma pewne skutki.
Mam takie kolejne przemyślenie, czy ja mam się zacząć bać, że teraz kliknę dwie rzeczy na Fejsie i już od razu Facebook wie, co ja robię, kogo lubię, kogo nie lubię, na kogo będę głosował? To taki ludzki strach wychodzi, jak sobie dać z tym radę?
Strach i obawy nie mają sensu, bo zżerają bardzo dużo energii i ostatecznie nic nie pomaga, bo w sumie algorytm działa tak, jak działa, więc trzeba wyeliminować te wszystkie strachy. Trzeba mieć świadomość, że faktycznie te wszystkie nasze kliki, nasza historia po pierwsze – nigdy nie są usuwane.
Chociaż niby RODO, Unia Europejska ma takie przywileje i można próbować to jakoś usunąć. Swoją drogą, taka podpowiedź: korzystając z tych przywilejów, zawsze można napisać do Facebooka albo Google i zapytać – co drogi Google, Facebooku wiesz o mnie? Tutaj może być duże zaskoczenie.
Mi kilka gigabajtów przesłał wtedy i się trochę przeraziłem.
Zastanawiam się, na ile to jest wszystko, bo to są w sumie trochę takie triki, ale też nie chcę wchodzić w te tematy, bo nie wiem, czy chciałbym publicznie się na ten temat wypowiadać.
Ale niech tak porozważa każdy na spokojnie: jeżeli jest grupa bardzo zdolnych, ambitnych inżynierów, którzy potrafią techniczne rozwiązywać problemy bardzo dobrze – i to jest jeden element. Drugi element – mają bardzo dużą historię (w terabajtach, petabajtach itd.) to czy to nie jest naturalne, że ktoś to wykorzystuje i robi w sposób bardzo fachowy, na poziomie takim, żeby to już było bardzo namacalne i dawało konkretne wyniki?
Oczywiście to nadal nie jest taka inteligencja, która potrafi sama myśleć. Nie mylmy tych rzeczy, ale to, co już potrafi robić, to już zaskakuje, bo ona niczego nie zapomina, wszystko pamięta. Pamięta, jak się zmieniasz w czasie, może zaprognozować, jaki będziesz za chwilę. Nie wiem, co zrobisz z tą informacją, ale fajnie, że świadomość wzrasta.
Boimy się rzeczy, których nie znamy. Tak jest z nauką programowania i to chyba z nauką z każdego języka. Osoby, które po różnych moich podcastach przychodzą do mnie z jakimś pytaniem, to mam takie wrażenie, że nie wiedzą i się boimy.
To jest chyba bardzo ludzkie podejście. Może pewnym sposobem na to, aby zrozumieć to, co się dzieje z machine learning, data science, AI, jest nauka tego. Przynajmniej, żeby wiedzieć jak to działa, w którą stronę powinniśmy iść. Tutaj wychodzi pytanie: Vladimirze, a od czego zacząć? Jak w ogóle sprawdzić, czy to jest dla mnie? Czy dam radę? Co robić?
W ogóle to spostrzeżenie jest bardzo ciekawe. Jak czegoś się boisz, to najlepiej zrobić krok do przodu i zobaczyć, czym to jest, czego się faktycznie boisz, bo akurat może się okazać, że trzeba się bać innych rzeczy, jeżeli w ogóle się bać. Najlepiej w ogóle się niczego nie bać.
Nie jest to krok w przepaść czy skok na bungee. Ja bym się bał trochę skoczyć na bungee, ale tutaj chodzi o programowanie. Ja się trochę boję, że nagle coś kliknę i już będę sprofilowany tak, że nie dostanę kredytu w banku. Ja bym chciał to zrozumieć, więc od czego zacząć?
W ML wchodzi się z dwóch stron. Jedna strona to jest właśnie programista, a druga to analityk danych, który niekoniecznie umie programować, ale bardziej w Excelach siedzi i potrafi analizować.
Teraz skupmy się na programistach, bo w tym przypadku to jest bardziej pasujący kontekst. Jeżeli już umiesz programować, to będzie Ci trochę łatwiej (przy czym „umiesz” to też mocne stwierdzenie, dość abstrakcyjne, ale przynajmniej w swoim życiu udało się napisać kilka linijek kodu, który działa i to przyciąga Twoją uwagę) i myślę, że warto spróbować pójść dalej i zacząć eksperymentować z uczeniem maszynowym.
Na szczęście to jest tak, że na ten moment, jeżeli chodzi o start to naprawdę nie jest to aż takie skomplikowane. Nawet jeszcze 5-10 lat temu, żeby wystartować z ML, to naprawdę trzeba było się postarać. Myślę, że osoby po studiach informatycznych dobrze pamiętają, jak to było na uczelni. Jest drogi pan profesor, który mówi o czymś bardzo abstrakcyjnym, nikt na końcu nie rozumie, o czym mówi, udaje mu się osiągnąć bardzo dobrze jedną rzecz, a mianowicie zniechęcić wszystkich i to jest złe podejście.
Trzeba zmienić system edukacyjny, ale tak globalnie go zmienić, bo w tej chwili jest on tak skonstruowany, że zniechęca. W tej sposób funkcjonuje, że wprowadza pewne poziomy lęków, że mogę się pomylić, że mogę zrobić coś źle, ale to dobrze, że się mylisz! Właśnie na tym polega nauka – czym bardziej się mylisz, tym szybciej idziesz do przodu.
To jest właśnie problem, że w szkołach mocno się przywiązuje takie myślenie, że chcę mieć 5-tkę i będę milczeć, nie będę się wychylać. Pierwsza rzecz, którą trzeba sobie uświadomić to to, że trzeba zmienić nastawienie do nauki. Nawet nie chodzi o ML, chodzi o nauki ogólnie. Umówmy się, że nie ma czego się bać. Pozwól sobie poeksperymentować.
Druga ważna rzecz to żeby znaleźć się w odpowiednim otoczeniu. Zobaczyć takie osoby, które podobnie próbują, eksperymentują, popełniają błędy. Tu też wychodzi osobowość, ale zwykle jest tak, że znacznie trudniej człowiekowi jest się podnieść, kiedy jest sam. Znacznie łatwiej jest, kiedy jest grupa, która dzieli się tymi samymi trudnościami.
Taka motywacja daje siłę, by iść do przodu. Przy okazji podpowiem, że w ramach Data Workshop robimy dość regularne wyzwania albo taki Matrix, gdzie wspierała się duża grupa osób (4-5 tys.). To wszystko odbywało się online i osoby wspólnie przez tydzień wykonywały różne zadania, które w sposób namacalny można było przerobić przez osoby, które niemal wcześniej nie programowały.
Przy czym jeżeli chodzi o te rzeczy, to są dostępne nadal, można tam się zalogować i je przerobić:
dataworkshop.eu/challenge – tam są wyzwania, to są bezpłatne rzeczy,
dataworkshop.eu/matrix – to jest kontynuacja.
To jest jeden sposób, żeby wystartować.
Inna rzecz to książki, bo wiem, że część osób lubi książki. U mnie z książkami jest tak, że jestem w trochę dziwnej sytuacji, bo z jednej strony zawsze mówię, że książka jest niewystarczająca. Z drugiej dość regularnie też książki czytam, żeby się upewnić, że to faktycznie jest prawda. Mam trochę różnych książek i przy okazji mogę trochę tutaj polecić coś do przeczytania.
Na przykład bardzo podoba mi się książka „O’REILLY Uczenie maszynowe w Pythonie”, taki leksykon kieszonkowy wydawnictwa Helion, autorstwa Matta Harrisona.
Kupiłem ją przypadkowo i mi się spodobała przede wszystkim dlatego, że jest malutka i zobaczyłem, że człowiek, który to napisał, jest praktykiem i faktycznie to fajne przejść sobie przez takie tematy, żeby przynajmniej się zapoznać z terminologią. Pod tym względem ta książka jest całkiem ciekawa. Ma 256 stron, jeśli się uprzeć, to daje się ją przeczytać w kilka dni albo nawet jeden dzień, więc warto zapamiętać.
Kolejna książka, którą warto przedstawić to „Data science od podstaw. Analiza danych w Pythonie”, też wydawnictwo Helion, autor to Joel Grus. Ta książka też nie jest gruba, około 300 stron. Też jest bardzo fajna dla osób raczej początkujących.
Jeszcze jest książka Sebastiana Raschka, nieco grubsza „Python Machine Learning” wydanie drugie. Sebastian Raschka ma bardzo fajny blog i on bardziej mi się podoba niż książka, ale z drugiej strony w tej książce też są czasem całkiem ciekawe rzeczy.
Natomiast jeżeli ktoś się interesuje tematem deep learningu, czyli sieci neuronowe to polecam bardzo bardzo „Deep learning. Praca z językiem Python i biblioteką Keras” Francois Chollet. Keras to framework, który jest bardzo fajny, w szczególności dla osób początkujących.
Ja go osobiście bardzo regularnie używam i to jest narzędzie, które fajnie mieć w szczególności na początek.
Jeżeli ktoś bardzo chce wejść do tematu ze strony akademickiej, potrzebuje jakichś wzorów to jest taka lektura „Deep learning”, której autorem jest m.in. Ian Goodfellow. To jest słynny człowiek, który wymyślił GANy. GANy to są właśnie te wszystkie deep fake’i, czyli gdy generują się obrazki, których nigdy nie było.
Tę książkę się czyta znacznie trudniej i wbrew pozorom wygląda na cieniutką, ale strony są bardzo cienkie. Jest podobnie jak z Biblią, jak bierzesz to jest taka niby cienka, ale tam jest dużo treści – po prostu skompresowali to.
Przy okazji dla poszerzenia horyzontu polecam „Superprognozowanie. Sztuka i nauka o prognozowaniu”. Autorem tej książki jest Philip Tetlock. Tutaj nie jest wprost o uczeniu maszynowym, ale jest to ciekawa lektura, która pokazuje, na ile np. specjalista albo specjalne działy, które bardzo drogo kosztują w państwie, mylą się w porównaniu do tego, gdy weźmiesz sobie opinie różnych osób i potem te opinie w sposób odpowiedni złączysz. To jest bardzo ciekawy eksperyment, który człowiek przeprowadził.
To są fakty i dają dużo do myślenia, więc jeżeli ktoś chce po prostu trochę lepiej zrozumieć, jak najlepiej podejmować decyzje, to polecam. Były takie eksperymenty, czy odbędzie się rewolucja w którymś kraju. Powiedzmy, że są służby specjalne, które robią swoje prognozowania i są osoby, które mają publiczną wiedzę, np. gazety, tv itd. tylko tych osób jest dużo.
Teraz zbierasz te informacje, potem odpowiednio je łączysz i okazuje się, że ci przeciętni Kowalscy dają lepszy wynik, niż służby specjalne, które zawierają tych informacji znacznie więcej. Przy czym tam w ogóle kilka rzeczy się dzieje, dlaczego tak się dzieje, ale m.in. ważna rzecz jest taka, że czym więcej wiesz, tym trudniej jest Ci podjąć właściwą decyzję.
Ludzie czasem chcą wiedzieć jak najwięcej, ale w praktyce następuje tzw. paraliż decyzyjny albo paraliż tej wiedzy, że wiesz za dużo. Zaczynasz wpadać w pułapki myślenia, że potrafisz zrozumieć rzeczywistość, ale tak naprawdę tego nie potrafisz.
A propos rzeczywistości jest taka książka „Antykruchość”, autorstwa Nassima Nicholasa Taleba. Warto ją przeczytać, bo coraz lepiej widzisz, że rzeczywistość ciężko zrozumieć i za każdym razem, kiedy próbujesz się złapać, że jesteś tak inteligentny, to po prostu musisz trochę głębiej pogrzebać w pewnych pytaniach i dyskusjach. Bardzo fajnie się czyta, chociaż słyszałem opinie, że nie wszyscy lubią styl Taleba. Dla mnie to jest wszystko. Bardziej chodzi o to, że przedstawiane przez niego fakty naprawdę dają do myślenia.
Może jeszcze jedną książkę wspomnę „Storytelling danych. Poradnik wizualizacji danych dla profesjonalistów”, której autorem jest Cole Knaflic. To jest w pewnym sensie temat komunikacji, że fajnie sobie pewne rzeczy osiągnąć, ale w zależności od tego, jak to komunikujemy, to zupełnie inaczej ludzie to rozumieją. W data science to jest bardzo ważna rzecz, oprócz tego, że rozwiązujemy problem, to chcemy go w jakiś sposób przedstawić, żeby ktoś inny też zrozumiał, co tam zrobiliśmy.
Ta książka jest właśnie na temat tego, jak robić wizualizację dobrze. Wizualizacja jest też ciekawa pod tym względem, że czasem to robimy nieświadomie, a czasem jest ta świadomość, że na skutek użycia pewnych sztuczek wizualizacji, możesz wpływać na ludzi, np. w polityce. Tam jest bardzo popularne, aby w odpowiedni sposób układać sobie dane, żeby wpływać na opinie, np. pokazywać odpowiednie słupki, a linii nie pokazywać albo np. bardzo popularna sztuczka, jak np. oglądasz jakiegoś newsa, to zwracaj zawsze uwagę na oś Y i zobacz, czy Y się zaczyna od zera. Jeżeli się nie zaczyna od 0, to można zrobić tak, że delikatne wahania wyglądają na gigantyczne. Tylko właśnie przez to, że odcięto 0 i zaczęto z wierzchu, to w ten sposób wpływa się na ludzi i robi to akurat niestety świadomie.
Strasznie kusi, aby zacząć porównywać to do sytuacji obecnej, ale w tym podcaście są dwie zasady. Jedna zasada, że mam bardzo mądrego człowieka rozmówcę, a druga zasada, że nie można powiedzieć „to zależy”, bo jak ja bym się spytał, jak to się tutaj teraz porównuje, to prawdopodobnie byś powiedział „to zależy”.
Opowiadałeś o książkach. Mam wrażenie, że tłumaczą Ci, w jaki sposób działa machine learning i cała otoczka tego, o czym dzisiaj rozmawiamy. Ja bym chciał zadać pytanie o podstawy. Jeśli ja totalnie nic nie wiem, to od czego zacząć?
Pierwsza rzecz to myślę, że warto zasubskrybować DataWorkshop, aby dostawać maile, bo my faktycznie przerobiliśmy już na ten moment bardzo dużo materiałów dla osób początkujących. Jeżeli nawet nic na ten temat nie wiesz, to wystarczy po prostu pooglądać webinary albo wszystkie materiały, które udostępniamy bezpłatnie. Tam jest dużo merytorycznej treści.
Jako przykład: jest taki problem Titanic, który polega na tym, że mamy informację opisową o pasażerach, wiemy, kto przeżyje, kto nie. Te dane są podzielone na powiedzmy koło, na którym się trenujemy i tam gdzie prognozujemy. Naszym celem jest wytrenować model w taki sposób, żeby na podstawie tych charakterystyk, o których wiemy (czyli np. w którym porcie wszedłeś na statek, z kim, czy była tam żona, czy rodzeństwo, dzieci, rodzice, płeć, tytuł, który można też wyciągnąć, czy jesteś doktorem, profesorem, w której klasie statku itd.) przewidzieć, kto przeżyje katastrofę.
Tam krok po kroku jest pokazywane, jak takie prognozowanie można zrobić. Jeszcze raz powtórzę, że nie wierzę, że na książkach można się nauczyć. Książki fajnie uzupełniają wiedzę tzn., że jak przerobiłeś pewne rzeczy, to można sobie doczytać i dlatego ja to robię, ale przede wszystkim polecam robienie rzeczy rączkami, siadanie i powtarzanie. Np. oglądasz webinar, tam są udostępnione materiały, można to powtórzyć i samodzielnie wykonać te kawałki kodu, które tam są przygotowane i to bardzo polecam, bo nie wierzę, że da się tego nauczyć inaczej niż poprzez praktykę.
W ogóle mam takie stwierdzenie, że ML to w 99% praktyka i tylko 1% to teoria. Niestety przez to, że temat stał się mainstreamem, to w tej chwili jest znacznie więcej osób, które mówią o tym teoretycznie i w wielu tematach się mylą. Tak naprawdę zwracają uwagę na mniej istotny aspekty, a o tym, co jest ważne, w ogóle zapominają.
Wracając do tego, gdzie powinny zacząć osoby początkujące, to polecam zapisać się na newsletter albo wejść na stronę z webinarami. Miałem taki cel, żeby przygotować materiały dla osób, które chcą wejść do świata ML. To było tak zrobione, żeby próg wejścia był jak najbardziej minimalny i te materiały są dostępne, więc polecam to przerobić. Wiem, że te materiały da się przyswoić w miarę łatwy sposób, bo wiele osób już to zrobiło i dlaczego Ty miałbyś się powstrzymać? Spróbuj też dołączyć i podziałać.
Wspomniałeś tego Titanica. Ja jakiś czas temu, chyba w zeszłym roku, trafiłem na Twoją stronę, gdzie jedna z osób niezwykle chwaliła Twoje wysiłki i mówiła, że rok wcześniej nie wiedziała, co to są if-y, a teraz liczy ilość osób na Titanicu, kto przeżył a kto nie albo kto ma jakąś szansę.
Chciałbym jeszcze zadać pytanie ogólne: wspomniałeś trenowanie, jak to się robi?
Wejdźmy troszkę w szczegóły, ale to w sumie nie jest takie skomplikowane. Już wiemy, że w uczeniu maszynowym są modele albo algorytmy. To jest moment, żeby odróżnić, czym są algorytmy, a czym są modele i na czym polega trenowanie. To jest taka faza, czyli mamy dwie fazy w tym całym procesie. Jest faza trenowania i prognozowania.
Faza trenowania polega na tym (teraz mówimy o uczeniu nadzorowanym, czyli wtedy kiedy mamy odpowiedź), że mamy nasz input, załóżmy że to jest Titanic. W tym mamy informacje o pasażerach. Mamy informacje i mamy odpowiedź. Faza trenowania polega na tym, że przepuszczamy to przez model, mówimy:
„Drogi modelu, tutaj masz input, tutaj masz output i zrób coś, żeby wychwycić logikę„.
Trenowanie polega na tym, że wychwytujemy tę logikę, czyli kręcimy, kręcimy, szukamy korelacji, zależności. Słowo „korelacja” jest tu istotne i ważne, czyli model nie potrafi zrozumieć, on szuka korelacji. To jest wada i zaleta tego podejścia, bo on nie potrafi interpretować rzeczywistości, on potrafi tylko znaleźć pewne zależności, dzięki temu też robi to inaczej niż człowiek i czasem bardziej skutecznie, ale czasem też potrafi pomylić bardzo podstawowe rzeczy. W wyniku trenowania pojawia się model.
Zobacz: jest algorytm, to jest pewna struktura. Jest model, to jest pewna logika w środku. Można powiedzieć też w inny sposób, żeby to było bardziej zrozumiałe. Mamy przepis nadania – to jest algorytm, jest tam napisane, co trzeba robić.
Ale jest moment, kiedy bierzesz te wszystkie składniki, wrzucasz do miski i wszystko przemieszasz. Pojawia się coś, jakiś stan. Więc model to jest stan, który jest stworzony na podstawie przepisu, który był zawarty w tym algorytmie, a żeby ten stan się pojawił to trzeba uruchomić fazę trenowania. Czyli trenowanie prowadzi algorytm do stanu z tymi if-ami i ten stan nazywamy jako model albo model wytrenowany, ale zwykle jak mówimy model, to mamy na myśli, że już ten stan posiada.
Druga faza to jest faza prognozowania, kiedy mamy informację o pasażerze, ale nie mamy odpowiedzi, czy przeżyje. Na podstawie tylko inputa prognozujemy, jaki jest wynik. Tu warto zwrócić uwagę, że samo trenowanie może być bardzo długie, nie potrzebuje jakiś mega skomplikowanych sprzętów, ale prognozowanie już może się wykonywać na komórce.
Jak już posiadasz ten model, to ta cała logika już później może się wykonywać na komórce i to działa bardzo szybko. To są różne fazy, wymagające różnych sprzętów, różnego czasu potrzebnego na wykonanie, mimo tego że ten proces jest uczeniem maszynowym jako całość.
Takie przykłady bardzo proste o mące, drożdżach, odpowiedniej ilości wody, żeby chlebek upiec, to ja lubię. Właśnie to jest według mnie w podcaście Developer Wannabe świetne, że te mądre głowy potrafią tak bardzo nisko zejść na poziom Developer Wannabe, wyrzucają te klątwy wiedzy i tłumaczą łopatologicznie, po ludzku. Ja to lubię.
Mamy pytanie od Grzegorza. Grzegorz mówi, że w machine learning mamy kilka rodzajów algorytmów, mówią o kategoryzacji binarnej, wieloelementowej regresji itd. Grzegorz szuka metod, algorytmów, sposobów działania podczas budowy rozwiązań ML, które pomogą zoptymalizować dany proces wytwórczy. On nie wie, gdzie szukać tego typu metod ML i to jest pytanie do szanownego Vladimira.
Z tymi podejściami to trochę zależy od problemu, trzeba by było trochę bardziej zdefiniować, co tam dokładniej jest do rozwiązania i tutaj m.in. bardzo fajnie przydaje się kilka właściwych pytań na początek. Tu pojawia się też kolejna rzecz, bo z czasem, jak już zajmujesz się uczeniem maszynowym i data science tak w praktyce, to rozumiesz, że najgłupszą rzeczą na początek jest się rzucić na jakiś model i od razu zacząć działać. Na początku zadajesz pytania: a co my chcemy zrobić? Czyli co jest inputem, co jest outputem?
Próbujesz to ustrukturyzować. Jeżeli to jest tak, że da się to opisać w sposób nadzorowany, czyli mamy jakąś historię i input, to są jakieś opisy tej historii, czyli coś się działo w czasie i jesteśmy w stanie to opisać przy pomocy cech. Cechy to są takie atrybuty obiektów, które posiadamy w tej naszej historii, np. w Titanicu to był pasażer i atrybutami to był jego wiek, płeć, tytuł naukowy itd. Czy jest output znany? Jeżeli tak, to jest to takie klasyczne podejście związane z uczeniem nadzorowanym. To jest to, co omawiałem przed chwilą i to jest najbardziej popularne podejście.
W większości przypadków ono faktycznie się nadaje. Chociaż czasem to jest tak, że problem jest nieco bardziej skomplikowany. Nieraz jest tak, że mamy jakiś input pojedynczy, ale na wyjściu dostajemy serię rzeczy albo mamy dane w sposób hierarchiczny poukładane – mamy szpital, do szpitala przychodzą pacjenci, w szpitalu są też lekarze, więc tutaj od razu pojawiają się dwie gałęzie, to są różne wymiary. Później dany pacjent może mieć różne choroby niestety, później różni lekarze w różne sposoby dają różne leki na różne choroby.
Tu robi się takie drzewko, nie jest to płaska struktura i np. idealnie byłoby zrobić tak, żeby w jakiś sposób po pierwsze scharakteryzować, gdzie jest ten człowiek, czyli jaką chorobę posiada w tej chwili i później ewentualnie, który lek warto by było wziąć. W tym przypadku, zrobienie takiej płaskiej struktury – można pójść tym tropem, czyli próbujemy sobie rozbić to na kolumny, czyli w wierszach mamy pacjentów a w kolumnach mamy te wszystkie informacje.
Na przykład mamy zbiór predefiniowanych chorób, powiedzmy, że jest ich 500, więc będzie 500 kolumn. Tam, gdzie jest choroba, którą miał pacjent, stawiamy jedynkę, a której nie miał – wpisujemy zero. Później jeżeli chodzi o leki to podobna historia, czyli np. miał taką chorobę i czy miał taki lek – tam wpisujemy zero i jedynki. W ten sposób sobie opisujemy tego pacjenta, całą jego historię i potem patrzymy, czy to było skuteczne czy nie.
To podejście ma takie minusy, że tak naprawdę pojawia się dość dużo kolumn, czyli wchodzimy już tysiące, dziesiątki tysięcy albo nawet setki tysięcy cech. Tutaj można też podejść inaczej, że próbujemy tę wiedzę kompresować i tu są różne sposoby po raz kolejny. Czyli możemy np. wziąć grafy, poukładać je w taki sposób, że tego człowieka konkretnego będziemy reprezentować jako graf, innego też jako graf i później już porównywać grafy. Ale teraz nie chcę wchodzić w szczegóły, bo to jest pytanie dość specyficzne.
Chciałbym powiedzieć tylko to, że najpierw trzeba sobie uświadomić (i to jest w sumie najtrudniejsza rzecz), co dokładnie chcemy rozwiązać i pobawić się tymi przykładami, czyli np. jak powinien wyglądać input, jak może wyglądać output i potem zadać sobie pytanie, czy jesteśmy w stanie zrobić z tego bardzo prostą i płaską tabelkę (czyli np. taki Excel, gdzie w wierszach mamy poszczególne nasze obiekty, które będziemy prognozować, a w kolumnach mamy opisy tych obiektów). Jeżeli się da, to prawdopodobnie uczenie nadzorowane to jest to, co chcemy wykorzystać.
Jeżeli nie, to trzeba będzie zastanowić się nad innym rozwiązaniem, ale w większości przypadków w tej chwili to jest najczęstsza metoda.
Grzegorz nam uściślił. On ma pewną instalację (wodociągi), która do budowy wymaga konkretnych elementów, części prostych kolanek. Jego celem jest dobranie najtańszego zbioru elementów do wykonania instalacji. Zróbmy ćwiczenie: inputem jest stan magazynowy wraz z cenami, sieć, którą trzeba wykonać, a outputem jest najtańszy zbiór elementów. Czy w Twoim wypadku można zastosować podejście, o którym mówiłeś?
W tym przypadku widać już od razu kilka problemów do rozwiązania, bo tak naprawdę tam pojawia się stan magazynowy, czyli trzeba brać pod uwagę, czy tam to coś jest dostępne, czy nie i tutaj między innymi można dołożyć ML w taki sposób, że prognozujemy, czy to będzie dostępne.
Jeden poziom problemu to jest ten stan magazynowy. Jak układamy te rzeczy, to prawdopodobnie mamy część „a, b, c”, ale np. „b” możemy wymienić na „d”. Jeżeli wymieniamy na „d” to też musimy „c” wymienić na „f”, a czasem nie musimy, więc te powiązania też trzeba w jakiś sposób zaprezentować. To akurat nie jest już takie trywialne, byłem zaangażowany w kilka takich projektów i sprawy związane z katalogiem są dość skomplikowane.
Tutaj ML też może być pomocne, bo może posprzątać te katalogi w taki sposób, że złączy gałęzie, które są duplikatami albo w ogóle sprawdzi, czy tam nie ma jakichś anomalii. Elementem kluczowym jest, żeby ten katalog powstał, bo inaczej byłoby ciężko ruszyć dalej. Kolejna rzecz to jest cena, przy czym cena się prawdopodobnie zmienia w czasie, więc tutaj kolejna rzecz, w której może być ML to prognozowanie danej rzeczy w czasie. Później możemy też próbować te rzeczy zacząć łączyć, tylko tutaj już niekoniecznie ML, chociaż częściowo można zrobić też ML. Teraz jakbym o tym myślał, to poszedłbym w kierunku grafów, bo tak naprawdę to, co chcemy zebrać, to są jakieś elementy, które się łączą ze sobą.
Możemy sobie wizualnie obrać taki sposób, że mamy poszczególne części, które się łączą, mają relacje, czyli jest taki graf. W ten sposób możemy sobie opisać wszystkie możliwe kombinacje grafami, a potem zaprognozować najbardziej optymalne ścieżki, przy czym czasem to jest tak, że to jest kwestia tylko optymalizacji (tu nawet ML nie jest potrzebne), ale czasem może być tak, że tych ścieżek jest tak dużo, że nie da się wszystkich przeliczyć.
Wtedy bardziej chodzi o ML, żeby skrócić to poszukiwanie, żeby znaleźć te najbardziej właściwe elementy. Podobnie jak było słynne AlphaGo. Chodziło o to, że jak robisz kolejny krok to idea jest taka, że pierwsza warstwa była odpowiedzialna za to, żeby wyłapywać potencjały.
Jeżeli jest coś, co już nie ma potencjału, to po prostu należy ucinać, czyli dalej tej gałęzi nie rozwijać i nie sprawdzać, więc w tym przypadku też ML mogłoby być przydatne.
My opowiadamy tutaj o nauce, trochę zahaczamy o filozofię, a jeść trzeba i jak człowiek się czegoś uczy, czegoś chce, można w dużej części założyć, że przynajmniej trochę się zbliży do celu.
Dążę do tego, że jeśli ja zainwestuję czas, pójdę na DataWorkshop, pouczę się trochę, zapiszę się na Twój newsletter, zrobię tzw. „dupogodziny”, zacznę ogarniać temat to ja wtedy zacznę szukać pracy. Jak wygląda obecnie rynek pracy? Jakie są zarobki w tej branży? Od juniora do seniora.
Tu przy okazji oczywiście zapraszam na kursy online na DataWorkshop, one startują tylko dwa razy na rok. Teraz na jesień będzie nowa edycja.
Czy finansowo to się opłaca? Pamiętam okres, kiedy mówiło się, że jak ktoś wchodzi tylko za pieniędzmi w programowanie, to jest bez sensu. Ja też byłem w tej grupie, która tak mówiła. Mi się wydawało, że tylko osoby entuzjastyczne tutaj mają prawo być, ale potem zacząłem trochę inaczej postrzegać ten świat. Tak się złożyło, że programiści mają trochę więcej szczęścia, dlatego że świat w tej chwili za to więcej płaci, ale są inne branże, gdzie też są ciekawe rzeczy, ale tam mniej się płaci, np. dziedziny związane ze sztuką.
Jeżeli jest ktoś, kto jest w stanie ten geniusz (bo osoby, które się zajmują sztuką to geniusze, jakby w trochę innym wymiarze) zmapować na świat ML albo programowania i robią to tylko po to, żeby zarobić na to, co im bardziej się podoba (czyli malarstwo), to jest bardzo fajna motywacja. Tutaj przy okazji też chciałem wyjaśnić, że czasem jest takie złudzenie, gdzieś też zostałem skrytykowany za mówienie o zarobkach w tej branży.
Nie, to, że trzeba zarabiać, to się samo przez się rozumie. My coś robimy, po co? Po to, aby dostać jakąś gratyfikację. To jest normalne. Bezpłatnie to można dostać w twarz. Ja chciałbym po prostu uzyskać od Ciebie taką normalną informację.
Chciałem tylko sprostować pewną opinię, którą pojawia się podczas webinaru, że jeżeli ktoś wchodzi do tej branży tylko za pieniędzmi to jest słabe. Chciałbym powiedzieć, że to nie jest słabe, to jest ok.
Jeżeli chodzi o zarobki, to w związku z covidami troszkę się pozmieniało, wprowadziło się pewne zamieszanie, chociaż rynek IT generalnie rzecz biorąc jest dość stabilny.
Rynek np. w Stanach, na Zachodzie związany z ML, data science jest po prostu bardzo gorący. Przykład z życia – kiedyś rozmawiałem z jednym prawnikiem ze Stanów, przedstawiamy się, kim jesteś, ja mówię, że data scientist, a on mówi: „zazdroszczę Ci”. Ja tak pomyślałem: ciekawa rzecz – prawnik ze Stanów, zazdrości data scientiście. Potem zrozumiałem, co miał na myśli.
W Polsce, jeżeli cofniemy się kilka lat wstecz, to ten obszar dopiero się rozkręcał. Teraz coraz więcej firm już zaczyna wdrażać uczenie maszynowe i nawet te struktury korporacyjne, które potrzebują mieć czas na przemyślenia, wykazują popyt. Wystarczy sobie wejść np. na pracuj.pl, wpisać „machine learning”, „data science” i można zobaczyć, że jest popyt na osoby z takimi kwalifikacjami. Kluczowa tu jest praktyka, a nie tylko o tym mówić.
Jeżeli chodzi o stawki – junior myślę, że spokojnie tutaj od 4 000 zł, middle od 8 000 zł. Jeżeli chodzi o seniora, to nie wiem czy tutaj jest w ogóle jakikolwiek limit, ale powiem w ten sposób, że jeden z moich absolwentów, który w ogóle się nie zajmował data science, po moim kursie zaczął to robić i ostatnio jak się spotkaliśmy (minęło chyba 2 lata) to teraz ma 18 000 zł na rękę. Jeżeli potrafisz rozwiązywać problemy w taki sposób, że to daje dużo wartości, a ML akurat jest takim narzędziem, które potrafi osiągać nawet miliony, to biznes płaci.
Czy musimy coś dodać? Z mojej strony wykorzystałem tematy i wykorzystałem godzinę Twojego czasu. Coś musimy dodać na koniec?
Chciałem dodać, że chciałbym, żeby więcej osób zmotywowało się do poznania, czym jest uczenie maszynowe, ale tak w praktyce. To nawet nie chodzi o to, że Ty musisz się zajmować, bo nikt nic nie musi, ale szkoda sobie odmawiać i nie sprawdzić. Być może to jest ta rzecz, która Ci się spodoba.
To jest jedna rzecz, a druga rzecz, jeżeli Ci się spodoba i będziesz dalej się napędzać, nakręcać i robić fajne rzeczy, to coraz częściej zadawaj sobie pytanie: po co ja to robię i jakie będą skutki tego, co ja robię? Uczenie maszynowe faktycznie jest potężnym i groźnym narzędziem. Trzeba zdawać sobie sprawę, z czym się ma do czynienia i po prostu te tematy filozoficzne, które dzisiaj się pojawiały (w szczególności na początku) zadawać sobie regularnie, bo dzięki temu możemy nasz świat naprawić, ale też możemy go zepsuć totalnie.
Bardzo Ci dziękuję. Fajna rozmowa, ciekawe, zainteresowałeś mnie. Mam nadzieję, że uda się w jakiś sposób zainteresować czytelników. Bardzo Ci dziękuję Vladimirze.
Dzięki. Cześć.