Widziałem kilka pytań na tej stronie na temat Deep Dream, jednak żadne z nich nie mówi konkretnie o tym, co robi DeepDream. O ile się zebrałem, wydaje się, że zmienili funkcję celu, a także zmienili propagację wsteczną, tak że zamiast aktualizacji wag aktualizują obraz wejściowy.
Zastanawiam się, czy ktoś dokładnie wie, co zrobił Google. Wspominają w jednym z artykułów narzucających bayesowskie priory, gdy przeprowadzają optymalizację, a dzięki temu mogę sobie wyobrazić, że uzyskanie sieci neuronowej do wyplucia obrazu dla każdej etykiety nie jest takie trudne - możemy po prostu ustawić etykietę, a następnie odpowiednio zoptymalizuj wektor wejściowy.
Jednak interesującą częścią głębokiego snu jest to, że robi to na warstwę i pod tym względem nie jestem pewien, jak podkreśla szczegóły w sposób na warstwę.
Oczywiście karmienie obrazem da ci wartości w każdym neuronie, ale w jaki sposób możemy wykorzystać te informacje do wyolbrzymienia szczegółów w oryginalnym obrazie? Z trudem znajdowałem szczegółowe opisy na ten temat.
Odniesienia: Tutaj vzn odpowiedział na podobne pytanie: https://cs.stackexchange.com/a/44857/49671
Od tego linku znajduje się implementacja Deepdream, tutaj: http://auduno.com/post/125362849838/visualizing-googlenet-classes
Tyle że nie oferuje przesady funkcji omówionych tutaj: http://googleresearch.blogspot.com/2015/06/inceptionism-going-deeper-into-neural.html
Gdzie oba pokazują wizualizację poszczególnych klas i poszczególnych warstw, i mówią:
Zamiast dokładnie określać, która funkcja ma zostać wzmocniona przez sieć, możemy pozwolić sieci podjąć tę decyzję. W takim przypadku po prostu karmimy sieć dowolnym obrazem lub zdjęciem i pozwalamy sieci przeanalizować obraz. Następnie wybieramy warstwę i prosimy sieć o ulepszenie wszystkiego, co wykryje.
źródło
Odpowiedzi:
Idea DeepDream jest następująca: wybierz jakąś warstwę z sieci (zwykle warstwę splotową), przepuść obraz początkowy przez sieć, aby wyodrębnić cechy na wybranej warstwie, ustaw gradient na tej warstwie równy samym aktywacjom, a następnie wstecznie propaguj do obrazu.
Dlaczego to ma sens? Intuicyjnie wzmacnia funkcje maksymalnie aktywowane w sieci. Propagując wstecz ten gradient, dokonamy aktualizacji obrazu, która zwiększy dowolną z istniejących aktywacji. Jeśli w warstwie znajduje się wykrywacz podobny do kota, a obraz zawiera łatkę, która wygląda trochę jak kot, DeepDream przyspiesza tę aktywację, aktualizując tę łatkę, aby była jeszcze bardziej podobna do kota. W rezultacie DeepDream próbuje znaleźć koty i psy wszędzie na obrazie (zestaw danych ImageNet zawiera wiele psów, więc sieć ma wiele neuronów związanych z psami).
objective_L2
źródło