MENU
Advertisement

Uczenie maszynowe: stosowane narzędzia, podejście w praktyce, zastosowania

30 czerwca 2016Architekci IT, Polecane tematy

Analityka predykcyjna, drążenie danych (data mining), sztuczna inteligencja, data science i uczenie maszynowe właśnie – to przegląd najpopularniejszych w ostatnich dwóch dekadach określeń z dziedziny zajmującej się umożliwianiem systemom komputerowym uczenie się na podstawie przykładów, bez konieczności jednoznacznego ich oprogramowywania.

robot-1169742-638x527

Gartner co roku publikuje ekstrapolowaną krzywą propagowania się technologii, wokół których jest najwięcej szumu (Gartner Hype Cycle). Wśród 10 obszarów z samego szczytu tej krzywej w 2015 r. umieścił – obok uczenia maszynowego – m.in.: zaawansowaną analitykę; autonomiczne pojazdy; automatyczne tłumaczenia z audio do audio (speech-to-speech); zautomatyzowanych, inteligentnych doradców oraz internet rzeczy. Każda z tych 5 technologii jest oparta właśnie na uczeniu maszynowym.

Przyspieszenie rozwoju uczenia maszynowego

Samo uczenie maszynowe jest jednym – i prawdopodobnie najistotniejszym – z kilku dużych obszarów sztucznej inteligencji, rozwijanej od lat 50. XX wieku. Dlaczego w ciągu ostatniej dekady w dziedzinie tej doszło do dramatycznego przyspieszenia i stworzenia wielu udanych systemów? Rozwiązania wykorzystujące uczenie maszynowe są już obecne w naszym codziennym życiu, niemalże na wyciągnięcie ręki. Profesor Pedro Domingos z Uniwersytetu Stanu Waszyngton i jeden z czołowych ekspertów w tej dziedzinie ujmuje sprawę jasno: “You may not know it, but machine learning is all around you” (http://goo.gl/HvPbQa).

Przyczyny, dla których uczenie maszynowe akurat teraz zaczyna odnosić ogromne sukcesy w nauce i biznesie, są prozaiczne. Od niedawna ludzkość ma bowiem dostęp do coraz tańszych i potężniejszych zasobów obliczeniowych oraz coraz większych zbiorów danych. W ostatniej dekadzie doszło do głębokiej współpracy wielu światowych tuzów świata uczelnianej sztucznej inteligencji z dynamicznymi graczami biznesowymi dysponującymi gigantycznymi i wciąż rosnącymi zbiorami danych, takimi jak Google, Netflix, Apple, Uber czy General Electric.

Ilości danych dostępnych do analizy, wspomagania decyzji i przewidywania zdarzeń są tak ogromne, że – jako badacze i inżynierowie danych – jesteśmy zmuszeni budować systemy, w których to częściowo same komputery piszą programy dostosowujące działanie do danego użytkownika, maszyny przemysłowej czy złożonego układu.

Ilości danych dostępnych do analizy, wspomagania decyzji i przewidywania zdarzeń są tak ogromne, że – jako badacze i inżynierowie danych – jesteśmy zmuszeni budować systemy, w których to częściowo same komputery piszą programy dostosowujące działanie do danego użytkownika, maszyny przemysłowej czy złożonego układu. Wyobraźmy sobie np. zautomatyzowany system zarządzania światłami drogowymi w dużym mieście. Jest to układ tak złożony, że żaden zespół programistów i analityków nie będzie w stanie napisać zestawu efektywnych sztywnych reguł tak rządzących zachowaniem się świateł na skrzyżowaniach, aby ruch w mieście odbywał się jak najpłynniej.

Szansę stworzenia takiego częściowo inteligentnego systemu ma tylko algorytm samouczący, który – przy pomocy jego twórców i operatorów – najpierw będzie obserwował ruch w mieście, potem stworzy pierwsze zestawy reguł zarządzających światłami, a następnie będzie iteracyjnie się douczał i aktualizował, w miarę napływu nowych danych.

Jak wygląda proces budowania automatycznych, uczących się systemów?

Wyobraźmy sobie, że chcemy zbudować system wykrywania anomalii, który da nam wczesne ostrzeżenie, że ciśnienie oleju w silnikach samochodów, produkowanych i serwisowanych przez naszą firmę, zaczyna się niepokojąco obniżać. Spadające ciśnienie oleju to wczesny symptom wielu potencjalnie poważnych usterek. Aby zbudować taki automatyczny system, wpierw musimy oczujnikować silniki sensorami ciśnienia, poziomu i temperatury oleju oraz sensorami zbierającymi dane z otoczenia pojazdów. Następnie gromadzimy odpowiednie wolumeny danych eksploatacyjnych, serwisowych i środowiskowych. Są to np. warunki klimatyczne czy stopień zanieczyszczenia atmosfery wokół pojazdu. Dadzą nam one bogate, wielowymiarowe szeregi czasowe. Aplikacja będzie dobrze ekstrapolować swoje predykcje na przeróżne okoliczności, style jazdy, jeśli samochody – z których zbieramy dane wejściowe, na których trenujemy algorytm – będą jeździć w odpowiednio zróżnicowanych warunkach. Musimy więc zapewnić zbieranie danych z aut poddanych zróżnicowanym stylom jazdy, stopniom zanieczyszczenia środowiska czy o zróżnicowanym rozkładzie wieku monitorowanych silników i podzespołów.

Oprócz wypracowania doskonałych algorytmów uczenia maszynowego, to właśnie zaprojektowanie i przeprowadzenie tego przełomowego procesu rozkładu filmów na 700 tys. najdrobniejszych wymiarów pozwoliło Netflixowi ostatecznie zaproponować wysokiej jakości system rekomendacji. Z biegiem czasu, do bogatych danych o filmach i ich podobieństwach, doszły inne cenne dane zbierane w serwisie internetowym — każde kliknięcie, rozpoczęcie odtwarzania, zatrzymanie, rezygnacja z oglądania w 3 lub 25 minucie, informacje o tym, co lubią nasi znajomi przez integrację np. z Facebookiem.

Po okresie początkowego zbierania danych, agregujemy je, czyścimy, budujemy dodatkowe zmienne, dokonujemy analiz eksploracyjnych, próbując odseparować interesujący nas sygnał od szumu. Zapewnienie wysokiej jakości danych do treningu algorytmów jest kluczowe, inaczej padniemy ofiarą klasycznej bolączki wielu projektów: “śmieci na wejściu, śmieci na wyjściu”. Ze względu na fakt, że badacze wynaleźli wiele doskonałych uczących się algorytmów, dostępnych obecnie w standardowych pakietach i popularnych językach programowania, to już często nie dostęp do biblioteki algorytmów będzie kluczowym czynnikiem rozróżniającym systemy udane od mniej udanych. W dostępie do algorytmów nastąpiła bowiem w ostatnich latach ogromna demokratyzacja. Okazuje się za to, że im lepsze zmienne wybierzemy i zbudujemy na etapie modelowania, tym większą wartość dodaną naszego systemu będziemy w stanie wygenerować.

Aby zbudować model klasyfikacyjny, przewidujący czy usterka w silniku prawdopodobnie wystąpi lub prawdopodobnie nie wystąpi, kluczowe jest przeanalizowanie danych z silników, które usterce uległy, osobno od silników “zdrowych”. Następnie budujemy hipotezy i staramy się odseparować wielowymiarowy sygnał zapowiadający nadchodzącą usterkę od szumu, który w tym przypadku będzie reprezentował prawidłowo działający silnik. W kolejnym etapie, budujemy wielowymiarowy model zachowania się silnika “zdrowego” i trenujemy algorytm rozpinający w przestrzeni naszych kluczowych parametrów tzw. hiperpłaszczyznę separującą typowe odczyty zdrowe od odczytów anomalnych. W każdej chwili nasz model predykcyjny będzie przewidywał, w jakich “zdrowych” granicach naszych parametrów dany, interesujący nas silnik może się mieścić. Jeśli odczyty np. ciśnienia, temperatury oleju i temperatury otoczenia znajdą się wystarczająco daleko od przewidzianych odczytów zdrowych, system wygeneruje ostrzeżenie dla użytkownika lub centrum zarządzania flotą. Co więcej, jeśli nasz algorytm będzie sam się “dokształcał”, będzie on stale śledził najnowszą historię swoich parametrów, i tak modyfikował ustawienia, aby predykcje obarczone były jak najmniejszą szansą błędu.

Jak sprawdzić, czy stworzony algorytm uczenia maszynowego działa?

Budowa (trening) modelu predykcyjnego to nie wszystko. Musimy jeszcze zwalidować, czy nasz model rzeczywiście poprawnie przewiduje przyszłość, i to na jak najbardziej niezależnej i reprezentatywnej, testowej flocie silników. Jeśli tego nie zrobimy, nasz model będzie nieźle opisywał flotę na której został wytrenowany, ale z wysokim prawdopodobieństwem będzie źle funkcjonował na silnikach, które nie zostały użyte do budowy modelu (overfitting). Ostatnie etapy budowy takiego systemu, to implementacja algorytmu w warunkach czasu rzeczywistego oraz konieczność stałego monitoringu i utrzymywania zbioru “starzejących się” modeli. Prawie każdy stochastyczny model predykcyjny – z wyjątkiem np. modeli fizycznych opisujących podstawowe oddziaływania we wszechświecie – ulega bowiem degradacji, w miarę zmian, jakim ulegają obiekty, które opisuje. Dzieje się tak, gdy np. flota silników się starzeje i coraz mniej przypomina tę, na której system został wytrenowany.

Zdolności jazdy autonomicznych samochodów nie są explicite oprogramowywane przez człowieka w formie listy poleceń “if-then-else”. Zamiast tego, w procesie trenowania algorytmu, uczony jest on na przykładach jak rozpoznać widziane przez sensory obiekty (np. piłka vs inne auto vs człowiek na drodze). Zasady ruchu i sposoby planowania trajektorii także uczone są przez algorytm na podstawie wielkiej ilości przykładów zachowania się w ruchu ulicznym, gdy kierowcami byli ludzie.

Każdy ze wspomnianych wyżej, kluczowych etapów budowania modelu predykcyjnego może być do różnego stopnia zautomatyzowany. Przykładowo, gdy zajmujemy się selekcją zmiennych, wspomóc nas mogą np. algorytmy drzew decyzyjnych czy opracowane w ostatnich latach bags of little bootstraps. Gdy z kolei budujemy jak najefektywniejsze zmienne pochodne, pomocne w precyzyjnej predykcji, nieocenione w niektórych aplikacjach okazują się tzw. głębokie sieci neuronowe.

Proces treningu i optymalizacji algorytmu uczącego się to już rdzeń dziedziny uczenia maszynowego. Dysponujemy setkami, a prawdopodobnie nawet tysiącami algorytmów, które potrafią rozpoznać wzorce w danych wejściowych, z różną dozą precyzji, elastyczności i przejrzystości, a następnie odwzorować je do przestrzeni danych wyjściowych. Dzięki temu uczenie maszynowe używane do celów analityki predykcyjnej potrafi opisać pewne sytuacje, które prawdopodobnie będą miały miejsce w przyszłości – dla konkretnego obiektu analizy i predykcji, czyli np. konkretnego klienta banku, komory spalania konkretnego silnika lotniczego czy systemu rekomendującego, jaki film najbardziej będzie się podobał konkretnej Janinie Nowak w środowy, styczniowy wieczór.

Przykłady największych sukcesów uczenia maszynowego

1. Systemy rekomendacyjne

Wykorzystywane są one przez np. Netflix, Amazon, YouTube, LinkedIn, Allegro i wiele innych organizacji. Właściwie od momentu powstania światowej sieci WWW, ludzie zaczęli pracować nad zautomatyzowanymi systemami ułatwiającymi użytkownikom serwisów internetowych podejmowanie decyzji.

Skupmy się na przykładzie firmy Netflix, która opanowała tę domenę do perfekcji, a której system zbiera doskonałe recenzje od lat. Firma zaczęła działalność w USA jako wysyłkowa wypożyczalnia DVD, potem dynamicznie rozbudowała ofertę o strumieniowe wideo na żądanie (VOD). Zbudowany przez nią system rekomendacji filmów do obejrzenia jest jednym z jej najcenniejszych zasobów. Najpierw – jeszcze na etapie zdalnej wypożyczalni DVD – dane od strony użytkowników, którymi dysponował Netflix, bazowały głównie na ocenie filmów, której dokonali użytkownicy, oraz danych demograficznych.

Po stronie ocenianych filmów Netflix dokonał kluczowej inwestycji w uproszczeniu. Zaprojektował wielką tabelę rozkładającą każdy film na tysiące wymiarów, zatrudnił duży zespół filmoznawców, i poprosił ich o obejrzenie dziesiątek tysięcy filmów ze swoich archiwów. Obejrzane filmy uzyskały w ten sposób precyzyjny opis analityczny, który pozwolił skategoryzować bazę filmów do ponad 70 tys. mikrogatunków (stan ze stycznia 2014). Oprócz wypracowania doskonałych algorytmów uczenia maszynowego użytych do wytrenowania systemu, jakie filmy ma proponować każdemu użytkownikowi, to właśnie zaprojektowanie i przeprowadzenie tego przełomowego procesu rozkładu filmów na najdrobniejsze wymiary pozwoliło Netfliksowi ostatecznie zaproponować tak wysokiej jakości usługę. Z biegiem czasu, do bogatych danych o filmach i ich podobieństwach, doszły inne cenne dane zbierane w serwisie internetowym — każde kliknięcie, rozpoczęcie odtwarzania, zatrzymanie, rezygnacja z oglądania w 3 lub 25 minucie, informacje o tym, co lubią nasi znajomi (przez integrację np. z Facebookiem) itp.

Wyobraźmy sobie np. zautomatyzowany system zarządzania światłami drogowymi w dużym mieście. Jest to układ tak złożony, że żaden zespół programistów i analityków nie będzie w stanie napisać zestawu efektywnych sztywnych reguł tak rządzących zachowaniem się świateł na skrzyżowaniach, aby ruch w mieście odbywał się jak najpłynniej. Szansę stworzenia takiego  systemu ma tylko algorytm samouczący, który najpierw będzie obserwował ruch w mieście, potem stworzy pierwsze zestawy reguł zarządzających światłami, a następnie będzie iteracyjnie się douczał i aktualizował, w miarę napływu nowych danych.

Dzięki wszystkim tym informacjom Netflix mierzy m.in. odległości (podobieństwa) między gustami użytkowników, między mikrogatunkami oglądanych przez nich filmów, i jest w stanie zaproponować wiele dopasowanych do danego użytkownika mikrokategorii, a w niej ranking najlepiej (według algorytmu) dopasowanych do danego użytkownika filmów. Serwis przyznał w 2012 r., że 75% filmów oglądanych przez użytkowników Netfliksa pochodzi z jednego z rodzajów algorytmów rekomendacyjnych zaszytych w systemie. By dowiedzieć się więcej, zajrzyj np. do artykułu IEEE Spectrum oraz The Atlantic.

2. Autonomiczne samochody

Rozwijane są one np. przez Uniwersytety Carnegie Mellon, Stanford,  Google, Tesla Motors i inne organizacje, finansowane m.in. przez DARPA, amerykańską Agencję Zaawansowanych Projektów Badawczych w Obszarze Obronności. Autonomiczne pojazdy wykorzystują paletę nowoczesnych rozwiązań techniki i robotyki, głównie radar, lidar, GPS, odometrię, komputery pokładowe. Co dla nas kluczowe, ich zdolności autonomicznej jazdy nie są explicite oprogramowywane przez człowieka w formie listy poleceń “if-then-else”. Zamiast tego, w procesie trenowania algorytmu, uczony jest on na przykładach jak rozpoznać widziane przez sensory obiekty (np. piłka vs inne auto vs człowiek na drodze). Zasady ruchu i sposoby planowania trajektorii także uczone są przez algorytm na podstawie wielkiej ilości przykładów zachowania się w ruchu ulicznym, gdy kierowcami byli ludzie. The Atlantic w maju 2014 r. podawał, że algorytmy sterujące flotą Google Car zostały wytrenowane na bazie danych zebranych po przejechaniu 700 tys. mil, a z każdym tygodniem algorytmy uczące dysponują coraz większą masą takich danych do treningu i walidacji.

Realne osiągnięcia współczesnego uczenia maszynowego moglibyśmy wymieniać jeszcze przez wiele stron. Są wśród nich: niesamowite osiągnięcia projektu IBM Watson; analityka predykcyjna wspomagająca prawników w wygrywaniu spraw sądowych; głębokie sieci neuronowe potrafiące generować opisy zdjęć, wspomagające komputerowe rozpoznawanie mowy (np. Apple Siri), genetykę czy odkrycia leków; systemy wspomagające wykrywanie zagrożeń w sieciach komputerowych; giełdowy handel wysokich częstotliwości i wiele innych.

Ze względu na fakt, że badacze wynaleźli wiele doskonałych uczących się algorytmów, dostępnych obecnie w standardowych pakietach i popularnych językach programowania, to już często nie dostęp do biblioteki algorytmów będzie kluczowym czynnikiem rozróżniającym systemy udane od mniej udanych. Okazuje się za to, że im lepsze zmienne wybierzemy i zbudujemy na etapie modelowania, tym większą wartość dodaną naszego systemu będziemy w stanie wygenerować.

Mimo ogromnych sukcesów systemów uczenia maszynowego obserwowanych w ostatnich dekadach – oraz niewątpliwie jeszcze wielu czekających nas w przyszłości zadziwiających możliwościach tego typu systemów – nie wolno jednak ostatecznie zapomnieć o człowieku. Pomimo że to komputery używają algorytmów uczenia maszynowego do dynamicznego oprogramowywania samych siebie i aktywnego uczenia się na przykładach, to jednak człowiek jest (jak dotychczas) autorem wszystkich znanych mi typów opisanych wyżej algorytmów.

To ludzie dostosowują ogólne algorytmy do zastosowania ich w konkretnych sytuacjach. To ludzie podejmują kluczowe decyzje biznesowe, spośród tych zasugerowanych przez automatyczne systemy. To ludzie są nie tylko obiektem modelowania predykcyjnego, lecz także ich beneficjentami. I dopóki to ludzie nie stworzą silnej sztucznej inteligencji, to właśnie w ludzi musimy dalej inwestować, aby tworzyli dla nas coraz bardziej inteligentne systemy ułatwiające nam życie, pracę, podejmowanie decyzji.

Etapy budowy systemu uczenia maszynowego
  1. 1. Wpierw musimy „oczujnikować” np. silniki sensorami ciśnienia, poziomu i temperatury oleju oraz sensorami zbierającymi dane z otoczenia pojazdów.
  2. 2. Następnie gromadzimy odpowiednie wolumeny danych eksploatacyjnych, serwisowych i środowiskowych.
  3. 3. Musimy więc zapewnić zbieranie danych z aut poddanych zróżnicowanym stylom jazdy, stopniom zanieczyszczenia środowiska czy o zróżnicowanym rozkładzie wieku monitorowanych silników i podzespołów.
  4. 4. Po okresie początkowego zbierania danych, agregujemy je, czyścimy, budujemy dodatkowe zmienne, dokonujemy analiz eksploracyjnych, próbując odseparować interesujący nas sygnał od szumu.
  5. 5. Aby zbudować model klasyfikacyjny, np. przewidujący czy usterka w silniku prawdopodobnie wystąpi lub prawdopodobnie nie wystąpi, kluczowe jest przeanalizowanie danych z silników, które usterce uległy, osobno od silników “zdrowych”.
  6. 6. Następnie budujemy hipotezy i staramy się odseparować wielowymiarowy sygnał zapowiadający nadchodzącą usterkę od szumu, który w tym przypadku będzie reprezentował prawidłowo działający silnik.
  7. 7. W kolejnym etapie budujemy wielowymiarowy model zachowania się silnika “zdrowego” i trenujemy algorytm rozpinający w przestrzeni naszych kluczowych parametrów tzw. hiperpłaszczyznę separującą typowe odczyty zdrowe od odczytów anomalnych.
  8. 8. Budowa (trening) modelu predykcyjnego to nie wszystko. Musimy jeszcze zwalidować, czy nasz model rzeczywiście poprawnie przewiduje przyszłość, i to na jak najbardziej niezależnej i reprezentatywnej, testowej flocie silników. Jeśli tego nie zrobimy, nasz model będzie nieźle opisywał flotę, na której został wytrenowany, ale z wysokim prawdopodobieństwem będzie źle funkcjonował na silnikach, które nie zostały użyte do budowy modelu (overfitting).
  9. 9. Ostatnie etapy budowy takiego systemu, to implementacja algorytmu w warunkach czasu rzeczywistego oraz konieczność stałego monitoringu i utrzymywania zbioru “starzejących się” modeli.

Przygotowując artykuł, korzystałem m.in. z następujących publikacji: IEEE Spectrum, blog Netfliksa, The Atlantic, Driverless Future oraz książek wspomnianych poniżej. By dowiedzieć się więcej, zajrzyj m.in. do:

  1. 1. “The Master Algorithm: How the Quest for the Ultimate Learning Machine Will Remake Our World”, Pedro Domingos (Basic Books, 2015)
  2. 2. “Doing Data Science: Straight Talk from the Frontline”, Rachel Schutt, Cathy O’Neil (O’Reilly Media, 2013)
  3. 3. “The Signal and the Noise: Why So Many Predictions Fail — but Some Don’t”, Nate Silver (Penguin Books, 2015)
  4. 4. “Data Mining: Practical Machine Learning Tools and Techniques”, Ian H. Witten, Eibe Frank, Mark A. Hall (Morgan Kaufmann, 2011)
  5. 5. “Data Mining: The Textbook”, Charu C. Aggarwal (Springer, 2015)
  6. 6. “Practical Machine Learning: A New Look at Anomaly Detection”, Ted Dunning, Ellen Friedman (O’Reilly Media, 2014)

Michał Własenko jest badaczem danych (data scientist) i inżynierem analityki w Engineering Design Center w Warszawie, w którym zajmuje się badaniem i modelowaniem danych oraz projektowaniem algorytmów w celu wykrywania usterek, anomalii i prognostyki lokomotyw General Electric. W poprzednich zawodowych wcieleniach zrobił doktorat z fizyki cząstek elementarnych, kiedy to badał strukturę protonu, używając „wielkich danych” na Uniwersytecie w Bonn, oraz poszukiwał ciemnej materii na Uniwersytecie Harvarda.

Podobne tematy:

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

« »

Zapisz się na nasz newsletter - otrzymasz 2 raporty

Ponad 50-cio stronicowe wydania w wersji PDF:

1. "Biznes In-memory"
2. "Cloud Computing:
      Aplikacje i Infrastruktura"

Wyślemy do Ciebie maksymalnie 4 wiadomości w miesiącu.

Dziękujemy

Na podany e-mail wysłaliśmy link z prośbą o weryfikację
adresu. Po kliknięciu w link otrzymasz dostęp do raportów.