Część I
Wprowadzenie do generatywnego głębokiego uczenia
Część I to ogólne wprowadzenie do modelowania generatywnego i głębokiego uczenia - dwóch dziedzin, które musimy zrozumieć, aby rozpocząć generatywne głębokie uczenie!
W rozdziale 1 zdefiniujemy modelowanie generatywne i rozważymy uproszczony przykład, którego można użyć do zrozumienia niektórych kluczowych pojęć ważnych dla wszystkich modeli generatywnych. Przedstawimy również taksonomię rodzin modeli generatywnych, którą omówimy w części II tej książki.
Rozdział 2 to przewodnik po narzędziach i technikach głębokiego uczenia, które będą nam potrzebne do rozpoczęcia tworzenia bardziej złożonych modeli generatywnych. W szczególności zbudujemy nasz pierwszy przykład głębokiej sieci neuronowej - perceptron wielowarstwowy (MLP) - przy użyciu biblioteki Keras. Następnie, aby móc zaobserwować różnicę w wydajności, dostosujemy go do uwzględnienia warstw splotowych i innych rozwinięć.
Pod koniec Części I Czytelnik posiądzie odpowiednie rozumienie podstawowych pojęć leżących u podstaw wszystkich technik opisanych w dalszych częściach książki.
Rozdział 1
Modelowanie generatywne
Cele rozdziału
W tym rozdziale:
Poznamy kluczowe różnice pomiędzy modelami generatywnymi i dyskryminacyjnymi.
Poprzez prosty przykład zrozumiemy odpowiednie właściwości modelu generatywnego.
Dowiemy się, jakie są podstawowe koncepcje probabilistyczne leżące u podstaw modeli generatywnych.
Poznamy różne rodziny modeli generatywnych.
Sklonujemy bazę kodu dołączoną do tej książki, co umożliwi rozpoczęcie budowania modeli generatywnych!
Rozdział ten stanowi ogólne wprowadzenie do dziedziny modelowania generatywnego.
Zaczniemy od łagodnego teoretycznego wprowadzenia do modelowania generatywnego i zobaczymy, w jaki sposób jest ono naturalnym odpowiednikiem szerzej badanego modelowania dyskryminacyjnego. Następnie ustalimy ramy opisujące pożądane właściwości, jakie powinien posiadać dobry model generatywny. Przedstawimy także podstawowe koncepcje probabilistyczne, które warto znać, aby w pełni docenić, w jaki sposób różne podejścia radzą sobie z wyzwaniem modelowania generatywnego.
W naturalny sposób doprowadzi nas to do przedostatniej części, która przedstawia sześć szerokich rodzin modeli generatywnych dominujących aktualnie w tej dziedzinie. W ostatniej części wyjaśnimy, jak rozpocząć pracę z bazą kodu dołączoną do tej książki.
Czym jest modelowanie generatywne?
Modelowanie generatywne można w sposób ogólny zdefiniować w następujący sposób:
Modelowanie generatywne to gałąź uczenia maszynowego, która polega na wyszkoleniu modelu w celu wygenerowania nowych danych podobnych do podanego zbioru danych.
Co to oznacza w praktyce? Załóżmy, że mamy zbiór danych zawierający zdjęcia koni. Na tym zbiorze danych możemy wyszkolić model generatywny do uchwycenia zasad rządzących złożonymi relacjami między pikselami na obrazach koni. Następnie możemy pobrać próbki z tego modelu, aby stworzyć nowatorskie, realistyczne obrazy koni, które nie istniały w oryginalnym zbiorze danych. Proces ten przedstawiono na rysunku 1.1.
Rysunek 1.1 Model generatywny wyszkolony do generowania realistycznych zdjęć koni
Do zbudowania modelu generatywnego potrzebujemy zbioru danych składającego się z wielu przykładów bytu, którą staramy się wygenerować. Są one znane pod nazwą dane szkoleniowe, a jeden taki punkt danych jest nazywany obserwacją.
Każda obserwacja składa się z wielu cech. Dla problemu z generowaniem obrazu cechami są zwykle wartości poszczególnych pikseli. Dla problemu generowania tekstu cechami mogą być pojedyncze słowa lub grupy liter. Naszym celem jest zbudowanie modelu, który będzie w stanie wygenerować nowe zestawy cech wyglądające tak, jakby zostały utworzone przy użyciu tych samych reguł, co oryginalne dane. Pod względem koncepcyjnym, w przypadku generowania obrazu, jest to niezwykle trudne zadanie, biorąc pod uwagę ogromną liczbę sposobów przypisania wartości poszczególnym pikselom i stosunkowo niewielką liczbę takich układów, które składają się na obraz obiektu, który staramy się wygenerować.
Model generatywny musi być także probabilistyczny, a nie deterministyczny, ponieważ chcemy mieć możliwość generowania wielu różnych wariantów wyniku, zamiast uzyskiwać za każdym razem ten sam. Jeśli nasz model jest jedynie ustalonym obliczeniem, takim jak średnia wartość każdego piksela w zbiorze danych uczących, nie jest on generatywny. Model generatywny musi zawierać składnik losowy, który wpływa na poszczególne próbki generowane przez model.
Innymi słowy, możemy sobie wyobrazić, że istnieje nieznany rozkład prawdopodobieństwa, który wyjaśnia, dlaczego niektóre obrazy prawdopodobnie zostaną znalezione w zbiorze danych uczących, a inne nie. Naszym zadaniem jest zbudowanie modelu, który możliwie najdokładniej naśladuje ten rozkład, a następnie pobranie z niego próbek w celu wygenerowania nowych, odrębnych obserwacji, które wyglądają tak, jakby mogły zostać uwzględnione w oryginalnym zbiorze uczącym.
Modelowanie generatywne vs. dyskryminacyjne
Aby naprawdę zrozumieć, co ma na celu osiągnięcie modelowanie generatywne i dlaczego jest to ważne, warto porównać je z jego ekwiwalentem, modelowaniem dyskryminacyjnym. Jeśli ktoś studiował uczenie maszynowe, większość problemów, na które napotka, najprawdopodobniej będzie miało charakter dyskryminacyjny. Zapoznajmy się z przykładem, który zobrazuje nam tę różnicę.
Załóżmy, że mamy zbiór danych zawierający obrazy, niektóre namalowane przez Van Gogha, pozostałe przez innych artystów. Mając wystarczającą ilość danych, moglibyśmy wyszkolić model dyskryminacyjny, aby określić, czy dany obraz został namalowany przez Van Gogha. Nasz model dowiedziałby się, że określone kolory, kształty i tekstury z większym prawdopodobieństwem wskazują, że obraz jest dziełem holenderskiego mistrza, a w przypadku obrazów posiadających te cechy model odpowiednio wzmocniłby swoje przewidywania. Rysunek 1.2 przedstawia proces modelowania dyskryminacyjnego - należy zwrócić uwagę, czym różni się on od procesu modelowania generatywnego pokazanego na rysunku 1.1.
Rysunek 1.2 Model dyskryminacyjny wyszkolony do predykcji, czy dany obraz został namalowany przez Van Gogha
Podczas wykonywania modelowania dyskryminacyjnego każda obserwacja w danych uczących ma etykietę. W przypadku binarnego problemu klasyfikacji, takiego jak dyskryminator artysty, obrazy Van Gogha zostaną oznaczone jako 1, a obrazy innych artystów niż Van Gogh - jako 0. Nasz model nauczy się następnie, jak rozróżniać te dwie grupy i wskaże prawdopodobieństwo, że nowa obserwacja ma etykietę 1 - tj. że został namalowany przez Van Gogha.
W przeciwieństwie do tego modelowanie generatywne nie wymaga etykietowania zbioru danych, ponieważ zajmuje się generowaniem zupełnie nowych obrazów, a nie próbą predykcji etykiety danego obrazu.
Zdefiniujmy formalnie tego typu modelowanie, posługując się notacją matematyczną:
Modelowanie dyskryminacyjne szacuje p (y | x)
Oznacza to, że modelowanie dyskryminacyjne ma na celu zamodelowanie prawdopodobieństwa etykiety y przy pewnej obserwacji x.
Modelowanie generatywne szacuje p (x)
Oznacza to, że modelowanie generatywne ma na celu zamodelowanie prawdopodobieństwa zaobserwowania obserwacji x. Próbkowanie z tego rozkładu pozwala nam wygenerować nowe obserwacje.
Warunkowe modele generatywne
Należy zwrócić uwagę, że możemy również zbudować model generatywny do modelowania prawdopodobieństwa warunkowego p(x|y) - prawdopodobieństwa zaobserwowania obserwacji x z określoną etykietą y.
Dla przykładu, jeśli nasz zbiór danych zawiera różne rodzaje owoców, możemy nakazać naszemu modelowi generatywnemu, aby generował konkretnie obraz jabłka.
Należy zauważyć, że nawet gdybyśmy byli w stanie zbudować doskonały model dyskryminacyjny do identyfikacji obrazów Van Gogha, nadal nie mielibyśmy pojęcia, jak stworzyć obraz wyglądający jak dzieło Van Gogha. Może jedynie generować prawdopodobieństwa w odniesieniu do istniejących obrazów, ponieważ model do tego został wyszkolony. Zamiast tego moglibyśmy wyszkolić model generatywny i próbkować ten model w celu wygenerowania obrazów, które mają duże szanse na przynależność do oryginalnego zbioru danych treningowych.
Powstanie modelowania generatywnego
Do niedawna modelowanie dyskryminacyjne było siłą napędową większości postępów w uczeniu maszynowym. Dzieje się tak dlatego, że w przypadku każdego problemu dyskryminacyjnego odpowiadający mu problem modelowania generatywnego jest zwykle znacznie trudniejszy do rozwiązania. Dla przykładu znacznie łatwiej jest wyszkolić model, aby przewidywał, czy obraz jest dziełem Van Gogha, niż wyszkolić model do wygenerowania od zera obrazu w stylu Van Gogha.
Podobnie znacznie łatwiej jest wyszkolić model, aby przewidywał, czy strona tekstu została napisana przez Charlesa Dickensa, niż zbudować model generujący zbiór akapitów w stylu Dickensa. Do niedawna większość problemów generatywnych była zwyczajnie poza zasięgiem i wielu wątpiło, czy kiedykolwiek uda się je rozwiązać. Kreatywność uznawano za zdolność czysto ludzką, z którą nie mogła rywalizować sztuczna inteligencja.
Jednak w miarę dojrzewania technologii uczenia maszynowego założenie to stopniowo słabnie. W ciągu ostatnich 10 lat wiele z najciekawszych osiągnięć w tej dziedzinie nastąpiło dzięki nowatorskim zastosowaniom uczenia maszynowego do zadań modelowania generatywnego. Dla przykładu rysunek 1.3 pokazuje uderzający postęp, jaki od 2014 roku nastąpił w generowaniu obrazu twarzy.
Rysunek 1.3 W ciągu ostatniej dekady generowanie twarzy przy użyciu modelowania generatywnego znacznie się poprawiło (na podstawie Brundage et al., 2018)1
Z modelowaniem dyskryminacyjnym jest nie tylko łatwiej się uporać, ale także w przeszłości było łatwiej dostosowywane do praktycznych problemów w różnych branżach, niż modelowanie generatywne. Na przykład lekarz może odnieść korzyść z modelu, który przewiduje, czy dany obraz siatkówki wykazuje oznaki jaskry, ale niekoniecznie skorzysta z modelu, który może wygenerować nowe obrazy tylnej części oka.
Jednak to również zaczyna się zmieniać wraz z rozprzestrzenianiem się firm oferujących usługi generatywne, które są ukierunkowane na konkretne problemy biznesowe. Dla przykładu można teraz uzyskać dostęp do interfejsów API, które generują oryginalne wpisy dla bloga o określonej tematyce, tworzą różnorodne zdjęcia produktu w dowolnym ustawieniu lub piszą treści do mediów społecznościowych i teksty reklam pasujące do danej marki i przekazu docelowego. Istnieją również wyraźnie pozytywne zastosowania generatywnej sztucznej inteligencji w branżach, takich jak projektowanie gier i kinematografia, gdzie modele przeszkolone w zakresie tworzenia wideo i muzyki zaczynają wnosić wartość dodaną.
Modelowanie generatywne i sztuczna inteligencja
Oprócz praktycznych zastosowań modelowania generatywnego (z których wiele jeszcze nie zostało odkrytych) istnieją trzy głębsze powody, dla których modelowanie generatywne można uznać za klucz do odblokowania znacznie bardziej wyrafinowanej formy sztucznej inteligencji, która wykracza poza to, co może osiągnąć samo modelowanie dyskryminacyjne.
Po pierwsze, z czysto teoretycznego punktu widzenia, nie powinniśmy ograniczać naszego uczenia maszynowego do prostego kategoryzowania danych. Dla kompletności, powinniśmy również zająć się modelami uczącymi, które oddadzą pełniejsze zrozumienie rozkładu danych, poza jakimiś konkretnymi etykietami. Jest to niewątpliwie problem trudniejszy do rozwiązania, ze względu na dużą wymiarowość przestrzeni możliwych wyników oraz stosunkowo niewielką liczbę wytworów, które zaklasyfikowalibyśmy jako należące do zbioru danych. Jednakże, jak się przekonamy, wiele z tych samych technik, które napędzają rozwój modelowania dyskryminacyjnego, takich jak głębokie uczenie, może być również wykorzystywanych w modelach generatywnych.
Po drugie jak zobaczymy w rozdziale 12, modelowanie generatywne jest obecnie wykorzystywane do napędzania postępu w innych obszarach sztucznej inteligencji, takich jak uczenie ze wzmocnieniem (badanie agentów uczących w celu optymalizacji celu w środowisku metodą prób i błędów). Załóżmy, że chcemy wyszkolić robota, aby poruszał się po wskazanym terenie. Tradycyjne podejście polegałoby na przeprowadzeniu wielu eksperymentów, podczas których agent wypróbowuje różne strategie w terenie, lub komputerowej symulacji terenu. Z biegiem czasu agent nauczyłby się, które strategie są skuteczniejsze od innych i dlatego stopniowo by się ulepszał. Wyzwaniem związanym z tym podejściem jest to, że jest ono dość nieelastyczne, ponieważ jest szkolone w zakresie optymalizacji polityki dla jednego konkretnego zadania. Alternatywnym podejściem, które ostatnio zyskało na popularności, jest wyszkolenie agenta w zakresie uczenia się modelu świata środowiska przy użyciu modelu generatywnego, niezależnego od konkretnego zadania. Agent może szybko dostosować się do nowych zadań, testując strategie we własnym modelu świata, a nie w rzeczywistym środowisku, które często jest wydajniejsze obliczeniowo i nie wymaga ponownego uczenia od podstaw dla każdego nowego zadania.
I wreszcie, jeśli mamy szczerze powiedzieć, że zbudowaliśmy maszynę, która uzyskała inteligencję porównywalną z ludzką, modelowanie generatywne z pewnością musi być częścią rozwiązania. Jednym z najwspanialszych przykładów modelu generatywnego w świecie przyrody jest osoba czytająca tę książkę. Poświęćmy chwilę i zastanówmy się, jakim niesamowitym modelem generatywnym jesteśmy. Można zamknąć oczy i wyobrazić sobie, jak wyglądałby słoń pod każdym możliwym kątem. Można wyobrazić sobie wiele różnych, prawdopodobnych zakończeń swojego ulubionego programu telewizyjnego i zaplanować nadchodzący tydzień, wyobrażając sobie różne wersje przyszłości i podejmując odpowiednie działania. Obecna teoria neuronaukowa sugeruje, że nasze postrzeganie rzeczywistości nie jest bardzo złożonym modelem dyskryminującym, działającym na podstawie naszych bodźców zmysłowych w celu wytworzenia przewidywań tego, czego doświadczamy, ale zamiast tego jest modelem generatywnym, który jest trenowany od urodzenia w celu stworzenia symulacji naszego otoczenia, które dokładnie odpowiadają przyszłości. Niektóre teorie sugerują nawet, że wynikiem tego modelu generatywnego jest to, co bezpośrednio postrzegamy jako rzeczywistość. Jest oczywiste, że głębokie zrozumienie tego, w jaki sposób możemy zbudować maszyny umożliwiające nabycie tej zdolności, będzie miało kluczowe znaczenie dla naszego dalszego zrozumienia działania mózgu i ogólnej sztucznej inteligencji.
Nasz pierwszy model generatywny
Mając to na uwadze, rozpocznijmy naszą podróż do ekscytującego świata modelowania generatywnego. Na początek przyjrzymy się uproszczonemu przykładowi modelu generatywnego i przedstawimy kilka pomysłów, które pomogą nam pracować nad bardziej złożonymi architekturami, z którymi zetkniemy się w dalszej części książki.
Witaj, świecie!
Zacznijmy od zagrania w grę polegającą na modelowaniu generatywnym w zaledwie dwóch wymiarach. Wybrałem regułę, która posłużyła do wygenerowania zbioru punktów X przedstawionego na rysunku 1.4. Nazwijmy tę regułę pdata. Twoim wyzwaniem jest wybranie innego punktu x = (x1, x2) w przestrzeni, który ma wyglądać, jakby został wygenerowany na podstawie tej samej reguły.
Rysunek 1.4 Zbiór punktów w dwóch wymiarach, wygenerowany przez nieznaną regułę pdata
Gdzie je wybierzesz? Prawdopodobnie wykorzystasz swoją wiedzę na temat istniejących punktów danych do skonstruowania modelu mentalnego, pmodel - miejsc w przestrzeni, w której istnieje większe prawdopodobieństwo, że powinien znaleźć się punkt. Pod tym względem pmodel jest estymacją pdata. Być może zdecydowałeś, że pmodel powinien wyglądać jak na rysunku 1.5 - prostokątna ramka, w której mogą znaleźć się punkty, i obszar poza ramką, w którym nie ma szans na znalezienie się jakichkolwiek punktów.
Rysunek 1.5 Pomarańczowe pole, pmodel, to oszacowanie rzeczywistego rozkładu generującego dane - pdata
W celu wygenerowania nowej obserwacji, można wybrać losowo punkt w ramce lub, bardziej formalnie, próbkę z rozkładu pmodel. Gratulacje, właśnie udało Ci się zbudować swój pierwszy model generatywny! Zostały przez Ciebie wykorzystane dane treningowe (czarne punkty) do skonstruowania modelu (pomarańczowy obszar), z którego można łatwo pobierać próbki w celu wygenerowania innych punktów, które wydają się należeć do zbioru treningowego.
Sformalizujemy teraz to myślenie w ramy, które pomogą nam zrozumieć, co próbuje osiągnąć modelowanie generatywne.
Ramy modelowania generatywnego
Nasze motywacje i cele związane z budowaniem modelu generatywnego możemy ująć w następujący sposób.
Ramy modelowania generatywnego
Mamy zbiór danych z obserwacjami X.
Zakładamy, że obserwacje zostały wygenerowane według jakiegoś nieznanego rozkładu pdata.
Chcemy zbudować model generatywny pmodel, który naśladuje pdata. Jeśli osiągniemy ten cel, będziemy mogli pobierać próbki z pmodel, aby wygenerować obserwacje, które wyglądają na pochodzące z pdata.
Dlatego pożądanymi właściwościami pmodel są:
Dokładność
Jeśli dla wygenerowanej obserwacji pmodel jest wysoki, powinien wyglądać tak, jakby został uzyskany z pdata. Jeśli dla wygenerowanej obserwacji pmodel jest niski, nie powinien wyglądać, jakby został uzyskany z pdata.
Generacja
Powinno być możliwe łatwe pobranie próbki nowej obserwacji z pmodel.
Reprezentacja
Powinno być możliwe zrozumienie, jak pmodel reprezentuje różne wysokopoziomowe cechy w danych.
Ujawnijmy teraz pdata, rzeczywisty rozkład generujący dane, i przekonajmy się, jak te ramy mają zastosowanie w tym przykładzie. Jak widać na rysunku 1.6, regułą generowania danych jest po prostu rozkład jednostajny na powierzchni lądów świata, bez szans na wskazanie punktu na morzu.
Rysunek 1.6 Pomarańczowe pole pmodel to oszacowanie rzeczywistego rozkładu generującego dane pdata (szary obszar)
Oczywiście, nasz model pmodel jest nadmiernym uproszczeniem pdata. Możemy zbadać punkty A, B i C, aby zrozumieć sukcesy i porażki naszego modelu względem tego, jak dokładnie naśladuje on pdata:
Punkt A to obserwacja wygenerowana przez nasz model, ale wydaje się, że nie została wygenerowana przez pdata, ponieważ znajduje się na morzu.
Punkt B nigdy nie mógłby zostać wygenerowany przez pmodel, ponieważ znajduje się poza pomarańczowym prostokątem. Dlatego nasz model ma pewne luki w zdolności do generowania obserwacji w całym zakresie potencjalnych możliwości.
Punkt C jest obserwacją, która może zostać wygenerowana przez pmodel, a także przez pdata.
Pomimo swoich niedociągnięć, model jest łatwy do próbkowania, ponieważ jest to zwyczajnie rozkład jednostajny w pomarańczowym polu. W trakcie próbkowania możemy łatwo wybrać losowo punkt z jego wnętrza.
Z całą pewnością możemy też powiedzieć, że nasz model jest prostą reprezentacją leżącego u jego podstaw złożonego rozkładu, i który uwzględnia niektóre z jego wysokopoziomowych cech. Prawdziwy rozkład jest podzielony na obszary z dużą ilością obszarów lądowych (kontynenty) i te bez obszarów lądowych (morza). Jest to wysokopoziomowa cecha, która dotyczy również naszego modelu, z tą różnicą, że mamy jeden duży kontynent, a nie wiele.
W tym przykładzie zademonstrowano podstawowe pojęcia stojące za modelowaniem generatywnym. Problemy, którymi zajmiemy się w tej książce, będą znacznie bardziej złożone i wielowymiarowe, ale fundamentalne ramy, poprzez które będziemy podchodzić do problemu, pozostaną niezmienne.
Uczenie reprezentacji
Warto nieco bardziej zagłębić się w to, co mamy na myśli, mówiąc o reprezentacji danych wielowymiarowych, ponieważ temat będzie powracał w tej książce.
Załóżmy, że chcemy opisać swój wygląd komuś, kto szuka nas w tłumie ludzi i nie wie, jak wyglądamy. Nie zaczynalibyśmy od podania koloru pierwszego piksela na naszym zdjęciu, następnie piksela 2, potem piksela, 3, itd. Zamiast tego przyjęlibyśmy rozsądne założenie, że druga osoba ma ogólne pojęcie o tym, jak wygląda przeciętny człowiek, a następnie zmienilibyśmy tę linię bazową, dodając cechy opisujące grupy pikseli, jak na przykład: Mam bardzo jasne włosy lub Noszę okulary. Mając nie więcej, niż 10 takich stwierdzeń, taka osoba będzie w stanie odwzorować opis z powrotem w postaci pikseli, aby wygenerować w swojej głowie nasz obraz. Może nie byłby idealny, ale na tyle podobny do naszego rzeczywistego wizerunku, że można było nas znaleźć wśród prawdopodobnie setek innych osób, nawet jeśli ktoś nigdy wcześniej by nas nie widział.
To jest główna idea stojąca za uczeniem reprezentacji. Zamiast starać się bezpośredniego modelować wielowymiarową przestrzeni próbek, opisujemy każdą obserwację w zbiorze uczącym przy użyciu niskowymiarowej przestrzeni ukrytej, a następnie uczymy się funkcji mapującej, która może pobrać punkt z przestrzeni ukrytej i odwzorować go na punkt w pierwotnej domenie. Innymi słowy, każdy punkt w przestrzeni ukrytej jest reprezentacją jakiejś wielowymiarowej obserwacji.
Co to oznacza w praktyce? Załóżmy, że mamy zbiór uczący złożony z obrazów szarych, cieniowanych puszek na ciastka (rysunek 1.7).
Rysunek 1.7 Zbiór danych dotyczących puszek na ciastka
Dla nas jest oczywiste, że każdą z tych puszek wyróżniają dwie cechy: wysokość i szerokość puszki. Oznacza to, że możemy przekonwertować każdy obraz puszki na punkt w przestrzeni ukrytej o zaledwie dwóch wymiarach, mimo że zbiór uczący obrazów jest podany w wielowymiarowej przestrzeni pikseli. W szczególności oznacza to, że możemy również wygenerować obrazy puszek, które nie istnieją w zbiorze uczącym, stosując odpowiednią funkcję mapującą f do nowego punktu w przestrzeni ukrytej, jak pokazano na rysunku 1.8. Zrozumienie, że oryginalny zbiór danych można opisać prostszą przestrzenią ukrytą, nie jest takie proste dla maszyny - musiałaby najpierw ustalić, że wysokość i szerokość to dwa wymiary przestrzeni ukrytej, które najlepiej opisują ten zbiór danych, a następnie nauczyć się funkcji mapującej f, która może wybierać punkt w tej przestrzeni i odwzorować go na obraz cieniowanej szarej puszki po ciastkach. Uczenie maszynowe (w szczególności głębokie uczenie) daje nam możliwość uczenia maszyn, przez co potrafią znajdować te złożone relacje bez udziału człowieka.
Rysunek 1.8 Dwuwymiarowa ukryta przestrzeń dla puszek na ciastka i funkcja f, która odwzorowuje punkt w przestrzeni ukrytej z powrotem na oryginalną dziedzinę obrazu
Jedną z zalet modeli uczących wykorzystujących przestrzeń ukrytą jest to, że możemy wykonywać operacje, które wpływają na wysokopoziomowe właściwości obrazu, manipulując jego wektorem reprezentacji w łatwiejszej do zarządzania przestrzeni ukrytej. Przykładowo - nie jest oczywiste, jak dostosować cieniowanie każdego pojedynczego piksela, aby obraz puszki po ciastkach był wyższy. Jednak w przestrzeni ukrytej wystarczy zwiększyć ukryty wymiar wysokość, a następnie zastosować funkcję mapującą, aby powrócić do dziedziny obrazu. Jasny przykład tego zobaczymy w następnym rozdziale, zastosowany nie do puszek na ciastka, ale do twarzy.
Koncepcja kodowania uczącego zbioru danych w przestrzeni ukrytej, abyśmy mogli z niego pobrać próbki i zdekodować punkt z powrotem do dziedziny pierwotnej, jest powszechna w wielu technikach modelowania generatywnego, o czym przekonamy się w dalszych rozdziałach tej książki. Z matematycznego punktu widzenia techniki kodowania-dekodowania próbują przekształcić wysoce nieliniową rozmaitość, w której znajdują się dane (np. w przestrzeni pikseli), w prostszą przestrzeń ukrytą, z której można pobierać próbki, przez co staje się prawdopodobne, że dowolny punkt z przestrzeni ukrytej jest reprezentacją dobrze zbudowanego obrazu, jak pokazano na rysunku 1.9.
Rysunek 1.9 Różnorodność psów w wielowymiarowej przestrzeni pikseli jest mapowana na prostszą przestrzeń ukrytą, z której można pobierać próbki
Podstawowa teoria prawdopodobieństwa
Przekonaliśmy się już, że modelowanie generatywne jest ściśle powiązane ze statystycznym modelowaniem rozkładów prawdopodobieństwa. Dlatego sensowne jest teraz wprowadzenie kilku podstawowych pojęć probabilistycznych i statystycznych, które będą używane w całej książce w celu wyjaśnienia teoretycznych podstaw każdego modelu.
Jeśli problematyka prawdopodobieństwa i statystyki jest Ci obca, nie martw się. Do zbudowania wielu modeli głębokiego uczenia, które zobaczymy w dalszej części tej książki, nie jest konieczne dogłębne zrozumienie teorii statystycznej. Aby jednak móc w pełni docenić zadanie, przed którym stoimy, warto spróbować zbudować solidne zrozumienie podstawowej teorii prawdopodobieństwa. W ten sposób będziemy mieć podstawy do zrozumienia różnych rodzin modeli generatywnych, które zostaną przedstawione w dalszej części tego rozdziału.
W pierwszym kroku zdefiniujemy pięć kluczowych terminów, łącząc każdy z nich z naszym wcześniejszym przykładem modelu generatywnego, który modeluje mapę świata w dwóch wymiarach:
Przestrzeń próbek
Przestrzeń próbek to kompletny zbiór wszelkich wartości, jakie może przyjąć obserwacja x.
W naszym poprzednim przykładzie przestrzeń próbek składa się ze wszystkich punktów szerokości i długości geograficznej x = (x1, x2) na mapie świata. Na przykład x = (40.7306, -73.9352) to punkt w przestrzeni próbek (Nowy Jork), który należy do rozkładu generującego prawdziwe dane. x = (11.3493, 142.1996) to punkt w przestrzeni próbek, który nie należy do rozkładu generującego prawdziwe dane (znajduje się na morzu).
Funkcja gęstości prawdopodobieństwa
Funkcja gęstości prawdopodobieństwa (lub funkcja gęstości) to funkcja p(x), która odwzorowuje punkt x z przestrzeni próbek na liczbę z zakresu od 0 do 1. Całka funkcji gęstości po wszystkich punktach z przestrzeni próbek musi wynosić 1, a zatem jest to dobrze zdefiniowany rozkład prawdopodobieństwa.
Na przykładzie z mapą świata funkcja gęstości naszego modelu generatywnego wynosi 0 poza pomarańczowym prostokątem i jest stała wewnątrz prostokąta, tak że całka funkcji gęstości po całej przestrzeni próbek wynosi 1.
Chociaż zakłada się, że istnieje tylko jedna prawdziwa funkcja gęstości pdata (x), która wygenerowała obserwowalny zbiór danych, istnieje nieskończenie wiele funkcji gęstości pmodel (x), których możemy użyć do oszacowania pdata (x).
Modelowanie parametryczne
Modelowanie parametryczne to technika, której możemy użyć do ustrukturyzowania naszego podejścia do znalezienia odpowiedniego pmodel (x). Model parametryczny to rodzina funkcji gęstości p?(x), które można opisać za pomocą skończonej liczby parametrów ?.
Jeśli założymy, że nasza rodzina modeli ma rozkład jednostajny, wówczas zbiór wszystkich możliwych prostokątów, który możemy narysować na rysunku 1.5, jest przykładem modelu parametrycznego. W tym przypadku istnieją cztery parametry: współrzędne lewego dolnego (?1, ?2) i prawego górnego (?3, ?4) narożnika prostokąta.
Zatem każdą funkcję gęstości p?(x) w tym modelu parametrycznym (tj. w każdym prostokącie) można jednoznacznie przedstawić za pomocą czterech liczb, ? = (?1, ?2, ?3, ?4).
Wiarygodność
Wiarygodność ? (? | x) zbioru parametrów ? jest funkcją mierzącą akceptowalność ?, biorąc pod uwagę zaobserwowany punkt x. Definiuje się ją następująco:
Oznacza to, że wiarygodność ? w pewnym obserwowanym punkcie x definiuje się jako wartość funkcji gęstości sparametryzowanej przez ? w punkcie x. Jeśli mamy cały zbiór danych X niezależnych obserwacji, możemy napisać:
W przykładzie z mapą świata pomarańczowe pole obejmujące tylko lewą połowę mapy miałoby wiarygodność 0 - nie mogło wygenerować zbioru danych, ponieważ zaobserwowaliśmy również punkty w prawej połowie mapy. Pomarańczowe pole na rysunku 1.5 ma dodatnią wiarygodność, ponieważ funkcja gęstości jest dodatnia dla wszystkich punktów danych w tym modelu.
Ponieważ iloczyn dużej liczby wyrażeń od 0 do 1 może być dość trudny do obsłużenia obliczeniowo, często zamiast tego używamy logarytmu wiarygodności ?:
Istnieją statystyczne powody, dla których wiarygodność jest definiowana w ten sposób, ale widzimy również, że ta definicja ma intuicyjnie sens. Wiarygodność zbioru parametrów ? definiuje się jako prawdopodobieństwo zobaczenia danych, jeśli prawdziwym rozkładem generującym dane był model parametryzowany przez ?.
Należy pamiętać, że wiarygodność jest funkcją parametrów, a nie danych. Nie należy jej interpretować jako prawdopodobieństwa, że dany zbiór parametrów jest poprawny - innymi słowy nie jest to rozkład prawdopodobieństwa w przestrzeni parametrów (tj. nie sumuje się/całkuje do 1 w odniesieniu do parametrów).
Intuicyjnie wydaje się, że modelowanie parametryczne powinno skupiać się na znalezieniu optymalnej wartości ?? zbioru parametrów, która maksymalizuje wiarygodność obserwacji zbioru danych X.
Ocena najwyższej wiarygodności
Ocena najwyższej wiarygodności to technika, która pozwala nam oszacować ?? - zbiór parametrów ? funkcji gęstości p? (x), który w sposób najbardziej prawdopodobny wyjaśni niektóre zaobserwowane dane X. Bardziej formalnie:
?? jest także nazywane oszacowaniem maksymalnej wiarygodności (ang. maximum likelihood estimate, MLE).
W przykładzie z mapą świata MLE jest najmniejszym prostokątem, który nadal zawiera wszystkie punkty ze zbioru szkoleniowego.
Sieci neuronowe zazwyczaj minimalizują funkcję straty, więc możemy równoważnie mówić o znalezieniu zbioru parametrów, które minimalizują ujemny logarytm wiarygodności:
Modelowanie generatywne można traktować jako formę oceny najwyższej wiarygodności, gdzie parametry ? są wagami sieci neuronowych zawartych w modelu. Staramy się znaleźć wartości tych parametrów, które maksymalizują wiarygodność zaobserwowania danych (lub równoważnie minimalizują ujemny logarytm wiarygodności).
Jednakże w przypadku problemów wielowymiarowych na ogół nie jest możliwe bezpośrednie obliczenie p? (x) - jest to prawie niewykonalne (intractable). Jak zobaczymy w następnym punkcie, różne rodziny modeli generatywnych przyjmują różne podejścia do rozwiązania tego problemu.
Taksonomia modelu generatywnego
Chociaż wszystkie typy modeli generatywnych docelowo mają na celu rozwiązanie tego samego zadania, wszystkie przyjmują nieco inne podejście do modelowania funkcji gęstości p? (x). Ogólnie rzecz biorąc, istnieją trzy możliwe podejścia:
1. Modelowanie funkcji gęstości jawnie, ale ograniczenie modelu w jakiś sposób, aby funkcja gęstości była rozwiązywalna (tzn. mogła zostać obliczona).
2. Jawne modelowanie rozwiązywalnego przybliżenia funkcji gęstości.
3. Niejawne modelowanie funkcji gęstości poprzez proces stochastyczny, który bezpośrednio generuje dane.
Pokazano je na rysunku 1.10 w formie taksonomii, wraz z sześcioma rodzinami modeli generatywnych, które omówimy w części II tej książki. Należy zauważyć, że te rodziny nie wykluczają się wzajemnie - istnieje wiele przykładów modeli będących hybrydami dwóch różnych rodzajów podejść. Należy myśleć o rodzinach jako o różnych ogólnych podejściach do modelowania generatywnego, a nie o jawnych architekturach modeli.
Rysunek 1.10 Taksonomia podejść do modelowania generatywnego
Pierwszy podział, jakiego możemy dokonać, dotyczy modeli, w których funkcja gęstości prawdopodobieństwa p(x) jest modelowana jawnie, i tych, w których jest modelowana niejawnie.
Modele ukrytej gęstości w ogóle nie mają na celu oszacowania gęstości prawdopodobieństwa, zamiast tego skupiają się wyłącznie na tworzeniu procesu stochastycznego, który bezpośrednio generuje dane. Najbardziej znanym przykładem ukrytego modelu generatywnego jest generatywna sieć antagonistyczna. Następnie możemy podzielić modele jawnej gęstości na te, które bezpośrednio optymalizują funkcję gęstości (modele rozwiązywalne) i te, które optymalizują jedynie jej przybliżenie.
Modele rozwiązywalne nakładają ograniczenia na architekturę modelu, dzięki czemu funkcja gęstości ma postać ułatwiającą obliczenia. Dla przykładu modele autoregresyjne narzucają uporządkowanie cech wejściowych, dzięki czemu wyjścia mogą być generowane sekwencyjnie - np. słowo po słowie lub piksel po pikselu. Modele normalizujące przepływ do prostego rozkładu wykorzystują szereg rozwiązywalnych, odwracalnych funkcji w celu wygenerowania bardziej złożonych rozkładów.
Modele przybliżonej gęstości obejmują wariacyjne autokodery, które wprowadzają zmienną ukrytą i optymalizują przybliżenie połączonej funkcji gęstości. Modele oparte o energię również wykorzystują metody przybliżone, ale robią to poprzez próbkowanie łańcucha Markowa, a nie metody wariacyjne. Modele dyfuzji przybliżają funkcję gęstości, ucząc model stopniowego usuwania szumu z danego obrazu, który został wcześniej uszkodzony.
Wspólnym wątkiem, który przewija się przez wszystkie typy rodzin modeli generatywnych, jest głębokie uczenie. Prawie wszystkie wyrafinowane modele generatywne mają u podstaw głęboką sieć neuronową, ponieważ można je wyszkolić od podstaw, aby nauczyły się złożonych relacji rządzących strukturą danych, zamiast konieczności kodowania informacji a priori. W rozdziale 2 omówimy głębokie uczenie, podając praktyczne przykłady rozpoczęcia tworzenia własnych głębokich sieci neuronowych.
Baza kodu dla generatywnego głębokiego uczenia
Ostatni punkt tego rozdziału przygotowuje do rozpoczęcia tworzenia generatywnych modeli głębokiego uczenia poprzez wprowadzenie do bazy kodu dołączonej do tej książki.
Wiele przykładów zawartych w tej książce zostało zaadaptowanych z doskonałych implementacji open source, które są dostępne na stronie Keras (https://oreil.ly/1UTwa). Gorąco polecam sprawdzenie tego zasobu, ponieważ stale dodawane są nowe modele i przykłady.
Klonowanie repozytorium
W celu rozpoczęcia należy najpierw sklonować repozytorium Git. Git to system kontroli wersji typu open source, który umożliwia kopiowanie kodu lokalnie, dzięki czemu można uruchamiać notebooki na własnym komputerze lub w środowisku opartym na chmurze. Być może masz to już zainstalowane, ale, jeśli nie, należy postępować zgodnie z instrukcjami dotyczącymi Twojego systemu operacyjnego.
W celu sklonowania repozytorium tej książki należy przejść do folderu, w którym chcemy przechowywać pliki, i wpisać w terminalu następujące polecenie:
git clone https://github.com/davidADSP/Generative_Deep_Learning_2nd_Edition.git
Powinniśmy teraz zobaczyć pliki w folderze na swoim komputerze.
Użycie Dockera
Baza kodu tej książki jest przeznaczona do użytku z Dockerem, bezpłatną technologią konteneryzacji, która sprawia, że rozpoczęcie pracy z nową bazą kodu jest niezwykle łatwe, niezależnie od architektury i systemu operacyjnego. Jeśli nigdy nie korzystałeś z Dockera, nie martw się - opis, jak zacząć, znajduje się w pliku README w repozytorium książki.
Uruchamianie na GPU
Jeśli nie ma się dostępu do własnego GPU, to również nie stanowi to problemu! Wszystkie przykłady w tej książce będą szkolone z wykorzystaniem procesora, chociaż zajmie to więcej czasu, niż w przypadku komputera ze wsparciem obsługi GPU. W pliku README znajduje się również punkt poświęcony konfigurowaniu środowiska Google Cloud, które oferuje dostęp do procesora graficznego na zasadzie prepaidu.
Podsumowanie
W tym rozdziale przedstawiono dziedzinę modelowania generatywnego, ważną gałąź uczenia maszynowego, która uzupełnia szerzej badane modelowanie dyskryminacyjne. Omówiliśmy, że modelowanie generatywne jest obecnie jednym z najbardziej aktywnych i ekscytujących obszarów badań nad sztuczną inteligencją, charakteryzującym się wieloma postępami zarówno w teorii, jak i w praktycznym zastosowaniu.
Rozpoczęliśmy od uproszczonego przykładu i przekonaliśmy się, jak modelowanie generatywne koncentruje się na modelowaniu znajdującego się niżej rozkładu danych. Stwarza to wiele złożonych i interesujących wyzwań, które podsumowaliśmy w postaci ram pożądanych właściwości dowolnego modelu generatywnego.
Następnie omówiliśmy kluczowe koncepcje probabilistyczne, które pomogą w pełni zrozumieć teoretyczne podstawy każdego podejścia do modelowania generatywnego i przedstawiliśmy sześć różnych rodzin modeli generatywnych, które omówimy w części II tej książki. Przekonaliśmy się także, jak rozpocząć pracę z bazą kodu dla tej książki, klonując repozytorium.
W rozdziale 2 rozpoczniemy eksplorację głębokiego uczenia i przekonamy się, jak wykorzystać Keras do budowania modeli, które mogą wykonywać zadania modelowania dyskryminacyjnego. Zapewni nam to niezbędną podstawę do rozwiązania problemów związanych z generatywnym głębokim uczeniem w późniejszych rozdziałach.
1 Miles Brundage et al., "The Malicious Use of Artificial Intelligence: Forecasting, Prevention, and Mitigation," February 20, 2018, https://www.eff.org/files/2018/02/20/nal.pdf.