Potęga sztucznej inteligencji. Ninja Chipy i TensorFlow

Jak może wyglądać sieć neuronowa rozwiązująca realne problemy dzisiejszego świata? Jakie są najlepsze narzędzia dostępne dla adeptów sztuki poskramiania sieci neuronowych? W tym artykule postaram się udzielić odpowiedzi na te pytania. Opowiem również o google’owych Ninja Chipach, które znacznie przyspieszają rozwiązywanie problemów z domeny sztucznej inteligencji.


Patryk Borowa. Programista w Aspire Systems Poland. Mistrz rozwiązywania problemów. Szczególnie motywują go te najbardziej złożone. Czy to dotyczące projektowania, ulepszania procesów, architektury czy kodowania – jako pierwszy zaproponuje rozwiązanie.


Moje wybory technologiczne będą się opierały głównie na wytworach Google, takich jak biblioteka TensorFlow. Można mieć różne opinie na temat giganta z Mountain View, jednak nie sposób nie widzieć jego potężnego wkładu w rozwój Sztucznej Inteligencji.

Uczenie Maszynowe a Sztuczna Inteligencja

Na początku konieczne jest zrozumienie podstawowych konceptów. „Uczenie Maszynowe” jest podgrupą pojęcia „Sztucznej Inteligencji”. Upraszczając, uczenie maszynowe polega na użyciu wyspecjalizowanych algorytmów w celu rozwiązywania problemów, takich jak klasyfikacja danych oraz szeroko pojęte przewidywanie przyszłych wartości w oparciu o wcześniej zaobserwowane trendy.

Algorytmy, których używamy w kontekście uczenia maszynowego, nazywane są sieciami neuronowymi. Jeżeli mamy do czynienia z tzw. sieciami wielowarstwowymi – wchodzimy w obszar sieci głębokich oraz głębokiego uczenia się. A więc podsumowując zależności: Sztuczna Inteligencja > Uczenie Maszynowe > Głębokie Uczenie > Magia.py.

Systemy oparte na sieciach neuronowych rozwiązują poniższe kategorie problemów:

  • Przetwarzanie języka naturalnego
  • Kategoryzowanie obrazów oraz tekstu
  • Rekomendacje produktów
  • Diagnozowanie chorób
  • Analizy finansowe
  • Wykrywanie nadużyć w systemach informatycznych
  • Klasyfikacja grup klientów
  • Przewidywanie awarii w celu optymalizacji planowania prac serwisowych
  • I wiele innych

Języki dla Data Science

Środowisko tzw. eksploratorów danych (najlepsze tłumaczenie, jakie słyszałem dla data scientist) upodobało sobie w szczególności dwa języki – Python oraz R. Z tych dwóch R jest zdecydowanie prostszym w swojej składni, co czyni go lepszym wyborem dla osób nieposiadających doświadczenia z językami programowania.

Python jest z kolei kompletnym/pełnoprawnym językiem programowania pozwalającym na budowanie bardziej złożonych struktur programów. Przez to łatwiej integruje się z końcowymi środowiskami wykorzystującymi sieć. Jeśli chodzi o możliwości stricte związane z sieciami neuronowymi, R oraz Python mają bardzo zbliżone możliwości. W tym artykule skupię się na Pythonie, który pozwala na czystsze przedstawienie bardziej zaawansowanych konceptów Sztucznej Inteligencji, jak i demonstracje najpopularniejszych bibliotek używanych w procesie uczenia modelów sieci.

Problemy wpasowujące się w kategorie „rozwiązywalnych przez uczenie maszynowe” wyglądają z pozoru podobnie. Charakteryzują się koniecznością znalezienia ładu w chaosie – powtarzających się wzorców w olbrzymich zbiorach danych (nieprzeszukiwalnych przez człowieka ani klasyczne algorytmy komputerowe). Jeśli zatem doszedłeś do wniosku, iż twój problem biznesowy może zaliczać się do powyższej kategorii, czas na dobór odpowiednich narzędzi, które pomogą znaleźć rozwiązanie! Na rynku znajduje się wiele podobnych bibliotek, jednak TensorFlow jest wśród nich równiejszym z równych ze względu na swój rodowód oraz olbrzymie wsparcie społeczności open-source.

Siła TensorFlow drzemie również w integracji z wszystkimi głównymi platformami, wliczając w to chmury Microsoft Azure, Amazon’a oraz rzecz jasna Google. Jeśli zdecydujesz się na TensorFlow, możesz ponadto liczyć na olbrzymie zbiory łatwo dostępnych informacji wliczając w to poradniki użytkownika, tutoriale oraz narzędzia wspomagające pracę każdego szanującego się eksploratora danych. Poza szeroką gamą informacji możesz również liczyć na wbudowane wsparcie sprzętowe dla technologii wspomagających wielowątkowe przetwarzanie danych przez CPU / GPU oraz (uwaga, uwaga) TPU!

Ninja Chipy od Google’a

TPU czyli Tensor Processing Units to specjalne dedykowane „Ninja Chipy” Google’a, zbudowane w jednym celu – wspomagać trenowanie oraz ewaluacje sieci neuronowych. Można by powiedzieć, że gdzie GPU/CPU nie może, tam TPU pośle. I faktycznie – TPU biją na głowę klasyczne układy przeznaczone do generalnego użytku. Jednak wyścig zbrojeń trwa i NVidia nie pozostaje bierna budując swoje własne układy dedykowane wspomaganiu eksploratorów danych. Jak się domyślacie flagowe produkty Google’a w dziedzinie AI jak Google Assistant, Search czy Translator osiągają tak niesamowite wyniki w dużej mierze właśnie dzięki TPU. Warto się z nimi zaprzyjaźnić.

Dosyć o sprzęcie, wracamy do oprogramowania. Jeśli dopiero zaczynasz swoją przygodę z uczeniem maszynowym lub najzwyczajniej chciałbyś szybko przetestować algorytmy znalezione w sieci, możesz i powinieneś zainteresować się parą bibliotek TensorFlow i Keras. Keras jest wysokopoziomową nakładką, która upraszcza dostęp do wielu funkcjonalności TensorFlow. Nie ma najmniejszego problemu, aby mieszać kod Keras i TensorFlow w jednym rozwiązaniu. I często tak się też dzieje. Możesz to porównać do robienia obliczeń ręcznie oraz przy użyciu kalkulatora nienaukowego. Działa szybciej, ale nie wszytko w nim zrobisz.

Podsumowując powyższe wnioski:

  1. TensorFlow powinien być twoim pierwszym wyborem w kontekście uczenia maszynowego, gdyż jest on po prostu standardem w tej dziedzinie (na początku jednak zalecane jest używanie go w połączeniu z biblioteką Keras).
  2. Keras posiada wiele pomocniczych prostych w obsłudze funkcjonalności wspomagających i przyspieszających pracę z modelami sieci neuronowych.

Jeśli materiały dostępne dla Keras oraz TensorFlow nie są dla Ciebie wystarczające powinieneś zainteresować się bardzo popularnym w kręgach akademickim projektem Scikit-Learn. Uzupełnia on TensorFlow i skupia się na jak najprostszym przekazaniu informacji związanych z światem uczenia oraz konstruowania modeli sieci. Nie ma najmniejszego problemu z używaniem modeli stworzonych przy pomocy Keras w Scikit Learn, jeśli zajdzie taka potrzeba.

Ilustracja TPU, źródło zdjęcia: cloud.google.com

Teraz, gdy masz już pojęcie na temat sprzętowych oraz programowych komponentów wspomagających pracę eksplorerów danych, jesteśmy gotowi na odrobinę praktyki! Duża część przykładów oraz tutoriali, które znajdziesz w sieci, będzie przekazywana w formacie interaktywnych notatników. Notatniki te mają formę artykułów zawierających sekcje statyczne, czyli tekst czy obrazki oraz sekcje kodu, które można uruchamiać w samym notatniku!

