Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00204 003788 18767788 na godz. na dobę w sumie
Uczenie maszynowe z użyciem Scikit-Learn i TensorFlow - książka
Uczenie maszynowe z użyciem Scikit-Learn i TensorFlow - książka
Autor: Liczba stron: 528
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-4373-3 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> techniki programowania
Porównaj ceny (książka, ebook, audiobook).

Pojęcia, techniki i narzędzia służące do tworzenia systemów inteligentnych

W ciągu ostatnich lat uczenie maszynowe stało się sercem wielu nowoczesnych produktów, takich jak zaawansowane techniki wyszukiwania w przeglądarkach, rozpoznawanie mowy w smartfonach czy proponowanie treści w zależności od indywidualnych preferencji użytkownika. Być może niedługo taki system inteligentny zastąpi Cię za kierownicą samochodu. Uczenie głębokie wprowadziło nową jakość do uczenia maszynowego. Daje niesamowite możliwości, jednak wymaga olbrzymiej mocy obliczeniowej i potężnych ilości danych. Programiści implementujący takie rozwiązania są poszukiwanymi specjalistami i mogą liczyć na ekscytujące oferty!

Ta książka jest praktycznym podręcznikiem tworzenia systemów inteligentnych. Przedstawiono tu najważniejsze zagadnienia teoretyczne dotyczące uczenia maszynowego i sieci neuronowych. W zrozumiały sposób zaprezentowano koncepcje i narzędzia służące do tworzenia systemów inteligentnych. Opisano Scikit-Learn i TensorFlow - środowiska produkcyjne języka Python - i pokazano krok po kroku, w jaki sposób wykorzystuje się je do implementacji sieci neuronowych. Liczne praktyczne przykłady i ćwiczenia pozwolą na pogłębienie i utrwalenie zdobytej wiedzy. Jeśli tylko potrafisz posługiwać się Pythonem, dzięki tej przystępnie napisanej książce szybko zaczniesz implementować systemy inteligentne.

W tej książce między innymi:

