Jednym z ciekawszych kierunków w Deep Learning jest idea autoenkoderów, czyli sieci neuronowych aproksymujących funkcję F(X)=X. W trakcie wystąpienia dowiecie się, w jaki sposób ten jeden prosty trik pozwala komputerom malować obrazy, tworzyć muzykę, zapobiegać atakom hakerów, diagnozować choroby, odkrywać nowe leki i wstawiać twarz Nicolasa Cage’a do każdego zdjęcia.
21. Autoenkodery – semantyczne haszowanie
Enkoder
Kot Kod
binarnyFunkcja
semantycznie
haszująca
Przestrzeń
adresowa
Semantycznie
podobne
obrazy
Obraz
wejściowy
28. Odkrywanie nowych leków
“Automatic Chemical Design Using a Data-
Driven Continuous Representation of
Molecules”, Gómez-Bombarelli et al., 2018
Przestrzeń cech leków
Potencjalnie nowy lek
Funkcja skuteczności leku
29. Generacja muzyki - MusicVAE
“A Hierarchical Latent Vector Model for Learning Long-Term Structure in
Music”, Roberts et al., 2018
experiments.withgoogle.com/melody-mixer
…….
?
46. Wojciech Malara i Krzysztof Kotowski
Autoenkodery
czyli zalety funkcji f(X) ≈ X
prototypeteam@future-processing.com
Notes de l'éditeur
TU SIĘ PRZEŁĄCZAMY (bez zmiany slajdu)
KK: a o tym jak inaczej można wykorzystać te najważniejsze cechy opowie nam Wojtek
WM:
Skoro na końcu takiej przyciętej sieci mamy wektor najważniejszych cech obrazu wejściowego, to zastanówmy się, czy dałoby się z nich odtworzyć nasz obraz wejściowy.
Moglibyśmy dołożyć drugą sieć, która przyjmowałaby ten wektor jako wejście i na wyjściu dawałaby oryginalny obraz.
Innymi słowy, ta druga sieć próbowałaby odkodować to co zostało zakodowane w tym wektorze.
Idąc krok dalej, można z tych dwóch sieci zrobić jedną sieć i trenować tak, by na wyjściu było to samo co na wejściu, bez żadnych dodatkowych informacji, czyli w tzw. sposób nienadzorowany.
Taka sieć, to właśnie AUTOENKODER.
Autoenkoder składa się z dwóch częsci: enkodera, który odpowiada ekstraktorowi cech ze zwykłej sieci klasyfikującej oraz dekodera, który z tych cech odtwarza dane wejściowe.
Czyli tak naprawdę, nasza tytułowa funkcja f(x)=x to funkcja złożona z dwóch: funkcji kodującej i dekodującej.
Ale zaraz, ktoś mógłby powiedzieć, taka sieć mogłaby po prostu w każdej kolejnej warstwie przekazywać dane z wejścia na wyjście.
Spełniałaby wymagania, ale byłaby bezużyteczna.
Więc teraz kluczowa informacja: ten środkowy wektor najważniejszych cech zwykle ma dużo mniejszy wymiar niż dane wejściowe i nazywany jest wąskim gardłem.
W związku z tym, AE zwykle przedstawiany jest jako taka przewrócona na bok klepsydra.
W enkoderze liczba wymiarów w kolejnych warstwach maleje, pośrodku mamy wąskie gardło i w dekoderze liczba wymiarów rośnie tak, by na końcu rozmiar był taki sam jak w danych wejsciowych.
Ograniczenie “przepustowości” w przekazywaniu informacji znacznie utrudnia AE dokładne odtworzenie danych wejściowych i wymusza na AE nauczenie się istotnych informacji o danych treningowych.
Intuicyjnie, ideę AE można porównać do stratnej kompresji.
Na obrazku widzimy przykładową sieć, która sprowadza obraz wejściowy z 784 wymiarów do dwóch i następnie odtwarza obraz wejściowy.
No dobrze, ale jakie są praktyczne zastosowania AE? Reszta naszej prezentacji będzie właśnie na ten temat.
Jednym z wariantów AE są AE odszumiające.
Ich trening polega na podawaniu na wejście danych, np. obrazów sztucznie zaszumionych / zniekształconych i wymaganiu, aby na wyjściu były dane odszumione.
Dzięki temu, że AE uczy się najważniejszych cech danych treningowych, działa on jak filtr, który nie przepuszcza nieistotnych informacji, w tym szumu.
Patrząc na to z innej perspektywy, można uznać, że AE w miejsce wadliwych lub brakujących danych generuje dane potencjalnie prawidłowe.
Ciekawym przykładem produktu wykorzystującego odszumianie jest Nvidia Optix, który przyspiesza renderowanie grafiki z wykorzystaniem bardzo kosztownego obliczeniowo Ray-tracingu. Przyspieszenie polega na tym, że ray-tracing przeprowadzany jest tylko dla części pikseli, a piksele z brakującymi danymi są traktowane jako szum, który jest usuwany.
Ciekawym przykładem produktu wykorzystującego odszumianie jest Nvidia Optix, który przyspiesza renderowanie grafiki z wykorzystaniem bardzo kosztownego obliczeniowo Ray-tracingu. Przyspieszenie polega na tym, że ray-tracing przeprowadzany jest tylko dla części pikseli, a piksele z brakującymi danymi są traktowane jako szum, który jest usuwany.
Inny praktyczny przykład wykorzystania AE pochodzi z projektu, w którym pracujemy.
Jednym z narzędzi, które rozwijamy w ramach AVS DLAo jest narzędzie do detekcji anomalii za pomocą systemów wizyjnych.
Zastanówmy się, jak można podejść do problemu wykrywania wadliwych produktów na linii produkcyjnej, np. w fabryce produkującej kapsułki do zmywarek. To co się nasuwa jako pierwsza myśl, to zgromadzenie zdjęć kapsułek prawdiłowych i wadliwych, a następnie klasyfikowanie obrazów z linii prod. Jednak tutaj pojawiają się pewne problemy:
po pierwsze: musimy mieć dużo zdjęć wadliwych kapsułek,
a po drugie: defekty mogą być różne i mieć nieprzewidywalne kształty.
W takiej sytuacji, bardzo dobrze sprawdza się wykrywanie anomalii.
W narzędziu tym, AE trenowany jest na wielu zdjęciach prawidłowych kapsułek starając się je rekonstruować.
Następnie, taki wytrenowany model używany jest do analizowania zdjęć na linii produkcyjnej.
Gdy autoenkoder otrzymuje na wejściu zdjęcie kapsułki z defektem, ze względu na ograniczone wąskie gardło, nie potrafi zrekonstruować defektu.
Rekonstruuje za to prawidłową kapsułkę.
Następnie zdjęcia takie możemy porównać i jeżeli różnica między nimi jest znacząca, uznajemy taki produkt za wadliwy.
Tutaj pozwolę sobie na małą kryptoreklamę,
narzędzie o którym mówię jest jednym z wielu narzędzi dostępnych w ramach AVS DL Ao.
Jest ono proste w użyciu i użytkownik by je wykorzystać tak naprawdę nie musi praktycznie nic wiedzieć o deep learningu.
Wracając do odszumiania obrazów.
Gdyby tak pójść krok dalej i nie tylko dodawać do obrazu szum, ale wręcz usuwać z niego fragmenty, a następnie trenować sieć tak, by była w stanie je odtworzyć.
To zadanie nazywamy inpaintingiem i jest on używany np. z Photoshopie do usuwania obiektów.
Filmik pokazuje jak to może wyglądać w praktyce.
Kolejnym bardzo ciekawym pomysłem na wykorzystanie faktu, iż AE potrafią generować brakujące dane jest pomysł na system rekomendacyjny DeepRecommender autorstwa ludzi z NVidii.
System taki mógłby działać np. na platformie Netflix do rekomendacji filmów dla użytkowników.
Wiadomo, że każdy użytkownik ocenia tylko bardzo niewielką część wszystkich filmów i seriali dostępnych na platformie.
W związku z tym taka macierz gdzie w wierszach mamy poszczególne filmy a w kolumnach uzytkowników jest bardzo rzadka, tzn. zawiera więcej braków danych niż danych.
DeepRecommender, wykorzystując AE jest w stanie wygenerować brakujące oceny i na tej podstawie sugerować użytkownikom filmy, które potencjalnie trafiają w ich gusta.
Warto dodać, że siła AE to nie tylko to, co produkują na wyjściu, ale także wektor wartości ukrytych w wąskim gardle.
Dzięki temu AE można traktować jako metodę redukcji liczby wymiarów, co jest zastosowaniem istotnym z punktu widzenia innych metod maszynowego uczenia oraz wizualizacji danych.
Tutaj widzimy przykład redukcji obrazków 28x28, czyli 784 wymiarów do 2 na potrzeby wizualizacji danych w 2D.
Kolejny ciekawy pomysł na wykorzystanie AE to semantyczne haszowanie.
Metoda ta wykorzystuje dane z wąskiego gardła, które są binaryzowane i traktowane jako adresy w pewnej przestrzeni adresowej.
Enkoder traktowany jest tu jako funkcja semantycznie haszująca, która dla danych semantycznie podobnych zwraca nieznacznie różniące się adresy.
Dzięki temu, jeśli np. podamy na wejście zdjęcie kota i chcemy otrzymać w wyniku wyszukiwania inne zdjęcia kotów, możemy zmieniać pojedyncze bity w otrzymanym kodzie i w ten sposób otrzymywać obrazy semantycznie podobne.
WM: Analogicznie, semantyczne haszowanie można wykorzystać do wyszukiwania dokumentów tekstowych o podobnej tematyce.
KK: Jednak kiedy przechodzimy do wykorzystania w ten sposób wektora cech często standardowy autoenkoder może być niewystarczający...
Jaki jest problem standardowego ae? Rozkład wektorów w przestrzeni cech może być bardzo nieregularny, nie narzucamy na to żadnych ograniczeń, przez co przejście z jednej do drugiej klasy może prowadzić przez nieznane rejony ukrytej przestrzeni cech generując nieprzewidywalne rezultaty
Jak możemy temu zaradzić? Możemy nałożyć pewne ograniczenie na wektory cech, np. zapewnić żeby ich wartości miały rozkład normalny. W tym celu modyfikujemy funkcję straty sieci dodając do niej miarę normalności rozkładu. Tak żeby oprócz poprawnej rekonstrukcji, liczył się też poprawny rozkład wektorów.
...
WM: A propos manipulowania twarzami...
Zapewne wielu z was słyszało o czymś takim jak deepfakes.
Czyli sieci, która pozwala podmieniać twarze z zachowaniem mimiki i położenia.
Deepfakes zasłynęły z tego, że twarze aktorek z filmów tradycyjnych były umieszczane w filmach nieco mniej tradycyjnych… oraz z tego, że pozwalają wkładać politykom w usta... dowolne słowa.
W związku z tym pojawiły się spore kontrowersje i wątpliwości etyczne dotyczące wykorzystania tzw. AI.
Pomińmy jednak te problemy i powiedzmy sobie jak działają deepfakes z technicznego punktu widzenia.
DF to nic innego jak ciekawe wykorzystanie AE, który ma jeden enkoder i dwa osobne dekodery dla osób, między którymi chcemy zrobić przeszczep twarzy.
W tym przypadku Trumpa i Cage’a.
Sieć taką trenujemy podając na zmianę zdjęcia obu osób, z tym, że dla danej osoby trenowany jest tylko jej dekoder.
Oczywiście trening wymaga wielu zdjęć każdej z osób.
Następnie, chcąc podmienić np. twarz Trumpa na Cage’a, podpinamy do enkodera dekoder Cage’a a na wejście podajemy zdjęcie Trumpa.
Można to tak rozumieć, że enkoder wyciąga abstrakcyjne cechy twarzy, które następnie dekoder wpisuje w twarz osoby, na której był trenowany.
Kolejnym, bardzo efektownym wykorzystaniem DL jest transfer stylu, który pozwala np. na przerobienie zwykłego zdjęcia tak, by wyglądało jakby je namalował Picasso.
Oryginalna sieć, która do tego służyła nie wykorzystywała AE, ale od tych dawnych czasów (2015), powstało wiele alternatywnych architektur do transferu stylu, w tym oparte na AE.
Ogólnie rzecz biorąc, sieci do transferu stylu bazują na podziale na styl i zawartość obrazu.
Przykładem sieci do transferu stylu opartej na AE jest StyleBank.
Sieć ta ma dwa wąskie gardła: jedno odpowiada za zawartość a drugie za styl obrazu.
Styl jest aplikowany za pomocą dodatkowych warstw konwolucyjnych, które działają na ukrytej reprezentacji obrazu.
Ciekawą cechą StyleBanku jest to, że jak sama nazwa wskazuje, pozwala na utworzenie banku wielu styli, które można nakładać na obraz niezależnie lub też tworzyć ich kombinacje