Dwa popularne narzędzia tego typu to Jupyter Notebook oraz Google CoLaboratory, które zostało zbudowane w oparciu o Jupyter Notebook. Ja ze względów praktycznych (dobrze w miarę możliwości trzymać się jednego zgranego stacku) wybrałem Google CoLaboratory. Sekcje kodu posiadają małą ikonkę z lewej strony, pozwalającą uruchomić kod z poziomu notatnika. Link, który tu podałem, zaprowadzi cię do strony przedstawiającej podstawowe możliwości interaktywnych notatników.

Myślę, że jesteśmy gotowi na odpalenie notatnika opisującego rozwiązanie problemu klasyfikacji zdjęć. To taki „Hello World” modelowania sieci neuronowych. Słowem kluczowym jest tu „klasyfikacja”. Klasyfikacja to jedna z głównych grup problemów rozwiązywanych przez sieci neuronowe, w której dla danych wejściowych określonego formatu oczekujemy, że sieć przypisze te dane do jednej lub kilku wcześniej określonych i wyuczonych klas/grup, jak np. typ ubioru. Innym popularnym problemem, o którym warto wiedzieć, którym jednak nie zajmiemy się dzisiaj jest regresja. Regresja różni się od klasyfikacji tym, iż sieć klasyfikująca zwróci nam wartości dyskretne (klasy/kategorie np. warunków pogodowych), sieć regresyjna z drugiej strony zwróci nam wartości ciągłe (temperaturę, ciśnienie).

Poniżej znajdziesz link do notatnika, w którym zobaczysz oraz uruchomisz swoją sieć klasyfikującą. Notatnik zademonstruje rozwiązania podstawowych problemów, z którymi musimy sobie poradzić przy większości problemów uczenia maszynowego:

1. Wstępne normalizowanie danych treningowych – usuwanie danych nieprzydatnych lub mogących wprowadzić sieć w błąd podczas procesu uczenia.

2. Konfigurowanie warstw modelu sieci.

3. Dobór funkcji straty oraz optymalizatora wykorzystującego tę funkcję w procesie uczenia sieci (to właśnie optymalizator i funkcja straty odpowiadają za iteracyjne zmiany w wagach węzłów łączących poszczególne warstwy sieci).

4. Trenowanie oraz Ewaluacja – na potrzeby tego ćwiczenia przygotowany zestaw danych treningowych losowo w proporcji 80 do 20%. Większego zbioru używamy do uczenia sieci, mniejszego do jej ewaluacji. Dane treningowe zawierają wiele instancji danych wejściowych X (w naszym przypadku będą to obrazki przestawiające ubrania) oraz gotowego już oczekiwanego wyjścia (nazwa ubioru) Y. Zakładamy, że sieć po wielu, wielu iteracjach (czyli przejściach danych przez model) na zestawie danych treningowych Training_X oraz Training_Y, sama określi później wartości wyjściowe Evaluation_Y dla danych zbioru ewaluacyjnego Evaluation_X.

Jeśli powyższe kroki nie są jasne, zapraszam do analizy notatnika, który demonstruje ich praktyczne wykonanie.

W czasie, gdy będziesz rozszerzał swoją wiedzę w kontekście tego co przeczytałeś powyżej, ja będę pracował nad kolejnymi bardziej zaawansowanymi notatnikami. Tam zademonstruję bardziej złożone sieci neuronowe jak np. Deep Q, która jest w stanie grać w gry stworzone dla klasycznego Atari na poziomie przewyższającym najlepszych ludzkich graczy!


Jeśli podobał Ci się mój artykuł lub masz jakiekolwiek uwagi, proszę podziel się swoją opinią w komentarzu poniżej.

Patronujemy

 
 
Polecamy
HRakterna środa — sztuczna inteligencja na LinkedInie