Już dziś zacznij tworzyć systemy inteligentne!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Hands-On Machine Learning with Scikit-Learn and TensorFlow Tłumaczenie: Krzysztof Sawka ISBN: 978-83-283-4373-3 © 2018 Helion S.A. Authorized Polish translation of the English edition of Hands-On Machine Learning with Scikit-Learn and TensorFlow ISBN 9781491962299 © 2017 Aurélien Géron This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/uczema Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treści Przedmowa .............................................................................................................. 13 Część I. Podstawy uczenia maszynowego 21 Uczenie nadzorowane/nienadzorowane Uczenie wsadowe/przyrostowe Uczenie z przykładów/z modelu Główne problemy uczenia maszynowego Czym jest uczenie maszynowe? Dlaczego warto korzystać z uczenia maszynowego? Rodzaje systemów uczenia maszynowego 1. Krajobraz uczenia maszynowego ............................................................................... 23 24 24 27 28 34 37 42 42 43 45 45 45 47 48 48 50 Niedobór danych uczących Niereprezentatywne dane uczące Dane kiepskiej jakości Nieistotne cechy Przetrenowanie danych uczących Niedotrenowanie danych uczących Podsumowanie Testowanie i ocenianie Ćwiczenia Praca z rzeczywistymi danymi Przeanalizuj całokształt projektu 2. Nasz pierwszy projekt uczenia maszynowego ............................................................. 53 53 55 55 57 59 Określ zakres problemu Wybierz metrykę wydajności Sprawdź założenia 3 Poleć książkęKup książkę Zdobądź dane Stwórz przestrzeń roboczą Pobierz dane Rzut oka na strukturę danych Stwórz zbiór testowy Odkrywaj i wizualizuj dane, aby zdobywać nowe informacje Wizualizowanie danych geograficznych Poszukiwanie korelacji Eksperymentowanie z kombinacjami atrybutów Przygotuj dane pod algorytmy uczenia maszynowego Oczyszczanie danych Obsługa tekstu i atrybutów kategorialnych Niestandardowe transformatory Skalowanie cech Potoki transformujące Wybór i uczenie modelu Trenowanie i ocena modelu za pomocą zbioru uczącego Dokładniejsze ocenianie za pomocą sprawdzianu krzyżowego Wyreguluj swój model Metoda przeszukiwania siatki Metoda losowego przeszukiwania Metody zespołowe Analizuj najlepsze modele i ich błędy Oceń system za pomocą zbioru testowego Uruchom, monitoruj i utrzymuj swój system Teraz Twoja kolej! Ćwiczenia 59 59 62 63 67 71 71 73 76 77 78 80 81 82 83 85 85 86 88 88 90 91 91 92 92 93 94 Zbiór danych MNIST Uczenie klasyfikatora binarnego Miary wydajności 3. Klasyfikacja ............................................................................................................... 95 95 97 98 98 100 101 102 106 108 111 114 115 117 Pomiar dokładności za pomocą sprawdzianu krzyżowego Macierz pomyłek Precyzja i pełność Kompromis pomiędzy precyzją a pełnością Wykres krzywej ROC Klasyfikacja wieloklasowa Analiza błędów Klasyfikacja wieloetykietowa Klasyfikacja wielowyjściowa Ćwiczenia 4  Spis treści Poleć książkęKup książkę Regresja liniowa Gradient prosty Równanie normalne Złożoność obliczeniowa Regresja wielomianowa Krzywe uczenia Regularyzowane modele liniowe Wsadowy gradient prosty Stochastyczny spadek wzdłuż gradientu Schodzenie po gradiencie z minigrupami 4. Uczenie modeli ........................................................................................................119 120 121 123 124 127 130 132 133 135 139 139 141 143 144 145 146 146 148 150 153 Szacowanie prawdopodobieństwa Funkcje ucząca i kosztu Granice decyzyjne Regresja softmax Regresja grzbietowa Regresja metodą LASSO Metoda elastycznej siatki Wczesne zatrzymywanie Regresja logistyczna Ćwiczenia Liniowa klasyfikacja SVM Nieliniowa klasyfikacja SVM Klasyfikacja miękkiego marginesu Jądro wielomianowe Dodawanie cech podobieństwa Gaussowskie jądro RBF Złożoność obliczeniowa 5. Maszyny wektorów nośnych .....................................................................................155 155 156 158 159 160 161 163 163 165 165 166 168 169 170 172 173 Funkcja decyzyjna i prognozy Cel uczenia Programowanie kwadratowe Problem dualny Kernelizowane maszyny SVM Przyrostowe maszyny SVM Regresja SVM Mechanizm działania Ćwiczenia Spis treści  5 Poleć książkęKup książkę 6. Drzewa decyzyjne ................................................................................................... 175 175 176 178 179 180 180 181 182 184 185 Uczenie i wizualizowanie drzewa decyzyjnego Wyliczanie prognoz Szacowanie prawdopodobieństw przynależności do klas Algorytm uczący CART Złożoność obliczeniowa Wskaźnik Giniego czy entropia? Hiperparametry regularyzacyjne Regresja Niestabilność Ćwiczenia Klasyfikatory głosujące Agregacja i wklejanie Rejony losowe i podprzestrzenie losowe Losowe lasy Agregacja i wklejanie w module Scikit-Learn Ocena OOB 7. Uczenie zespołowe i losowe lasy .............................................................................. 187 187 190 191 192 194 194 195 195 197 197 200 204 207 Wzmacnianie AdaBoost Wzmacnianie gradientowe Zespół Extra-Trees Istotność cech Kontaminacja Ćwiczenia Analiza PCA Rzutowanie Uczenie rozmaitościowe Klątwa wymiarowości Główne strategie redukcji wymiarowości 8. Redukcja wymiarowości .......................................................................................... 209 210 211 211 213 215 215 215 217 217 217 218 219 220 220 Zachowanie wariancji Główne składowe Rzutowanie na d wymiarów Implementacja w module Scikit-Learn Współczynnik wariancji wyjaśnionej Wybór właściwej liczby wymiarów Algorytm PCA w zastosowaniach kompresji Przyrostowa analiza PCA Losowa analiza PCA 6  Spis treści Poleć książkęKup książkę Jądrowa analiza PCA Wybór jądra i strojenie hiperparametrów Algorytm LLE Inne techniki redukowania wymiarowości Ćwiczenia Część II. Sieci neuronowe i uczenie głębokie 221 221 224 225 226 229 9. Instalacja i używanie modułu TensorFlow .................................................................231 234 Instalacja 234 Tworzenie pierwszego grafu i uruchamianie go w sesji 236 Zarządzanie grafami Cykl życia wartości w węźle 236 237 Regresja liniowa przy użyciu modułu TensorFlow 238 Implementacja metody gradientu prostego 238 239 240 241 242 243 246 247 250 253 Dostarczanie danych algorytmowi uczącemu Zapisywanie i wczytywanie modeli Wizualizowanie grafu i krzywych uczenia za pomocą modułu TensorBoard Zakresy nazw Modułowość Udostępnianie zmiennych Ćwiczenia Ręczne obliczanie gradientów Automatyczne różniczkowanie Korzystanie z optymalizatora Od biologicznych do sztucznych neuronów Uczenie sieci MLP za pomocą zaawansowanego interfejsu API modułu TensorFlow Uczenie głębokiej sieci neuronowej za pomocą standardowego interfejsu TensorFlow Neurony biologiczne Operacje logiczne przy użyciu neuronów Perceptron Perceptron wielowarstwowy i propagacja wsteczna 10. Wprowadzenie do sztucznych sieci neuronowych ......................................................255 255 256 257 259 262 265 266 266 270 271 271 271 272 273 273 Faza konstrukcyjna Faza wykonawcza Korzystanie z sieci neuronowej Strojenie hiperparametrów sieci neuronowej Liczba ukrytych warstw Liczba neuronów tworzących warstwę ukrytą Funkcje aktywacji Ćwiczenia Spis treści  7 Poleć książkęKup książkę Problemy zanikających/eksplodujących gradientów Wielokrotne stosowanie gotowych warstw Szybsze optymalizatory Inicjacje wag Xaviera i He Nienasycające funkcje aktywacji Normalizacja wsadowa Obcinanie gradientu Wielokrotne stosowanie modelu TensorFlow Wykorzystywanie modeli utworzonych w innych środowiskach Zamrażanie niższych warstw Zapamiętywanie warstw ukrytych Modyfikowanie, usuwanie lub zastępowanie górnych warstw Repozytoria modeli Nienadzorowane uczenie wstępne Uczenie wstępne za pomocą dodatkowego zadania 11. Uczenie głębokich sieci neuronowych ...................................................................... 275 275 276 278 281 285 286 287 288 289 290 291 291 291 293 293 294 295 296 298 298 300 302 302 303 304 306 308 309 310 Optymalizacja momentum Przyśpieszony spadek wzdłuż gradientu (algorytm Nesterova) AdaGrad RMSProp Optymalizacja Adam Harmonogramowanie współczynnika uczenia Wczesne zatrzymywanie Regularyzacja ℓ1 i ℓ2 Porzucanie Regularyzacja typu max-norm Dogenerowanie danych Regularyzacja jako sposób unikania przetrenowania Praktyczne wskazówki Ćwiczenia Wiele urządzeń na jednym komputerze 12. Rozdzielanie operacji TensorFlow pomiędzy urządzenia i serwery ............................. 313 314 314 316 318 321 322 323 324 325 Instalacja Zarządzanie pamięcią operacyjną karty graficznej Umieszczanie operacji na urządzeniach Przetwarzanie równoległe Zależności sterujące Otwieranie sesji Usługi nadrzędna i robocza Wiele urządzeń na wielu serwerach 8  Spis treści Poleć książkęKup książkę Przypinanie operacji w wielu zadaniach Rozdzielanie zmiennych pomiędzy wiele serwerów parametrów Udostępnianie stanu rozproszonych sesji za pomocą kontenerów zasobów Komunikacja asynchroniczna za pomocą kolejek Wczytywanie danych bezpośrednio z grafu Przetwarzanie równoległe sieci neuronowych w klastrze TensorFlow Jedna sieć neuronowa na każde urządzenie Replikacja wewnątrzgrafowa i międzygrafowa Zrównoleglanie modelu Zrównoleglanie danych Ćwiczenia 325 326 327 328 333 339 339 341 343 345 349 Architektura kory wzrokowej Warstwa splotowa Filtry Stosy map cech Implementacja w module TensorFlow Zużycie pamięci operacyjnej 13. Splotowe sieci neuronowe ........................................................................................351 352 353 354 356 357 359 360 362 362 364 366 369 373 Warstwa łącząca Architektury splotowych sieci neuronowych LeNet-5 AlexNet GoogLeNet ResNet Ćwiczenia Podstawowe sieci RSN w module TensorFlow Neurony rekurencyjne Komórki pamięci Sekwencje wejść i wyjść 14. Rekurencyjne sieci neuronowe .................................................................................377 378 380 380 381 382 384 385 386 386 387 389 392 Statyczne rozwijanie w czasie Dynamiczne rozwijanie w czasie Obsługa sekwencji wejściowych o zmiennej długości Obsługa sekwencji wyjściowych o zmiennej długości Uczenie klasyfikatora sekwencji Uczenie w celu przewidywania szeregów czasowych Twórcza sieć rekurencyjna Uczenie rekurencyjnych sieci neuronowych Spis treści  9 Poleć książkęKup książkę Głębokie sieci rekurencyjne Rozmieszczanie głębokiej sieci rekurencyjnej pomiędzy wiele kart graficznych Wprowadzanie metody porzucania Problem uczenia w sieciach wielotaktowych Komórka LSTM Połączenia przezierne Komórka GRU Przetwarzanie języka naturalnego Reprezentacje wektorowe słów Sieć typu koder-dekoder służąca do tłumaczenia maszynowego Ćwiczenia 393 394 395 396 397 400 400 401 402 403 406 Efektywne reprezentacje danych Analiza PCA za pomocą niedopełnionego autokodera liniowego Autokodery stosowe Implementacja w module TensorFlow Wiązanie wag Uczenie autokoderów pojedynczo Wizualizacja rekonstrukcji Wizualizowanie cech 15. Autokodery ............................................................................................................. 407 407 409 410 411 412 413 415 416 417 419 420 420 422 423 426 427 427 Nienadzorowane uczenie wstępne za pomocą autokoderów stosowych Autokodery odszumiające Autokodery wariacyjne Generowanie cyfr Inne autokodery Ćwiczenia Implementacja w module TensorFlow Autokodery rzadkie Implementacja w module TensorFlow 16. Uczenie przez wzmacnianie ..................................................................................... 431 432 433 435 438 440 441 446 Uczenie się optymalizowania nagród Wyszukiwanie polityki Wprowadzenie do narzędzia OpenAI gym Sieci neuronowe jako polityki Ocenianie czynności — problem przypisania zasługi Gradienty polityk Procesy decyzyjne Markowa 10  Spis treści Poleć książkęKup książkę Uczenie metodą różnic czasowych i algorytm Q-uczenia Polityki poszukiwania Przybliżający algorytm Q-uczenia Nauka gry w Ms. Pac-Man za pomocą głębokiego Q-uczenia Ćwiczenia Dziękuję! Dodatki 449 451 451 452 459 460 461 A Rozwiązania ćwiczeń ................................................................................................463 B Lista kontrolna projektu uczenia maszynowego ........................................................487 C Problem dualny w maszynach wektorów nośnych .....................................................493 D Różniczkowanie automatyczne .................................................................................497 Skorowidz ................................................................................................................513 Spis treści  11 Poleć książkęKup książkę 12  Spis treści Poleć książkęKup książkę ROZDZIAŁ 1. Krajobraz uczenia maszynowego Większość osób, słysząc o uczeniu maszynowym, wyobraża sobie robota: jedni myślą o posłusznym kamerdynerze, inni o zabójczym Terminatorze. Zjawisko to jednak nie stanowi futurystycznej fantazji, lecz jest już elementem współczesnego świata. W rzeczywistości istnieje już od dziesiątek lat w pewnych wyspecjalizowanych zastosowaniach, takich jak techniki optycznego rozpoznawania znaków (ang. Optical Character Recognition — OCR). Jednak techniki uczenia maszynowego trafiły pod strzechy, poprawiając komfort życia milionów osób, dopiero w latach dziewięćdziesiątych — w postaci filtrów spamu. Niekoniecznie przypominają one Skynet1, ale pod względem technicznym są klasyfikowane jako aplikacje wykorzystujące uczenie maszynowe (istotnie, filtry te uczą się tak skutecznie, że bardzo rzadko musisz własnoręcznie oznaczać wiadomości jako spam). W następnych latach nastąpił wysyp różnych innych zastosowań uczenia maszynowego, stanowiących trzon wielu aplikacji i usług, z których korzystamy na co dzień, począwszy od polecanych produktów aż do wyszukiwania głosowego. Gdzie się zaczyna i kończy uczenie maszynowe? Co to właściwie oznacza, że dana maszyna uczy się określonego zagadnienia? Czy jeśli pobiorę na dysk artykuł z Wikipedii, to mój komputer „na- uczył się” jego treści? Czy stał się nagle mądrzejszy? W tym rozdziale wyjaśnię, co uznajemy za uczenie maszynowe oraz dlaczego ta dziedzina może Cię zainteresować. Następnie, zanim wyruszymy na wyprawę w głąb kontynentu Uczenia Maszynowego, zerkniemy na mapę i przyjrzymy się jego najważniejszym regionom oraz punktom orientacyjnym: porównamy uczenie nadzorowane z nienadzorowanym, przyrostowe ze wsadowym, a także metody uczenia z przykładów z metodami uczenia z modelu. Następnie przeanalizujemy cykl tworzenia typowego projektu uczenia maszynowego, zastanowimy się nad głównymi wyzwaniami, jakim należy stawić czoło, a także przeanalizujemy sposoby oceny i strojenia szybkości modelu. W niniejszym rozdziale wprowadzam wiele podstawowych pojęć (i terminów), które musi znać każdy szanujący się analityk danych. Informacje tu zawarte są bardzo ogólne (jest to jedyny rozdział pozbawiony listingów kodu) i raczej nieskomplikowane, zanim jednak przejdziesz do następnego rozdziału, upewnij się, że doskonale je rozumiesz. Zatem kawa w dłoń i do dzieła! 1 Samoświadoma sztuczna inteligencja dążąca do zniszczenia ludzkości, istniejąca w serii filmów Terminator — przyp. tłum. 23 Poleć książkęKup książkę Jeśli znasz już podstawy uczenia maszynowego, możesz przejść od razu do rozdziału 2. Jeżeli jednak nie masz pewności, spróbuj najpierw odpowiedzieć na wszystkie pytania umieszczone na końcu rozdziału. Czym jest uczenie maszynowe? Uczeniem maszynowym nazywamy dziedzinę nauki (i sztukę) programowania komputerów w sposób umożliwiający im uczenie się z danych. Poniżej przedstawiam nieco ogólniejszą definicję: [Uczenie maszynowe to] dziedzina nauki dająca komputerom możliwość uczenia się bez konieczności ich jawnego programowania. — Arthur Samuel, 1959 A tu bardziej techniczna: Mówimy, że program komputerowy uczy się na podstawie doświadczenia E w odniesieniu do jakiegoś zadania T i pewnej miary wydajności P, jeśli jego wydajność (mierzona przez P) wobec zadania T wzrasta wraz z nabywaniem doświadczenia E. — Tom Mitchell, 1997 Na przykład filtr spamu jest programem wykorzystującym algorytmy uczenia maszynowego do rozpoznawania spamu na podstawie przykładowych wiadomości e-mail (tj. spamu oznaczonego przez użytkowników oraz zwykłych wiadomości niebędących spamem, znanych jako „ham”2). Przykładowe dane używane do trenowania systemu noszą nazwę zbioru/zestawu uczącego (ang. training set). Każdy taki element uczący jest nazywany przykładem uczącym (próbką uczącą). Zgodnie z powyższą definicją naszym zadaniem T jest tu oznaczanie spamu, doświadczeniem E — dane uczące; pozostaje nam wyznaczyć miarę wydajności P. Może być nią, na przykład, stosunek prawidłowo oznaczonych wiadomości do przykładów nieprawidłowo sklasyfikowanych. Ta konkretna miara wydajności jest nazywana dokładnością (ang. accuracy) i znajduje często zastosowanie w zadaniach klasyfikujących. Nawet jeśli pobierzesz całą Wikipedię na dysk, Twój komputer będzie przechowywał mnóstwo infor- macji, ale nie wykorzysta ich w żaden sposób. Dlatego nie uznajemy tego za uczenie maszynowe. Dlaczego warto korzystać z uczenia maszynowego? Załóżmy, że chcemy napisać filtr spamu za pomocą tradycyjnych technik programistycznych (rysunek 1.1): 2 Angielska nazwa niechcianych wiadomości pocztowych — „spam” (mielonka) — została zapożyczona ze słynnego skeczu grupy Monty Python pt. „Spam”. Nazwa standardowych wiadomości („ham”) oznacza w dosłownym tłumacze- niu szynkę — przyp. tłum. 24  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę Rysunek 1.1. Tradycyjne podejście 1. Najpierw musielibyśmy zastanowić się, jak wygląda klasyczny spam. Pewnie zauważysz, że niektóre wyrazy lub zwroty (np. „karta kredytowa”, „darmowe”, „zdumiewające”, „bez limitów”) bardzo często występują w temacie wiadomości. Być może odkryjesz również kilka innych szablonów w nazwie nadawcy, ciele wiadomości itd. 2. Następnym etapem byłoby napisanie algorytmu wykrywającego każdy z zaobserwowanych sza- blonów; program oznaczałby wiadomości jako spam, jeśli wykrywałby w nich kilka spośród zdefiniowanych wzorców. 3. Teraz należałoby przetestować ten program i usprawniać go poprzez ciągłe powtarzanie kroków 1. i 2. Problem ten nie jest trywialny i omawiany program będzie się rozrastał o coraz większą liczbę skomplikowanych reguł — jego własnoręczne utrzymanie stałoby się w końcu bardzo uciążliwe. Z drugiej strony filtr spamu bazujący na algorytmach uczenia maszynowego automatycznie rozpo- znaje, które słowa i wyrażenia stanowią dobre czynniki prognostyczne, poprzez wykrywanie podejrza- nie często powtarzających się wzorców wyrazów w przykładowym spamie (w porównaniu do przy- kładów standardowych wiadomości); patrz rysunek 1.2. Kod takiej aplikacji jest znacznie krótszy, łatwiejszy do utrzymywania i prawdopodobnie dokładniejszy. Poza tym jeśli spamerzy zauważą, że blokowane są wszystkie wiadomości zawierające zwrot „bez limitu”, mogą go zmodyfikować na „bez ograniczeń”. Filtr spamu stworzony za pomocą tradycyjnych technik programistycznych musiałby wtedy zostać zaktualizowany tak, aby oznaczał wiadomości zawierające nowy zwrot. Gdyby spamerzy próbowali cały czas w jakiś sposób oszukiwać Twój filtr spamu, musiałabyś/musiałbyś bez przerwy dopisywać nowe reguły. Natomiast filtr spamu stworzony za pomocą technik uczenia maszynowego automatycznie „zauważy” nagły wzrost częstotliwości pojawiania się zwrotu „bez ograniczeń” w spamie oznaczanym przez użytkowników i zacznie go blokować bez Twojego udziału (rysunek 1.3). Dlaczego warto korzystać z uczenia maszynowego?  25 Poleć książkęKup książkę Rysunek 1.2. Podejście wykorzystujące uczenie maszynowe Rysunek 1.3. Automatyczne dostosowywanie się do zmian Kolejnym obszarem, w którym wyróżnia się mechanizm uczenia maszynowego, są problemy, które są zbyt złożone dla tradycyjnych metod lub dla których nie istnieją gotowe algorytmy. Przyjrzyjmy się, na przykład, rozpoznawaniu mowy: załóżmy, że chcesz stworzyć prostą aplikację zdolną do rozróżniania wyrazów „raz” i „trzy”. Zwróć uwagę, że słowo „trzy” zaczyna się od dźwięku o wysokim tonie („T”), dlatego moglibyśmy stworzyć algorytm wykrywający wysokość dźwięku i użyć go do rozróżniania obydwu wyrazów. Oczywiście, technika ta zupełnie nie nadaje się do rozpoznawania tysięcy słów wypowiadanych w hałaśliwych miejscach przez miliony różnych ludzi, porozumiewających się w dzie- siątkach języków. Najlepszym rozwiązaniem (przynajmniej przy obecnym stanie naszej wiedzy) jest napisanie samouczącego się algorytmu na podstawie przykładowych nagrań danego słowa. 26  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę Uczenie maszynowe pomaga również w trenowaniu ludzi (rysunek 1.4): możemy przeglądać algoryt- my, aby sprawdzić, czego się nauczyły (chociaż nie zawsze jest to łatwo sprawdzić). Przykładowo, po wytrenowaniu filtru spamu do rozpoznawania odpowiedniej ilości spamu, można z łatwością sprawdzić listę wyuczonych słów i kombinacji wyrazów uznawanych za najlepsze czynniki progno- styczne. Czasem w ten sposób możemy wykryć niespodziewane korelacje lub nowe trendy, dzięki czemu jesteśmy w stanie lepiej pojąć dany problem. Rysunek 1.4. Uczenie maszynowe pomaga w trenowaniu ludzi Wykorzystanie technik uczenia maszynowego do analizowania olbrzymich ilości danych może pomóc w wykrywaniu nieoczywistych wzorców. Proces ten nazywamy wydobywaniem danych (ang. data mining). Podsumowując, uczenie maszynowe nadaje się znakomicie do:  problemów, których rozwiązanie wymaga mnóstwo ręcznego dostrajania algorytmu lub korzy- stania z długich list reguł; często jeden algorytm uczenia maszynowego upraszcza aplikację i po- prawia jej szybkość,  złożonych problemów, których nie można rozwiązać tradycyjnymi metodami; najlepsze algoryt- my uczenia maszynowego są w stanie znaleźć rozwiązanie,  zmiennych środowisk; mechanizm uczenia maszynowego potrafi dostosować się do nowych danych,  pomagania człowiekowi w analizowaniu skomplikowanych zagadnień i olbrzymich ilości danych. Rodzaje systemów uczenia maszynowego Istnieje tak wiele typów uczenia maszynowego, że warto podzielić je na ogólne kategorie na podstawie takich czynników, jak:  nadzór człowieka w procesie trenowania (uczenie nadzorowane, nienadzorowane, półnadzo- rowane i uczenie przez wzmacnianie), Rodzaje systemów uczenia maszynowego  27 Poleć książkęKup książkę  możliwość uczenia się w czasie rzeczywistym (uczenie przyrostowe i wsadowe),  sposób pracy: proste porównywanie nowych punktów danych ze znanymi punktami lub, podob- nie do naukowców, wykrywanie wzorców w danych uczących i tworzenie modelu predykcyjnego (uczenie z przykładów i uczenie z modelu). Kryteria te nie wykluczają się wzajemnie; możesz łączyć je w dowolny sposób. Na przykład nowo- czesny filtr spamu może uczyć się na bieżąco przy użyciu modelu głębokiej sieci neuronowej, korzy- stając z przykładowych wiadomości e-mail; w ten sposób zaprzęgamy do pracy przyrostowy, bazujący na modelu i nadzorowany system uczenia maszynowego. Przyjrzyjmy się nieco uważniej każdemu z wymienionych kryteriów. Uczenie nadzorowane/nienadzorowane Systemy uczenia maszynowego możemy podzielić na podstawie stopnia i rodzaju nadzorowania procesu uczenia. Pod tym względem uczenie maszynowe dzielimy na cztery zasadnicze rodzaje: ucze- nie nadzorowane, nienadzorowane, półnadzorowane i uczenie przez wzmacnianie). Uczenie nadzorowane W uczeniu nadzorowanym (ang. supervised learning) dane uczące przekazywane algorytmowi za- wierają dołączone rozwiązania problemu, tzw. etykiety (ang. labels); patrz rysunek 1.5. Rysunek 1.5. Zbiór danych uczących zaopatrzonych w etykiety, stosowany w uczeniu nadzorowanym (np. do klasyfikowania spamu) Klasycznym zadaniem uczenia nadzorowanego jest klasyfikacja (ang. classification). Filtr spamu stanowi tu dobry przykład: jest on trenowany za pomocą dużej liczby przykładowych wiadomości e-mail należących do danej klasy (spamu lub hamu), dzięki którym musi być w stanie klasyfikować nowe wiadomości. Innym typowym zadaniem uczenia nadzorowanego jest przewidywanie docelowej wartości nume- rycznej, takiej jak cena samochodu, przy użyciu określonego zbioru cech (przebieg, wiek, marka itd.), zwanych czynnikami prognostycznymi/predykcyjnymi (ang. predictors). Ten typ zadania nosi nazwę 28  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę regresji (rysunek 1.6)3. Aby wyuczyć dany system, należy mu podać wiele przykładów samochodów, w tym zarówno etykiety (np. ceny), jak i czynniki prognostyczne. W terminologii uczenia maszynowego atrybutem (ang. attribute) nazywamy typ danych (np. „Przebieg”), natomiast cecha (ang. feature) w zależności od kontekstu ma kilka różnych znaczeń, zazwyczaj jednak mówiąc o cesze, mamy na myśli atrybut wraz z jego wartością (np. „Przebieg = 15 000”). Wiele osób korzysta jednak naprze- miennie z wyrazów atrybut i cecha. Rysunek 1.6. Regresja Zwróć uwagę, że niektóre algorytmy regresyjne mogą być również używane do klasyfikowania danych i odwrotnie. Na przykład algorytm regresji logistycznej jest powszechnie stosowany w zadaniach klasyfikacyjnych, ponieważ może podawać wynikową wartość odpowiadającą prawdopodobieństwu przynależności do danej klasy (np. 20 szans na to, że dana wiadomość jest spamem). Poniżej wymieniam niektóre z najważniejszych algorytmów nadzorowanego uczenia maszynowego (opisywanych w tej książce):  metoda k-najbliższych sąsiadów,  regresja liniowa,  regresja logistyczna,  maszyny wektorów nośnych,  drzewa decyzyjne i losowe lasy,  sieci neuronowe4. 3 Ciekawostka: ta dziwnie brzmiąca nazwa wywodzi się z teorii statystyki i została zaproponowana przez Francisa Galtona, gdy analizował regułę, zgodnie z którą dzieci wysokich rodziców często bywają od nich niższe. Zjawisko redukcji wzrostu w kolejnym pokoleniu badacz ten nazwał regresją do średniej. Nazwą tą zostały następnie okre- ślone użyte przez niego metody służące do analizowania korelacji pomiędzy zmiennymi. 4 Architektury niektórych sieci neuronowych mogą być nienadzorowane (np. autokodery czy ograniczone maszyny Boltzmanna). Istnieją także architektury półnadzorowane, takie jak głębokie sieci przekonań i nienadzorowane uczenie wstępne. Rodzaje systemów uczenia maszynowego  29 Poleć książkęKup książkę Uczenie nienadzorowane Jak można się domyślać, w uczeniu nienadzorowanym (ang. unsupervised learning) dane uczące są nieoznakowane (rysunek 1.7). System próbuje uczyć się bez nauczyciela. Rysunek 1.7. Zbiór nieoznakowanych danych uczących używanych w uczeniu nienadzorowanym Poniżej wymieniamy kilka najważniejszych algorytmów uczenia nienadzorowanego (w rozdziale 8. zajmiemy się zagadnieniem redukcji wymiarowości):  analiza skupień: − metoda k-średnich, − hierarchiczna analiza skupień (HCA), − algorytm oczekiwanie-maksymalizacja,  wizualizacja i redukcja wymiarowości: − analiza głównych składowych (PCA), − jądrowa analiza głównych składowych, − lokalnie liniowe zanurzanie (ang. locally linear embedding — LLE), − stochastyczne zanurzanie sąsiadów przy użyciu rozkładu t (ang. t-Distributed Stochastic Neighbor Embedding — t-SNE),  uczenie przy użyciu reguł asocjacyjnych: − algorytm Apriori, − algorytm Eclat. Załóżmy, na przykład, że masz do dyspozycji mnóstwo danych dotyczących osób odwiedzających Twój blog. Możesz chcieć skorzystać z analizy skupień (ang. clustering), aby spróbować określić grupy podobnych użytkowników (rysunek 1.8). W dowolnym momencie możesz sprawdzić, do której grupy zalicza się dana odwiedzająca osoba: powiązania pomiędzy poszczególnymi użytkownikami są określane bez Twojej pomocy. Algorytm ten może, przykładowo, zauważyć, że 40 odwiedzających osób to męscy miłośnicy komiksów przeglądający Twoją stronę głównie wieczorami, podczas gdy grupa 20 innych użytkowników to młodociani czytelnicy fantastyki naukowej, którzy zaglądają na Twój blog wyłącznie w weekendy itd. Jeśli użyjesz algorytmu hierarchicznej analizy skupień 30  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę Rysunek 1.8. Analiza skupień (ang. hierarchical clustering), może on dodatkowo rozdzielić grupy na mniejsze podjednostki. W ten sposób możesz łatwiej określić, jakie wpisy umieszczać dla poszczególnych grup. Dobrym przykładem algorytmów uczenia nienadzorowanego są również algorytmy wizualizujące: wprowadzasz mnóstwo złożonych, nieoznakowanych danych, które są następnie wyświetlane w postaci punktów na dwu- lub trójwymiarowym wykresie (rysunek 1.9). Algorytmy te starają się w maksymal- nym stopniu zachować pierwotną strukturę danych (np. próbując rozdzielać poszczególne skupienia w przestrzeni wejściowej, redukując zjawiska nakładania się poszczególnych klastrów na siebie), dzięki czemu możesz łatwiej przeanalizować te dane i być może odkryć jakieś nieprzewidziane wzorce. Rysunek 1.9. Przykład wizualizacji t-SNE wskazującej semantyczny podział skupień5 5 Zwróć uwagę, jak ładnie są rozdzielone zwierzęta od pojazdów, konie znajdują się blisko jeleni, ale daleko od ptaków itd. Rysunek wykorzystany za pozwoleniem Sochera, Ganjoo, Manninga i Ng (2013), T-SNE visualization of the semantic word space. Rodzaje systemów uczenia maszynowego  31 Poleć książkęKup książkę Podobnym zadaniem jest redukcja wymiarowości (ang. dimensionality reduction), której celem jest uproszczenie danych bez utraty nadmiernej ilości informacji. Możemy to osiągnąć między innymi poprzez scalenie kilku skorelowanych cech w jedną. Przykładowo, możemy skorelować przebieg sa- mochodu z jego wiekiem, dzięki czemu algorytm będzie w stanie połączyć je w jedną cechę reprezen- tującą zużycie pojazdu. Proces ten jest nazywany wydobywaniem cech (ang. feature extraction). Zawsze warto spróbować zredukować wymiarowość danych uczących przed dostarcze- niem ich do algorytmu uczenia maszynowego (np. algorytmu uczenia nadzoro- wanego). Algorytm będzie działał wtedy szybciej, dane będą zabierały mniej miejsca na dysku i w pamięci operacyjnej, a w niektórych przypadkach wzrośnie także wydaj- ność uczenia maszynowego. Kolejnym ważnym nienadzorowanym zadaniem jest wykrywanie anomalii (ang. anomaly detection), takich jak np. nietypowe transakcje wykorzystujące kartę kredytową, co pozwala zapobiegać niele- galnym operacjom. Służy ono także do wyłapywania usterek produkcyjnych czy też automatycznego usuwania elementów odstających w danych uczących przed ich przekazaniem algorytmowi uczenia maszynowego. Taki system jest trenowany za pomocą standardowych przykładów, a w przypadku zaprezentowania nowego przykładu jest w stanie stwierdzić, czy na przykład jest on standardowy, czy też stanowi anomalię (rysunek 1.10). Rysunek 1.10. Wykrywanie anomalii Jeszcze jednym powszechnie stosowanym zadaniem uczenia nienadzorowanego jest uczenie przy użyciu reguł asocjacyjnych (ang. association rule learning), którego celem jest analiza ogromnej ilości danych i wykrycie interesujących zależności pomiędzy atrybutami. Załóżmy, że jesteś właści- cielką/właścicielem supermarketu. Przetworzenie danych dotyczących obrotów za pomocą algorytmu reguł asocjacyjnych pozwoliłoby nam odkryć, że osoby kupujące keczup i czipsy zazwyczaj zaopa- trują się również w steki. Dzięki tej wiedzy możesz chcieć, na przykład, umieścić te produkty nieda- leko siebie. 32  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę Uczenie półnadzorowane Niektóre algorytmy są w stanie przetwarzać częściowo oznakowane dane uczące, najczęściej składające się z większości nieoznakowanych i tylko odrobiny oznakowanych przykładów. Taką sytuację nazy- wamy uczeniem półnadzorowanym (ang. semisupervised learning; rysunek 1.11). Rysunek 1.11. Uczenie półnadzorowane Dobrym przykładem zastosowania tego typu metod są niektóre usługi przechowywania obrazów, np. Zdjęcia Google. Po przesłaniu do takiej usługi wszystkich zdjęć rodzinnych rozpoznaje ona auto- matycznie, że na zdjęciach 1., 5. i 11. pojawia się osoba A, natomiast do fotografii 2., 5. i 7. pozuje osoba B. Na tym etapie mamy do czynienia z uczeniem nienadzorowanym (analizą skupień). Teraz wystarczy, że podasz imiona poszczególnych osób. Każda osoba potrzebuje tylko jednej etykiety6, co wystarczy do oznakowania wszystkich osób na każdym zdjęciu i znacznie ułatwia wyszukiwanie zdjęć. Większość algorytmów półnadzorowanych stanowi kombinację algorytmów uczenia nadzorowanego i nienadzorowanego. Na przykład głębokie sieci przekonań (ang. deep belief networks — DBN) bazują na ułożonych warstwowo elementach nienadzorowanych, zwanych ograniczonymi maszy- nami Boltzmanna (ang. restricted Boltzmann machines — RBM). Maszyny te są uczone sekwen- cyjnie w nienadzorowany sposób, a następnie cały system zostaje dostrojony przy użyciu technik uczenia nadzorowanego. Uczenie przez wzmacnianie Uczenie przez wzmacnianie (ang. reinforcement learning) to zupełnie inna bajka. System uczący, zwany w tym kontekście agentem, może obserwować środowisko, dobierać i wykonywać czynności, a także odbierać nagrody (lub kary będące ujemnymi nagrodami; patrz rysunek 1.12). Musi następnie samodzielnie nauczyć się najlepszej strategii (nazywanej polityką; ang. policy), aby uzyskiwać jak naj- większą nagrodę. Polityka definiuje rodzaj działania, jakie agent powinien wybrać w danej sytuacji. 6 Tak wygląda wyidealizowana sytuacja. W praktyce usługa ta często tworzy kilka skupień dla jednej osoby, a czasami myli dwie podobne do siebie osoby, dlatego należy każdej osobie przydzielić kilka etykiet oraz własnoręcznie oczy- ścić niektóre skupienia. Rodzaje systemów uczenia maszynowego  33 Poleć książkęKup książkę Rysunek 1.12. Uczenie przez wzmacnianie Na przykład metody uczenia przez wzmacnianie są używane w wielu modelach robotów do nauki chodzenia. Również program AlphaGo firmy DeepMind był trenowany przez wzmacnianie: zrobiło się o nim głośno w marcu 2016 roku, gdy pokonał dotychczasowego mistrza świata w grę Go — Lee Sedola. Aplikacja ta zdefiniowała politykę gwarantującą zwycięstwo, analizując miliony rozgrywek i rozgrywając mnóstwo partii przeciwko samej sobie. Warto zauważyć, że algorytmy uczące zostały wyłączone podczas partii z ludzkim przeciwnikiem; program AlphaGo korzystał jedynie z wyuczo- nej polityki. Uczenie wsadowe/przyrostowe Innym kryterium stosowanym do klasyfikowania systemów uczenia maszynowego jest możliwość tre- nowania przyrostowego przy użyciu strumienia nadsyłanych danych. Uczenie wsadowe W mechanizmie uczenia wsadowego (ang. batch learning) system nie jest w stanie trenować przy- rostowo: do jego nauki muszą wystarczyć wszystkie dostępne dane. Wymaga to zazwyczaj poświęcenia dużej ilości czasu i zasobów, dlatego najczęściej proces ten jest przeprowadzany w trybie offline. System najpierw jest uczony, a następnie zostaje wdrożony do cyklu produkcyjnego i już więcej nie jest trenowany; korzysta jedynie z dotychczas zdobytych informacji. Zjawisko to bywa nazywane uczeniem offline (ang. offline learning). Jeśli chcesz, aby system uczenia wsadowego brał pod uwagę nowe dane (np. nowe rodzaje spamu), musisz od podstaw wytrenować nową wersję systemu przy użyciu wszystkich dostępnych danych (nowych i starych), następnie wyłączyć stary system i zastąpić go nowym. 34  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę Na szczęście cały proces trenowania, oceniania i uruchamiania systemu uczenia maszynowego można dość łatwo zautomatyzować (co widać na rysunku 1.3), dlatego nawet układ uczenia wsado- wego jest w stanie dostosowywać się do zmian. Wystarczy zaktualizować dane i z odpowiednią często- tliwością trenować system od podstaw. Rozwiązanie to jest proste i często skuteczne, ale trenowanie za pomocą pełnego zbioru danych uczących nieraz trwa wiele godzin, dlatego zazwyczaj trenujemy nowy system raz na dobę, a czasami nawet raz w tygodniu. Jeśli Twój system musi dostosowywać się do szybko zmieniających się danych (np. podczas prognozowania cen akcji giełdowych), będziesz potrzebować dynamiczniejszego mechanizmu. Ponadto uczenie się na pełnym zbiorze danych pochłania mnóstwo zasobów obliczeniowych (mocy procesora, miejsca i szybkości dysku, szybkości sieci itd.). Jeśli masz dużo danych i trenujesz system codziennie od podstaw, będzie Cię to kosztowało wiele pieniędzy. W przypadku danych o naprawdę pokaźnych rozmiarach korzystanie z algorytmu uczenia wsadowego może być wręcz niemożliwe. Zwróćmy na koniec uwagę, że jeśli system ma być zdolny do autonomicznej nauki przy użyciu ograni- czonych zasobów (np. aplikacja na smartfona albo marsjański łazik), to magazynowanie olbrzymich ilości danych i przeznaczanie zasobów na codzienne wielogodzinne trenowanie systemu mogą zwy- czajnie uniemożliwiać normalną pracę urządzenia. Na szczęście istnieje lepsze rozwiązanie dla wymienionych powyżej przykładów: algorytmy zdolne do uczenia przyrostowego. Uczenie przyrostowe W procesie uczenia przyrostowego (ang. online learning) system jest trenowany na bieżąco poprzez sekwencyjne dostarczanie danych; mogą być one pojedyncze lub przyjmować postać tzw. minipa- kietów/minigrup (ang. mini-batches), czyli niewielkich zbiorów. Każdy krok uczący jest szybki i nie- zbyt kosztowny, dlatego system jest w stanie uczyć się na bieżąco przy użyciu nowych danych, gdy tylko się pojawiają (patrz rysunek 1.13). Rysunek 1.13. Uczenie przyrostowe Rodzaje systemów uczenia maszynowego  35 Poleć książkęKup książkę Uczenie przyrostowe sprawdza się znakomicie w systemach odbierających ciągły strumień nowych danych (np. ceny akcji) oraz wymagających szybkiego lub autonomicznego dostosowywania się do nowych warunków. Metody te przydają się również przy ograniczonych zasobach obliczeniowych: dane użyte do nauki nie są już potrzebne i można się ich pozbyć (chyba że chcesz zachować możliwość cofnięcia się do wcześniejszego stanu i „odtworzyć ponownie” dane). W ten sposób możesz mocno zaoszczędzić na przestrzeni dyskowej. Algorytmy uczenia przyrostowego są w stanie również trenować systemy za pomocą dużych zbiorów danych niemieszczących się w pamięci urządzenia (jest to tzw. uczenie pozakorowe — ang. out-of- core learning). Następuje wczytanie części danych i trenowanie systemu za ich pomocą, po czym cały proces zostanie powtórzony dla całego zbioru danych uczących (rysunek 1.14). Rysunek 1.14. Przetwarzanie dużych ilości danych za pomocą algorytmu uczenia przyrostowego Jednym z najważniejszych parametrów systemów uczenia przyrostowego jest szybkość, z jaką dosto- sowują się do zmieniających się danych: jest to tak zwany współczynnik uczenia (ang. learning rate). Wysoka wartość tego współczynnika oznacza, że system będzie szybko dostosowywał się do nowych danych, ale jednocześnie dość szybko zapominał o starych danych (raczej nie chcesz, aby filtr spamu oznaczał jedynie najnowsze rodzaje spamu). Z drugiej strony, system o niskim współczynniku uczenia będzie cechował się większą inercją; oznacza to, że będzie uczył się wolniej, ale jednocześnie będzie bardziej odporny na zaszumienie nowych danych oraz na sekwencje niereprezentatywnych punktów danych. Z kolei dużym problemem uczenia przyrostowego jest stopniowy spadek wydajności systemu w przy- padku dostarczenia mu nieprawidłowych danych. Klienci korzystający z danego systemu na pewno to zauważą. Przykładowo, nieprawidłowe dane mogą pochodzić z uszkodzonego czujnika w robocie lub od osoby zasypującej silnik przeglądarki danymi w celu podbicia swojego rankingu w wynikach wyszukiwania. Aby zmniejszyć to ryzyko, musisz uważnie obserwować swój system i świadomie wyłączyć proces uczenia (a także ewentualnie przywrócić stan do wcześniejszego stanu) po wykryciu spadku szybkości algorytmu. Możesz także śledzić przychodzące dane i reagować na wszelkie niepra- widłowości (np. za pomocą algorytmu wykrywania anomalii). 36  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę Uczenie z przykładów/z modelu Możemy również podzielić systemy uczenia maszynowego pod względem uogólniania. Większość zadań uczenia maszynowego polega na sporządzaniu prognoz. Oznacza to, że na podstawie określonej liczby próbek uczących system musi być w stanie generalizować wyniki na niewidziane wcześniej przykłady. Uzyskanie dobrej szybkości algorytmu wobec danych uczących jest pożądane, ale niewy- starczające; prawdziwy cel stanowi dobra wydajność wobec nowych przykładów. Znamy dwa główne mechanizmy uogólniania: uczenie z przykładów i uczenie z modelu. Uczenie z przykładów Prawdopodobnie najprostszą formą nauki jest „wykuwanie na blachę”. Gdybyśmy stworzyli w ten sposób filtr spamu, oznaczałby po prostu wszystkie wiadomości identyczne z oznakowanymi przez użytkowników — rozwiązanie nie najgorsze, ale zarazem nie najlepsze. Zamiast oznaczać wiadomości identyczne z rozpoznanym wcześniej spamem, możemy zaprogramo- wać filtr w taki sposób, aby znakował również wiadomości bardzo podobne do powszechnie rozpo- znawanych wzorców. Potrzebna staje się jakaś miara podobieństwa dwóch wiadomości e-mail. Może ją stanowić (w wielkim uproszczeniu) porównanie liczby takich samych słów występujących w obydwu wiadomościach. Filtr mógłby oznaczać wiadomość jako spam, jeśli będzie miała wiele słów wspólnych ze znanym spamem. Mamy tu do czynienia z uczeniem z przykładów (ang. instance-based learning): system uczy się przy- kładów „na pamięć”, a następnie porównuje (generalizuje) je z nowymi przypadkami za pomocą miary podobieństwa (rysunek 1.15). Rysunek 1.15. Uczenie z przykładów Rodzaje systemów uczenia maszynowego  37 Poleć książkęKup książkę Uczenie z modelu Innym sposobem uogólniania wyników uzyskiwanych z danych uczących jest stworzenie modelu z tych przykładów i użycie go do przewidywania (prognozowania; ang. prediction). Jest to uczenie z modelu (ang. model-based learning; rysunek 1.16). Rysunek 1.16. Uczenie z modelu Załóżmy, na przykład, że chcemy sprawdzić, czy pieniądze dają szczęście; w tym celu moglibyśmy pobrać dane Better Life Index ze strony Organizacji Współpracy Gospodarczej i Rozwoju (OECD, http://stats.oecd.org/index.aspx?DataSetCode=BLI), a także statystyki PKB per capita z witryny Międzyna- rodowego Funduszu Walutowego (IMF, http://goo.gl/j1MSKe). Teraz wystarczyłoby połączyć obydwie tabele i posortować dane dotyczące PKB. Tabela 1.1 prezentuje fragment uzyskanych informacji. Tabela 1.1. Czy pieniądze przynoszą szczęście? Państwo Węgry Korea Francja Australia Stany Zjednoczone PKB per capita (w dolarach amerykańskich) 12 240 27 195 37 675 50 962 55 805 Satysfakcja z życia 4,9 5,8 6,5 7,3 7,2 Wygenerujmy teraz wykres danych dla kilku przykładowych krajów (rysunek 1.17). Możemy dostrzec tu pewien trend! Pomimo tego, że dane są zaszumione (tzn. częściowo losowe), wygląda na to, że poziom satysfakcji z życia wzrasta w sposób mniej więcej liniowy wraz ze wzrostem produktu krajowego brutto na osobę. Postanawiasz zatem stworzyć model satysfakcji z życia jako funkcji liniowej wobec parametru PKB per capita. Etap ten nazywamy doborem modelu: wybraliśmy model liniowy satysfakcji z życia wykorzystujący tylko jeden atrybut — PKB per capita (równanie 1.1). 38  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę Rysunek 1.17. Czy widzisz tu trend? Równanie 1.1. Prosty model liniowy satysfakcj życia  1 za __   0  PKB _ per _ capita Model ten zawiera dwa parametry, θ0 i θ1 pomocą uzyskać dowolną funkcję liniową, co zostało ukazane na rysunku 1.18. 7. Poprzez modyfikowanie tych parametrów możesz za ich Rysunek 1.18. Kilka wybranych modeli liniowych Zanim zaczniesz korzystać z modelu, musisz zdefiniować wartości jego parametrów θ0 i θ1. Skąd mamy wiedzieć, które wartości nadają się najlepiej dla danego modelu? Aby móc odpowiedzieć na to pytanie, należy zdefiniować miarę szybkości. Możesz wyznaczyć funkcję użyteczności (zwaną także funkcją dopasowania), mówiącą nam, jak dobry jest dany model, lub funkcję kosztu, mającą przeciwne zastosowanie. W zagadnieniach wykorzystujących regresję liniową zazwyczaj jest stosowana funkcja kosztu mierząca odległości pomiędzy przewidywaniami modelu liniowego a przykładami uczącymi; naszym zadaniem jest zminimalizowanie tego dystansu. 7 Zgodnie z konwencją grecka litera θ (teta) często symbolizuje parametry modelu. Rodzaje systemów uczenia maszynowego  39 Poleć książkęKup książkę W tym właśnie miejscu przydaje się algorytm regresji liniowej: dostarczamy mu dane uczące, a on określa parametry najlepiej pasujące do danego modelu liniowego. Proces ten nosi nazwę uczenia (trenowania) modelu. W naszym przykładzie algorytm regresji liniowej wyznacza następujące opty- malne wartości parametrów: θ0 = 4,85 i θ1 = 4,91×10-5. Teraz nasz model jest maksymalnie dopasowany do danych uczących (jak na model liniowy), o czym możemy się przekonać na rysunku 1.19. Rysunek 1.19. Model liniowy najlepiej dopasowany do danych uczących Możemy w końcu uruchomić model, aby przeprowadził prognozy. Załóżmy, na przykład, że chcemy się dowiedzieć, jak szczęśliwi są Cypryjczycy; informacji tej nie znajdziemy w bazie danych OECD. Na szczęście, możemy posłużyć się modelem, aby uzyskać wiarygodne przewidywania: sprawdzamy wartość PKB per capita dla Cypru (22 587 dolarów), a po uruchomieniu modelu dowiadujemy się, że współczynnik satysfakcji z życia oscyluje wokół wartości 4,85+22 587×4,91×10-5 = 5,96. Zaostrzymy Ci apetyt, pokazując w przykładzie 1.1 kod Python służący do wczytywania danych, ich przygotowania8, utworzenia wykresu, a także wyuczenia modelu liniowego i prognozowania wyników9. Przykład 1.1. Uczenie i uruchamianie modelu liniowego za pomocą biblioteki Scikit-Learn import matplotlib import matplotlib.pyplot as plt import numpy as np import pandas as pd import sklearn # Wczytuje dane oecd_bli = pd.read_csv( oecd_bli_2015.csv , thousands= , ) 8 Zakładamy tu, że funkcja prepare_country_stats() została już zdefiniowana: łączy ona dane dotyczące PKB i satysfakcji z życia w jeden obiekt Dataframe biblioteki Pandas. 9 Nie szkodzi, jeżeli nie do końca rozumiesz ukazany kod; w następnych rozdziałach zajmiemy się omówieniem biblioteki Scikit-Learn. 40  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę gdp_per_capita = pd.read_csv( gdp_per_capita.csv ,thousands= , ,delimiter= \t , encoding= latin1 , na_values= bd ) # Przygotowuje dane country_stats = prepare_country_stats(oecd_bli, gdp_per_capita) X = np.c_[country_stats[ PKB per capita ]] y = np.c_[country_stats[ Satysfakcja z życia ]] # Wizualizuje dane country_stats.plot(kind= scatter , x= PKB per capita , y= Satysfakcja z życia ) plt.show() # Dobiera model liniowy model = sklearn.linear_model.LinearRegression() # Trenuje model model.fit(X, y) # Prognozuje wyniki dla Cypru X_new = [[22587]] # PKB per capita dla Cypru print(model.predict(X_new)) # generuje wynik [[ 5.96242338]] Gdybyś użyła/użył algorytmu uczenia z przykładów, zauważyłabyś/zauważyłbyś, że wartość PKB najbardziej zbliżoną do Cypru ma Słowenia (20 732 dolary), a skoro dzięki danym OECD wiemy, że współczynnik satysfakcji z życia wynosi u Słoweńców 5,7, moglibyśmy w drodze analogii stwierdzić, że jego wartość dla Cypryjczyków powinna być bardzo podobna. Po nieznacznym „oddaleniu skali” i przyjrzeniu się dwóm kolejnym państwom o zbliżonej wartości satysfakcji z życia okaże się, że są to Portu- galia (5,1) i Hiszpania (6,5). Średnia tych trzech wartości wynosi 5,77, co stanowi wartość całkiem zbliżoną do wyliczonej przez nasz model. Wspomniany tu prosty algorytm nosi nazwę regresji k-najbliższych sąsiadów (ang. k-nearest neighbors); w tym przykładzie k = 3. Aby zastąpić algorytm regresji liniowej algorytmem k-najbliższych sąsiadów, wystarczy podmienić wiersz: model = sklearn.linear_model.LinearRegression() na następujący: model = sklearn.neighbors.KNeighborsRegressor(n_neighbors=3) Jeśli wszystko zostało dobrze wykonane, Twój model powinien wyliczać dobre prognozy. W prze- ciwnym wypadku może być konieczne wykorzystanie większej liczby atrybutów (stopy zatrudnie- nia, zdrowia społeczeństwa, zanieczyszczenia powietrza itd.), zdobycie więcej danych uczących lub danych lepszej jakości, ewentualnie skorzystanie z wydajniejszego modelu (np. algorytmu regresji wielomianowej). Podsumowując:  Przeanalizowaliśmy dane.  Wybraliśmy model.  Wytrenowaliśmy go na danych uczących (np. algorytm uczący wyszukał wartości parametrów pozwalających na zminimalizowanie funkcji kosztu). Rodzaje systemów uczenia maszynowego  41 Poleć książkęKup książkę  Na końcu wykorzystaliśmy wytrenowany model do prognozowania wyników dla nowych przypad- ków (jest to tzw. wnioskowanie) z nadzieją, że będzie on skutecznie generalizował zdobytą wiedzę. Tak właśnie wygląda typowy projekt uczenia maszynowego. W rozdziale 2. doświadczysz tego na własnej skórze podczas przygotowywania projektu od podstaw. Poruszyliśmy do tej pory wiele zagadnień: wiesz już, czym jest uczenie maszynowe, dlaczego okazuje się przydatne i jakie są podstawowe kategorie tej dziedziny, a także znasz już podstawowy cykl pracy nad projektem uczenia maszynowego. Spójrzmy teraz, co może pójść nieprawidłowo w procesie ucze- nia i uniemożliwić uzyskiwanie dokładnych prognoz. Główne problemy uczenia maszynowego Skoro naszym głównym zadaniem jest dobór algorytmu uczącego i wyuczenie go za pomocą określo- nych danych, to dwoma największymi zagrożeniami są „zły algorytm” i „złe dane”. Zacznijmy od przyjrzenia się niewłaściwym danym. Niedobór danych uczących Aby nauczyć berbecia, czym jest jabłko, wystarczy wskazać mu ten owoc i powiedzieć „jabłko” (najprawdopodobniej musisz to jeszcze kilkakrotnie powtórzyć). Dziecko teraz będzie w stanie rozpoznawać jabłka w najróżniejszych kolorach i kształtach. Mały geniusz. Niestety, techniki uczenia maszynowego znajdują się pod tym względem daleko w tyle; żeby większość algorytmów działała prawidłowo, należy im zapewnić mnóstwo danych. Nawet w przypadku bardzo prostych problemów należy zazwyczaj dostarczyć tysiące przykładów, natomiast bardziej zaawanso- wane zagadnienia, takie jak rozpoznawanie mowy, wymagają nawet milionów próbek (chyba że jesteś w stanie wykorzystać fragmenty już istniejącego modelu). Niedorzeczna efektywność danych W słynnym dokumencie (http://www.aclweb.org/anthology/P01-1005) z 2001 roku badacze z firmy Micro- soft, Michele Banko i Eric Brill, udowodnili, że różne algorytmy uczenia maszynowego, włącznie z najprost- szymi, po przesłaniu im odpowiedniej ilości danych osiągają niemal identyczną wydajność wobec złożo- nych problemów ujednoznacznień w języku naturalnym10 (co zaprezentowano na rysunku 1.20). Autorzy ujmują to następująco: „Wyniki te sugerują, że warto zastanowić się nad przeniesieniem środka ciężkości w kompromisie pomiędzy poświęcaniem czasu i pieniędzy na tworzenie algorytmów a przezna- czaniem zasobów na rozwój korpusu językowego”. Koncepcja przewagi znaczenia danych nad algorytmami w rozwiązywaniu złożonych problemów została spopularyzowana przez Petera Nordviga i in. w dokumencie The Unreasonable Effectiveness of Data (https://research.google.com/pubs/archive/35179.pdf), opublikowanym w 2009 roku11. Należy jednak zauważyć, że ciągle są popularne niewielkie i średniej wielkości zbiory danych, a pozyskanie ich większej ilości często bywa bardzo trudne lub kosztowne, dlatego nie bagatelizujmy znaczenia algorytmów. 10 Na przykład rozróżnianie znaczeń wyrazów „buk”, „Bug” i „bóg” w zależności od kontekstu. 11 The Unreasonable Effectiveness of Data, Peter Norvig i in. (2009). 42  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę Rysunek 1.20. Porównanie znaczenia danych i algorytmów12 Niereprezentatywne dane uczące Aby proces uogólniania przebiegał skutecznie, dane uczące muszą być reprezentatywne wobec no- wych danych, wobec których nastąpi generalizacja. Jest to prawdziwe zarówno dla uczenia z przy- kładów, jak i dla uczenia z modelu. Na przykład zbiór krajów użyty przez nas do trenowania modelu liniowego nie był doskonale repre- zentatywny; brakuje w nim kilku państw. Na rysunku 1.21 widzimy, jak będą wyglądać dane po doda- niu tych kilku brakujących krajów. Rysunek 1.21. Bardziej reprezentatywny zbiór przykładów uczących 12 Rysunek umieszczony za pozwoleniem Banko i Brilla (2001), Learning Curves for Confusion Set Disambiguation. Główne problemy uczenia maszynowego  43 Poleć książkęKup książkę Model wyuczony za pomocą tych danych został ukazany w postaci linii ciągłej, natomiast stary model jest reprezentowany przez linię przerywaną. Jak widać, dodanie kilku brakujących krajów nie tylko w znaczny sposób modyfikuje dany model, ale pozwala nam również uzmysłowić sobie, że prosty mo- del liniowy raczej nigdy nie będzie bardzo dokładny. Wygląda na to, że mieszkańcy bardzo bogatych państw nie są szczęśliwsi od ich odpowiedników w średnio zamożnych krajach (wydaje się wręcz, że są bardziej nieszczęśliwi), a z kolei ludność wielu ubogich państw wydaje się znacznie szczęśliwsza od populacji bogatych krajów. Za pomocą niereprezentatywnego zbioru danych wyuczyliśmy model, który raczej nie będzie genero- wał dokładnych prognoz, zwłaszcza w przypadku krajów ubogich i bardzo zamożnych. Jest niezwykle istotne, aby zbiór danych uczących był reprezentatywny wobec generalizowanych przy- padków. Często jest to trudniej osiągnąć, niż się wydaje: jeżeli przykład będzie zbyt mały, musisz liczyć się z zaszumieniem próbkowania (ang. sampling noise; niereprezentatywne dane pojawiają się tu w wyniku przypadku), ale nawet olbrzymie zbiory danych mogą nie być reprezentatywne, jeśli użyta zostanie niewłaściwa metoda próbkowania. W tym przypadku mamy do czynienia z obciążeniem próbkowania (ang. sampling bias). Słynny przykład obciążenia próbkowania Prawdopodobnie najsłynniejszy przykład wpływu obciążenia próbkowania można było zaobserwować podczas wyborów na prezydenta Stanów Zjednoczonych w 1936 roku, w których przeciwko Roosevel- towi stanął Landon: magazyn „Literary Digest” przeprowadził ankietę, wysyłając pocztą ulotki do około 10 milionów obywateli. Zostało odesłanych 2,4 miliona odpowiedzi, dzięki którym z dużą dozą pewności prognozowano, że Landon uzyska 57 głosów. Ostatecznie okazało się, że to Roosevelt zebrał 62 głosów. Problem polegał na użytej metodzie próbkowania:  Po pierwsze, magazyn „Literary Digest” zebrał adresy osób, którym została wysłana ankieta, z książek telefonicznych, list abonentów i członków klubów itd. We wszystkich tych źródłach dominowały majętne osoby, które chętniej głosowały na republikanów (czyli na Landona).  Po drugie, odpowiedzi odesłało mniej niż 25 osób. Również ten czynnik odpowiada za obciążenie próbkowania, ponieważ nie są brane pod uwagę osoby apolityczne, przeciwnicy magazynu „Literary Digest” i inne kluczowe grupy. Jest to specjalny rodzaj obciążenia próbkowania, zwany błędem braku odpowiedzi (ang. nonresponse bias). Weźmy pod uwagę inny przykład: powiedzmy, że chcesz stworzyć system rozpoznający teledyski z muzyką funkową. Jednym ze sposobów przygotowania zbioru danych uczących jest wyszukanie wyników „funk music” w serwisie YouTube i skorzystanie z nich. Zakładamy jednak w tym przypadku, że silnik wyszukiwania zwróci zestaw teledysków stanowiący przekrój wszystkich piosenek funkowych umiesz- czonych w serwisie. W rzeczywistości wyniki wyszukiwania są często tendencyjnie nastawione wobec najpopularniejszych artystów (natomiast jeśli mieszkasz w Brazylii, zostanie wyświetlonych wiele teledy- sków z nurtu „funk carioca”, który w ogóle nie brzmi jak James Brown). Z drugiej strony, jak inaczej można pozyskać duży zbiór danych uczących? 44  Rozdział 1. Krajobraz uczenia maszynowego Poleć książkęKup książkę Dane kiepskiej jakości Jest oczywiste, że jeśli dane uczące zawierają mnóstwo błędów, elementów odstających i szumu (np. z powodu niskiej jakości pomiarów), to systemowi będzie znacznie trudniej wykryć wzorce, przez co nie osiągnie optymalnej wydajności. Warto często poświęcić czas na oczyszczenie takich danych. Prawda jest taka, że większość analityków danych poświęca na tę czynność wiele czasu. Na przykład:  jeżeli niektóre elementy wyraźnie odstają od reszty przykładów, wystarczy je po prostu odrzucić albo spróbować własnoręcznie poprawić błędy,  jeśli niektórym przykładom brakuje kilku cech (np. 5 klientów nie podało wieku), musisz zade- cydować, czy należy takie cechy całkowicie ignorować, ignorować te przykłady, wypełnić brakujące wartości (np. korzystając z mediany wieku), wytrenować jeden model przy użyciu tej cechy, a drugi bez niej itd. Nieistotne cechy Zgodnie ze słynnym powiedzeniem: z gipsu tortu nie ulepisz. Twój system będzie w stanie uczyć się jedynie za pomocą danych zawierających wystarczającą liczbę istotnych cech i niezaśmieconych nadmiarem cech nieistotnych. Elementem krytycznym dla sukcesu w projekcie uczenia maszynowego jest wybór dobrego zbioru cech uczących. Proces ten, zwany inżynierią cech (ang. feature engine- ering), składa się z następujących elementów:  dobór cechy (ang. feature selection): dobór najprzydatniejszych spośród dostępnych cech,  odkrywanie cechy (ang. feature extraction): łączenie ze sobą istniejących cech w celu uzyskania przydatniejszej cechy (jak już wiemy, pomóc nam w tym może algorytm redukcji wymiarowości),  uzyskiwanie nowych cech z nowych danych. Skoro już wiemy, jak wyglądają złe dane, przeanalizujmy kwestię nieprawidłowych algorytmów. Przetrenowanie danych uczących Załóżmy, że na zagranicznej wycieczce zostałaś okradziona/zostałeś okradziony przez taksówkarza. Być może na Twoje usta ciśnie się stwierdzenie, że wszyscy taksówkarze w danym kraju są złodziejami. Ludzie często mają tendencję do nadmiernego generalizowania i, niestety, maszyny równie łatwo wpadają w tę pułapkę, jeśli nie zachowamy ostrożności. Zjawisko to w terminologii uczenia maszyno- wego nosi nazwę przetrenowania albo nadmiernego dopasowania (ang. overfitting). Termin ten oznacza, że model sprawdza się w przypadku danych uczących, ale sam proces uogólniania nie sprawuje się zbyt dobrze. Na rysunku 1.22 widzimy przykład wielomianowego modelu satysfakcji z życia o olbrzymim stopniu przetrenowania za pomocą danych uczących. Nawet jeśli sprawuje się on znacznie lepiej wobec danych uczących niż zwykły model liniowy, to czy moglibyśmy zawierzyć jego prognozom? Główne problemy uczenia maszynowego  45 Poleć książkęKup książkę Rysunek 1.22. Przetrenowanie danych uczących Takie złożone modele, jak głębokie sieci neuronowe, są w stanie wykrywać subtelne wzorce w danych, ale jeżeli zbiór danych uczących jest zaszumiony lub zbyt mały (ryzyko zaszumienia próbkowania), to model ten prawdopodobnie będzie wykrywał wzorce nie w użytecznych danych, lecz w szumie. Oczywiście. szablonów tych nie da się generalizować na nowe próbki. Powiedzmy, że dostarczamy modelowi satysfakcji z życia wiele dodatkowych atrybutów, w tym takich nieprzydatnych, jak nazwy państw. W takiej sytuacji złożony model może wykrywać takie wzorce, jak np. wskaźnik satysfakcji z życia przekraczający wartość 7 w krajach mających w nazwie literę „w”: Nowa Zelandia (7,3), Nor- wegia (7,4), Szwecja (7,2) czy Szwajcaria (7,5). Czy masz pewność, że ta „reguła litery »w«” dotyczy również takich państw, jak Rwanda lub Zimbabwe? Oczywiście, wzorzec ten wystąpił w danych uczą- cych zupełnie przypadkowo, ale model
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Uczenie maszynowe z użyciem Scikit-Learn i TensorFlow
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: