Czy kojarzycie film pod tytułem Blade Runner 2049? Jest to sequel filmu z roku 1982 o tym samym tytule (pozbawionym jedynie roku), opartego na tekście napisanym przez Philip’a Kindreda Dick’a „Czy Androidy śnią o elektrycznych owcach?”. Książka, której głównym bohaterem jest Rick Decard (zawodowy łowca Androidów), opowiada o problematyce koegzystencji ludzi oraz inteligentnych maszyn, androidów. Mimo iż w roku 1968 uczące się maszyny były jedynie sennym marzeniem naukowców, to autorowi udaje się doskonale oddać ideę tego jakie problemy może powodować powstanie inteligentnych maszyn, które są w stanie doskonale imitować ludzkie odruchy. Jedną z rzeczy, która dotychczas daje ludziom przewagę nad maszynami, jest zdolność do szybkiego uczenia się – jeden z moich ulubionych wykładowców zawsze zresztą powtarzał, iż maszyna jest co najwyżej tak inteligentna jak osoba, która z niej korzysta.

Ale czy aby na pewno maszyny nie są w stanie się uczyć?

Dosyć popularnym terminem w ostatnich kilku latach jest uczenie maszynowe, już w 2016 roku specjaliści z Doliny Krzemowej uważali, iż będzie to „the next big thing” (kolejny duży przełom) w dziedzinie technologii informacyjnych. Co więc powinniśmy wiedzieć na ten temat? Postaram się Wam w krótki i w miarę przejrzysty sposób wytłumaczyć czym jest, gdzie jest wykorzystywane oraz jak rozpocząć swoją przygodę z uczeniem maszynowym.

Zacznijmy od samych podstaw – czym jest uczenie maszynowe? Sięgając po najbardziej dostępne źródło wiedzy jakim jest Wikipedia dowiadujemy się, iż uczenie maszynowe jest to zdolność komputera do uczenia się bez potrzeby dodatkowego programowania. Jest to część znacznie szerszego pojęcia jakim jest sztuczna inteligencja, a przy okazji szersze pojęcie niż głębokie uczenie się. Sama koncepcja uczenia maszynowego nie jest nowa – pojęcie to powstało już w roku 1959, wymyślone przez Arthura Samuela.

 

Rys.  1 Schemat przedstawiający dziedziny sztucznej inteligencji.

Przyczyn nagłego wzrostu zainteresowania tematem należy poszukiwać w jednym ze znamion naszych czasów – generacji ogromnej ilości danych, które chcemy poddawać analizie. Szacuje się, iż do 2020 roku ludzkość wytworzy razem 44 Zetabajty danych. Jaka to liczba? Jest to 44 razy 1021  bajtów danych. Jeżeli za każdy bajt zapisalibyśmy jeden znak, a następnie wydrukowali to na kartach a4 (1800 znaków na stronę) i ułożyli z nich stosy, to moglibyśmy ułożyć 246 stosów które sięgałyby z powierzchni ziemi aż do słońca. Oprócz tego do rozwoju tej dziedziny przyłożył się również szybki rozwój technologii komputerowej i znaczne tańsze koszty magazynowania danych. Widzimy więc że jeżeli chcielibyśmy analizować te wszystkie dane manualnie – nie mielibyśmy szans wykonać tego nawet w ciągu najbliższych stu lat. Zasadniczo uczenie maszynowe można podzielić na trzy najszersze kategorie:

  • Uczenie nadzorowane (Supervised learning), w którym nasz algorytm dostaje od nas pewien zestaw danych wraz z oczekiwanymi wynikami. Przykładem mogą być chociażby dane które zawierają ceny wynajmu mieszkań w danym mieście. Do algorytmu przekazujemy zmienne wejściowe (metraż, położenie od centrum, standard) oraz wyjściowe (cena), oczekując, że algorytm znajdzie najlepszy możliwy sposób przewidywania cen dla przyszłych danych wejściowych.

 

Rys.  2 Schemat nauki nadzorowanej.

  • Uczenie nienadzorowane (Unsupervisied learning), w tym przypadku algorytm dostaje od nas dane i ma za zadanie sklasyfikować te dane (np. pokazać nam jaka jest struktura tych danych). Jako przykład można wziąć znajdowanie powiązań socjalnych pomiędzy ludźmi. Algorytm może przeanalizować podane mu dane (przykładowo częstotliwość wysyłanych wiadomości oraz ich treść) aby sklasyfikować dane osoby w kręgi znajomych (i znaleźć powiązania pomiędzy kręgami znajomych).

Rys.  3 Schemat uczenia nienadzorowanego.

  • Uczenie wspomagane (Reinforced Learning), ten algorytm służy do uczenia programu jak wchodzić w interakcję z dynamicznym środowiskiem. Na samym początku zostaje wyznaczony cel do osiągnięcia (np. wygrana w grę) a następnie jego wykonanie zostaje oceniane na zasadzie nagród oraz kar. Dobrym przykładem jest tutaj nauka gry w Super Mario (więcej na ten temat można poczytać na blogu Ehren’a J. Brav pod tym adresem: http://www.ehrenbrav.com/2016/08/teaching-your-computer-to-play-super-mario-bros-a-fork-of-the-google-deepmind-atari-machine-learning-project/) gdzie autor tego algorytmu wyznaczał komputerowi nagrody oraz kary za wykonywanie określonych czynności. Celem programu było dotarcie do końca poziomu w jak najkrótszym czasie i z jak największym wynikiem (był to „motywator”). Rezultaty można zobaczyć na wymienionym wyżej blogu.

Skoro już znamy podstawy uczenia maszynowego to pewnie zadacie sobie pytanie – do czego tak właściwie jest to nam potrzebne? Gdzie w dzisiejszym świecie są wykorzystywane tego typu algorytmy? Lista zastosowań jest całkiem spora, gdyż z praktycznym wykorzystaniem ML mamy do czynienia na co dzień, nawet nie zdając sobie z tego sprawy. Przykładowo rozpoznawanie twarzy na portalu społecznościowym Facebook. Być może czasami zastanawiałeś się w jaki sposób Facebook wie kogo oznaczyć na danym zdjęciu – działa tutaj właśnie algorytm nazwany „DeepFace”. Twórcy twierdzą że program jest w stanie rozpoznawać osoby na zdjęciu z dokładnością aż 97,25%(!) podczas gdy człowiek jest lepszy od niego jedynie o włos (97,53%). Algorytm ten wykorzystuje mechanizm głębokiego uczenia się (Deep Learning), który ma odzwierciedlać ogólną zasadę działania ludzkiego mózgu. Kolejnym wykorzystaniem uczenia maszynowego jest rozpoznawanie głosowe, dostępne na co dzień w naszych telefonach komórkowych. Praktycznie każdy smartfon posiada teraz funkcje „voice to text” (głos na tekst), dzięki której możemy wpisywać wiadomości do naszego smartfona za pomocą naszego głosu. Algorytm rozbija nasz głos na konkretne fonemy (w języku angielskim jest ich 44) a następnie stara się je analizować, aby stwierdzić co tak naprawdę chcesz powiedzieć. Dodatkowo często w takim oprogramowaniu wykorzystywane są dodatkowe „słowniki”, dzięki którym program jest w stanie stwierdzić czy to co zrozumiał za pierwszym razem ma sens. Przykładem może być niewyraźnie wypowiedziane zdanie „Jem kanapkę z serem”. Zdanie to po rozłożeniu na fonemy może zostać zrozumiane jako „Jem kanapkę z Cerem”, aczkolwiek jako że takie zdanie prawdopodobnie nigdy nie padło z niczyich ust, algorytm automatycznie łączy „kanapkę z” ze słowem „serem”. Następnym przykładem mogą być również próby nauczenia naszego algorytmu poruszania się w różnych środowiskach (pod tym adresem możecie zobaczyć filmik, w którym algorytm DeepMind uczy się poruszać w trójwymiarowej przestrzeni przy pomocy wstępnie zdefiniowanych kończyn https://www.youtube.com/watch?v=faDKMMwOS2Q). Tutaj podobnie jak w przykładzie podanym powyżej przy uczeniu wspomaganym stosowane są algorytmy uczenia wspomaganego.

Rys.  4 Schemat działania algorytmu DeepFace (źródło: https://www.cv-foundation.org/openaccess/content_cvpr_2014/papers/Taigman_DeepFace_Closing_the_2014_CVPR_paper.pdf)

Gdzie więc w takim razie można spróbować nauczyć się czegoś na ten temat? Internet obfituje w różnego rodzaju kursy oraz poradniki nauki uczenia maszynowego. Pierwszym kursem, który mogę szczerze polecić jest kurs ze strony www.coursera.org zatytułowany „Machine Learning”. Kurs jest w 100% darmowy, przedstawiony w przystępny sposób, z możliwością zdobycia certyfikatu ukończenia. Ponadto portal ten posiada również aplikację na telefon, dzięki czemu spokojnie możemy uczyć się nowych umiejętności będąc w pociągu bądź Autobusie. Kolejny darmowy kurs oferowany jest również przez Stanford (http://online.stanford.edu) o tytule „Statistical learning”. Uczenie maszynowe oraz statystyczne posiadają pewne różnice, aczkolwiek w dużej mierze wiedza z obydwu kursów pokrywa się, tworząc spójną całość. Stroną, na której również zajdziecie masę kursów na temat uczenia maszynowego jest Udemy.com – sam z niej korzystam :). Przed podjęciem jakiegokolwiek kursu warto jednak mieć jakiekolwiek podstawy z programowania w języku Python bądź R. W uczeniu maszynowym wykorzystywane są praktycznie wszystkie języki programowania (Java, C++) ale dwiema największymi gwiazdami są w tym momencie właśnie te dwa wymienione powyżej języki (dzięki dostosowaniu do pracy z bibliotekami obsługującymi liczne matematyczne funkcje potrzebne do uczenia maszynowego).

Czy warto uczyć się tej tematyki? W mojej opinii tak – już teraz na świecie stanowisko „Data Scientist” bardzo szybko zdobywa na popularności. Wraz z popularnością idą również wysokie pensje – mediana zarobków osób na stanowisku Inżyniera do spraw uczenia maszynowego wynosi około 105 tys. Dolarów rocznie. Dla porównania zarobki Java Developerów wynoszą 85 tys. Dolarów, zaś dla specjalistów od spraw obsługi baz danych wynoszą one 80 tys. Dolarów. Warto również mieć na uwadze, że jest to dziedzina stosunkowo młoda i szybko rozwijająca się, wraz z coraz większą ilością danych pojawiających się na świecie – a więc w przyszłości możemy być praktycznie pewni tego, iż specjaliści z tej dziedziny będą jednymi z najbardziej poszukiwanych pracowników na świecie.

A co Wy sądzicie? Warto/ czy nie warto zgłębiać wiedzę z dziedziny Machine Learning? – Jak zwykle zapraszamy do dyskusji:)

Marek Makuch

IT-Leaders.pl to pierwsza na rynku platforma łącząca Specjalistów IT bezpośrednio z pracodawcami. Anonimowy, techniczny profil i konkretnie określone oczekiwania finansowe to tylko niektóre z cech wyróżniających platformę. Zarejestruj się i zobacz jak Cię widzi pracodawca.